#python #ansible #yaml #jinja2
#python #ansible #yaml #jinja2
Вопрос:
Допустим, у меня это определено в моей group_vars:
ucarp_data:
- vhid: 6
interface: eth0
hosts:
- 10.1.60.4
- 10.1.60.5
options: --shutdown --preempt
- vhid: 9
interface: eth0
hosts:
- 10.1.60.7
- 10.1.60.8
options: --shutdown --preempt
Я хочу проверить, что хост, с которым я сейчас работаю, находится в этом hosts:
массиве.
Что-то вроде:
- name: Check if ucarp_data contains this host
assert:
that: ansible_host in ucarp_data.hosts
Но это возвращает fatal: [test_machine]: FAILED! => {"msg": "The conditional check 'ansible_host in ucarp_data.hosts' failed. The error was: error while evaluating conditional (ansible_host in ucarp_data.hosts): 'dict object' has no attribute 'hosts'"
Есть идеи?
Также я продолжаю сталкиваться с этими препятствиями с помощью Ansible и вложенных переменных yaml… Кажется, я не могу динамически исследовать, как если бы я был в записной книжке Jupyter, у меня есть завершение вкладки для любого объекта Python, что очень помогает, какие-нибудь советы по этому поводу?
Ответ №1:
Например, учитывая список ucarp_data, приведенный ниже сборник пьес
- hosts: 10.1.60.5,10.1.60.7,10.1.60.9
tasks:
- assert:
that: inventory_hostname in ucarp_data|map(attribute='hosts')|flatten
fail_msg: "[ERR] {{ inventory_hostname }} not in ucarp_data"
дает (сокращенный)
ok: [10.1.60.5] => changed=false
msg: All assertions passed
ok: [10.1.60.7] => changed=false
msg: All assertions passed
fatal: [10.1.60.9]: FAILED! => changed=false
assertion: inventory_hostname in ucarp_data|map(attribute='hosts')|flatten
evaluated_to: false
msg: '[ERR] 10.1.60.9 not in ucarp_data'