Ansible ERROR! 'retries' не является допустимым атрибутом для TaskInclude
Мое требование - запустить скрипт stop-all
столько раз (5 попыток), пока на выходе ps -fu user1 |wc -l
становится меньше 2.
Я написал нижеприведенную книгу воспроизведения для того же:
cat stop.yml
- hosts: dest_nodes
tasks:
- name: Start service
include_tasks: "{{ playbook-dir }}/inner.yml"
retries: 5
delay: 4
until: stopprocesscount.stdout is version('2', '<')
cat inner.yml
- name: Start service
shell: ~/stop-all
register: stopprocess
- name: Start service
shell: ps -fu user1 |wc -l
register: stopprocesscount
Однако при запуске playbook я получаю следующую ошибку.
ERROR! 'retries' is not a valid attribute for a TaskInclude
The error appears to be in '/app/playbook/stop.yml': line 19, column 9, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Start service
^ here
Не могли бы вы предложить?
2 ответа
Прежде всего, исправьте отступы задач в inner.yml
. Во-вторых, удалитеretries
, delay
а также until
от stop.yml
и переместите их в конкретную задачу, поскольку это параметры уровня задачи.
Поскольку вам нужно повторить одну задачу на основе другой задачи, вы можете просто объединить сценарий и команду и извлечь результат команды wc -l, как показано ниже:
Поскольку stdout_lines будет содержать список строк, а версия требует int, следовательно, преобразование.
inner.yml
- name: Start service
shell: ~/stop-all; ps -fu user1 | wc -l
register: stopprocesscount
retries: 5
delay: 4
until: stopprocesscount.stdout_lines[stopprocesscount.stdout_lines | length - 1] | int is version('2', '<')
stop.yml
- hosts: dest_nodes
tasks:
- name: Start service
include_tasks: "{{ playbook-dir }}/inner.yml"
Не все атрибуты задачи работают со всеми задачами (здесь задача TaskInclude).
Нет четкой документации, такой матрицы совместимости, но сообщение об ошибке здесь вполне понятное "не является допустимым атрибутом".
По экземпляру:
Вы не можете зациклить блок:
'with_items' is not a valid attribute for a Block
Вы не можете асинхронизировать TaskInclude, см . https://github.com/ansible/ansible/issues/57051.