Ansible - 'when' не является допустимым атрибутом для игры - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь понять, как "удалить" предупреждающее сообщение [WARNING]: Could not match supplied host pattern, ignoring: ps_nodes, исправив причину root. Причина root для меня в том, что при создании машины Linux у нас останутся пустые хосты ps_nodes. Итак, я пытался добавить block: + when: (os_type|capitalize) == "Windows", чтобы гарантировать, что Play будет выполняться только тогда, когда os_type - это создание Windows.

Как я могу этого добиться? Потому что я пытаюсь использовать условие when, но похоже, что это невозможно, и я не уверен, что больше искать.

Пример кода:

    - name: "Start handling of vm specific delete scripts for Windows machines"
      block:
        hosts: ps_nodes
        any_errors_fatal: false
        gather_facts: false
        vars:
          private_ip_1: "{{ hostvars['localhost']['_private_ip_1']|default('') }}"
          scripts: "{{ hostvars['localhost']['scripts'] }}"
          sh_script_dir: "{{ hostvars['localhost']['sh_script_dir'] }}"
          cred_base_hst: "{{ hostvars['localhost']['cred_base_hst'] }}"
          cred_base_gst: "{{ hostvars['localhost']['cred_base_gst'] }}"
          newline: "\n"

        tasks:
        - import_tasks: roles/script/tasks/callWindowsScripts.yml
          when: action == 'delete'
      when: (os_type|capitalize) == "Windows"

Ошибка при использовании "когда" для игры:

ERROR! 'when' is not a valid attribute for a Play

The error appears to be in '/opt/projectX/playbooks/create_vm.yml': line 265, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

##############################################################################
- name: \"Start handling of vm specific delete scripts for Windows machines\"
  ^ here

1 Ответ

0 голосов
/ 26 мая 2020

Думаю, проблема в отступе. Используйте 'и':

  - name: "Start handling of vm specific delete scripts for Windows machines"
      block:
        hosts: ps_nodes
        any_errors_fatal: false
        gather_facts: false
        vars:
          private_ip_1: "{{ hostvars['localhost']['_private_ip_1']|default('') }}"
          scripts: "{{ hostvars['localhost']['scripts'] }}"
          sh_script_dir: "{{ hostvars['localhost']['sh_script_dir'] }}"
          cred_base_hst: "{{ hostvars['localhost']['cred_base_hst'] }}"
          cred_base_gst: "{{ hostvars['localhost']['cred_base_gst'] }}"
          newline: "\n"

        tasks:
        - import_tasks: roles/script/tasks/callWindowsScripts.yml
          when: action == 'delete' and (os_type|capitalize) == "Windows"

Понятно,

Что, если вы используете существующий хост, например localhost, проверьте количество хостов в ps_nodes и делегируйте им?

Примерно так:

hosts: localhost
vars:
tasks:
 - import_tasks: roles/script/tasks/callWindowsScripts.yml
   delegate_to: ps_nodes
   when: {{ ps_nodes | length > 0}}
...