Как ждать, пока переменная будет определена? - PullRequest
0 голосов
/ 11 июня 2019

Есть ли способ заставить playbook ожидать определения переменной?

Чтобы сократить время выполнения playbook, я хотел бы разделить его на несколько и запустить их одновременновремя.Некоторым из них нужны переменные, которые определены в других книгах.

Возможно ли это?

1 Ответ

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

ИМХО это не возможно. Глобальная область действия устанавливается только через config, переменные среды и командную строку.

Другие переменные являются общими в области воспроизведения.Можно импортировать больше Playbooks в одну PlayBook с import_playbook и делиться переменными среди Playbooks.Но невозможно позволить импортированным пьесам работать асинхронно и ждать друг друга.

Можно использовать внешнюю общую память (например, базу данных) и запустить такуюPlaybooks отдельно.Например, для обмена переменными между книгами воспроизведения на контроллере, простой ini-файл сделает эту работу.

$ cat shared-vars.ini
[global]

Книга воспроизведения ниже

- hosts: localhost
  tasks:
    - wait_for:
        path: "{{ playbook_dir }}/shared-vars.ini"
        search_regex: "^shared_var1\\s*=(.*)"
    - debug:
        msg: "{{ lookup('ini', 'shared_var1 file=shared-vars.ini') }}"

ожидает переменную shared_var1 в файле shared-vars.ini

$ ansible-playbook wait_for_var.yml

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

TASK [wait_for] ********************************************************

Следующая пьеса

- hosts: localhost
  tasks:
    - ini_file:
        path: "{{ playbook_dir }}/shared-vars.ini"
        section: global
        option: shared_var1
        value: Test value set by declare_var.yml

записывает переменную shared_var1 вfile shared-vars.ini

$ ansible-playbook declare_var.yml

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

TASK [ini_file] ********************************************************
changed: [localhost]

PLAY RECAP *************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0

Первая книга воспроизведения, которая ожидала переменную, продолжается

TASK [debug] ***********************************************************
ok: [localhost] => {
    "msg": "Test value set by declare_var.yml"
}

PLAY RECAP *************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...