У меня возникли проблемы с использованием условия 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 удаленной цели» ^ здесь
Обновление (обмен для завершения)
Обмен предписанным обходным путем. В моем сценарии использования я, по сути, хотел «попробовать» задачу по всему инвентару до тех пор, пока успешно
не закончится использованием хостов. Это всегда будет пытаться выполнить задачу, если она является первым хостом в инвентаре, и будет «оглядываться назад» на предыдущую попытку хоста, прежде чем принять решение выполнить ее снова на следующем инв хосте.
# 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