Ansible - когда условие не работает с метазадачей
Похоже, у меня проблемы с использованием условия when в метатеге. Я пробовал несколько вариантов и тоже немного читал, все еще неуверенный, поэтому я подумал, что спрошу и здесь
Задачи
- name: "This is my task"
command: "{{ path to conda }} {{ script }}"
register: check
until: check is succeeded
retries: 5
no_log: false
- name: "End this play if the script ran successfully on 1 remote target"
meta: end_play
when:
- check is succeeded
ошибка
ОШИБКА! Условная проверка "проверка выполнена успешно" не удалась. Ошибка заключалась в следующем: в неудавшемся тесте ожидается словарь. Похоже, что ошибка была в '/path/to/roles/tasks/main.yml': строка 9, столбец 3, но может быть в другом месте файла в зависимости от точного синтаксиса проблема. Оскорбительная строка выглядит так: - name: "Завершите эту игру, если сценарий успешно выполнил на 1 удаленной цели" ^ здесь
Обновление (обмен для доработки)
Совместное использование предписанного обходного пути. В моем случае использования я, по сути, хотел "попробовать" задачу на всем инвентаре, пока не добился успеха.
Закончился использованием host vars. Это всегда будет пытаться выполнить задачу, если это 1-й хост в инвентаре, и будет "оглядываться" на попытку предыдущего хоста, прежде чем принять решение о повторном выполнении на следующем хосте inv.
# my task
- name: "Attempt this task on each host if unsuccessful"
raw: "raw_command_here_as_remote_host_is_using_rbash"
register: status
when: >
inventory_hostname == ansible_play_hosts_all[0] or
hostvars [ ansible_play_hosts_all [ groups ['my_host_group'].index(inventory_hostname) | int - 1 ] ] ['stop_it'] == 'false'
ignore_errors: yes
until: status is succeeded
retries: 1
- set_fact:
stop_it: true
cacheable: yes
when: status is succeeded
- set_fact:
stop_it: false
cacheable: yes
when: status is not succeeded
1 ответ
Обновление (поделиться ответом для завершения)
Совместное использование предписанного обходного пути. В моем случае использования я, по сути, хотел "попробовать" задачу на всем инвентаре, пока не добился успеха.
Закончился использованием host vars. Это всегда будет пытаться выполнить задачу, если это 1-й хост в инвентаре, и будет "оглядываться" на попытку предыдущего хоста, прежде чем принять решение о повторном выполнении на следующем хосте inv.
# my task
- name: "Attempt this task on each host if unsuccessful"
raw: "raw_command_here_as_remote_host_is_using_rbash"
register: status
when: >
inventory_hostname == ansible_play_hosts_all[0] or
hostvars [ ansible_play_hosts_all [ groups ['my_host_group'].index(inventory_hostname) | int - 1 ] ] ['stop_it'] == 'false'
ignore_errors: yes
until: status is succeeded
retries: 1
- set_fact:
stop_it: true
cacheable: yes
when: status is succeeded
- set_fact:
stop_it: false
cacheable: yes
when: status is not succeeded