Условно импортируйте playbook на основе vars_prompt в Ansible - PullRequest
0 голосов
/ 10 июня 2019

Я использую следующий ANSI-скрипт для импорта книги воспроизведения на основе пользовательского ввода,

---
- hosts: localhost
  vars_prompt:
    - name: "cleanup"
      prompt: "Do you want to run cleanup? Enter [yes/no]"
      private: no

- name: run the cleanup yaml file
  import_playbook: cleanup.yml
  when: cleanup == "yes"

Журнал выполнения:

bash-$ ansible-playbook -i hosts cleanup.yml

Do you want to run cleanup? Enter [yes/no]: no

PLAY [localhost] *********************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
ok: [127.0.0.1]

PLAY [master] ********************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
fatal: [192.168.56.128]: FAILED! => {"msg": "The conditional check 'cleanup == \"yes\"' failed. The error was: error while evaluating conditional (cleanup == \"yes\"): 'cleanup' is undefined"}
        to retry, use: --limit @/home/admin/playbook/cleanup.retry

PLAY RECAP ***************************************************************************************************************************
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0
192.168.56.128             : ok=0    changed=0    unreachable=0    failed=1

Выдает ошибку в импортированной книге воспроизведения, а не в почтовой книге воспроизведения. Пожалуйста, помогите мне импортировать сборник пьес на основе пользовательского ввода.

1 Ответ

1 голос
/ 10 июня 2019

vars_prompt переменные определены только в пьесе, в которой они были вызваны.Чтобы использовать их в других играх, обходной путь должен использовать set_fact для привязки переменной к хосту, а затем использовать hostvars для доступа к этому значению из второй игры.

Например:

---
- hosts: localhost
  vars_prompt:
    - name: "cleanup"
      prompt: "Do you want to run cleanup? Enter [yes/no]"
      private: no
  tasks:
    - set_fact:
          cleanup: "{{cleanup}}"
    - debug:
          msg: 'cleanup is available in the play using: {{cleanup}}'
    - debug:
          msg: 'cleanup is also available globally using: {{hostvars["localhost"]["cleanup"]}}'

- name: run the cleanup yaml file
  import_playbook: cleanup.yml
  when: hostvars["localhost"]["cleanup"] == True
...