ИМХО это не возможно. Глобальная область действия устанавливается только через 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