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.

Другие вопросы по тегам