Ansible зарегистрированная переменная имеет атрибут не найден ошибка из-за нескольких условий - PullRequest
0 голосов
/ 25 февраля 2020

Как мы проверяем зарегистрированную переменную, если только одно из двух условий оказывается истинным, имея одну и ту же зарегистрированную переменную?

Ниже мой playbook, который выполняет только один из двух модулей оболочки.

- name: Check file
    shell: cat /tmp/front.txt
    register: myresult
  when: Layer == 'front'

- fail:
    msg: data was read from front.txt and print whatever
  when: myresult.rc != 0

- name: Check file
    shell: cat /tmp/back.txt
    register: myresult
  when: Layer == 'back'

- fail:
    msg: data was read from back.txt and print whatever
  when: myresult.rc != 0

Запустите вышеприведенный playbook как

ansible-playbook test.yml -e Layer="front"

Я получаю сообщение об ошибке, в котором говорится, что myresult не имеет атрибута r c. Каков наилучший способ распечатать операторы debug one на основе выполненного условия?

Примечание: я sh не могу завершить выполнение воспроизведения, как только условие выполнено, следовательно, я верю ignore_errors с ошибкой не поможет.

Примечание: Модули оболочки могут быть любой Unix командой.

Я пытался изменить myresult, но это тоже не помогает. Можете ли вы предложить.

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете захотеть взглянуть на эту логическую группировку задач: блоки

- name: Check file
  block:
        - name: check file
          shell: cat /tmp/front.txt
          register: myresult
          ignore_errors: true

        - fail:
                  msg: data was read from front.txt and print whatever
          when: myresult.rc != 0
  when: Layer == 'front'
- name: Check file
  block:
        - name: check file
          shell: cat /tmp/back.txt
          register: myresult
          ignore_erros: true

        - fail:
               msg: data was read from back.txt and print whatever
          when: myresult.rc != 0
  when: Layer == 'back'

, когда переменная Layer установлена ​​в front, она выполнит команду оболочки для front. но в случае, если файл не существует, он выдаст ошибку, такой файл не существует и остановит воспроизведение. поэтому я поместил ignore_errors в shell task.it проигнорирует его и перейдет к модулю сбоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...