Q: «У каждого хоста должно быть 4« категории »: среда, функция, кластер и приложение. Как я могу добиться этого без необходимости постоянно повторять записи?"
A: Можно объявить параметры по умолчанию в разделе [*: vars] и переопределить его параметрами, указанными для c хоста. См. Как объединяются переменные . Например, инвентарь
$ cat hosts
[PRO_OSB]
test_01 my_cluster='cluster_A'
test_02
[PRO_WL]
test_03 my_cluster='cluster_A'
test_04
[PRO:children]
PRO_OSB
PRO_WL
[PRO:vars]
my_environment='default_env'
my_function='default_fnc
my_cluster='default_cluster'
my_app='default_app'
с книгой воспроизведения
- hosts: PRO
gather_facts: false
tasks:
- debug:
msg: "{{ inventory_hostname }}
{{ my_environment }}
{{ my_function }}
{{ my_cluster }}
{{ my_app }}"
дает (переменная my_cluster test_01 и test_03 была переопределена значением хоста)
"msg": "test_01 default_env 'default_fnc cluster_A default_app"
"msg": "test_02 default_env 'default_fnc default_cluster default_app"
"msg": "test_04 default_env 'default_fnc default_cluster default_app"
"msg": "test_03 default_env 'default_fnc cluster_A default_app"
Q: "Запустите playbooks, указав еще больше, то есть заботясь о среде, ее функциях, кластере хостов и приложении."
Возможно создание динами c группируется с модулем add_host
и выбирает хосты по мере необходимости. Например, создайте новую группу cluster_A
в первой игре и используйте ее в следующей.
- hosts: all
tasks:
- add_host:
name: "{{ item }}"
group: cluster_A
loop: "{{ hostvars|
dict2items|
json_query('[?value.my_cluster == `cluster_A`].key') }}"
delegate_to: localhost
run_once: true
- hosts: cluster_A
tasks:
- debug:
var: inventory_hostname
дает
ok: [test_01] => {
"inventory_hostname": "test_01"
}
ok: [test_03] => {
"inventory_hostname": "test_03"
}