Ansible
通過 Jinja 條件向 Ansible playbook 提供主機價值
我有一個 Ansible 角色,我想根據特定條件在特定主機上執行該角色。
我想填充
hosts
來自 Ansible Tower 的調查。這是我的劇本:- name: HTTP Response Deploy Automation hosts: "{% if geo == 'LHR' %}'dblhr002' {% elif geo == 'SJC' %}'dbsjc003' {% endif %}" gather_facts: true roles: - http-response-deploy
選擇 LHR 時出現以下錯誤:
[WARNING]: Could not match supplied host pattern, ignoring: 'dblhr002'
請注意,當我選擇省略主機名周圍的引號時,它不起作用。
TLDR;需要實現 Ansible 的條件如下:
if geo == "LHR": hosts: dblhr002 if geo == "SJC": hosts: dbsjc003
只要
dblhr002
在庫存中列出,您提供的內容就可以正常工作。主機模式僅匹配現有主機,它們不會將新主機添加到清單中。ec2-user@pandora ~ $ cat test.yml - hosts: "{% if geo == 'LHR' %}'dblhr002' {% elif geo == 'SJC' %}'dbsjc003' {% endif %}" gather_facts: false tasks: - debug: ec2-user@pandora ~ $ ANSIBLE_INVENTORY_ENABLED=host_list ansible-playbook ~/test.yml -e geo=LHR -i dblhr002, PLAY [dblhr002] **************************************************************** TASK [debug] ******************************************************************* ok: [dblhr002] => { "msg": "Hello world!" } PLAY RECAP ********************************************************************* dblhr002 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
如果您需要動態添加主機,請
add_host
在單獨播放中使用任務。- hosts: localhost gather_facts: false tasks: - add_host: name: "{{ host_map[geo] }}" groups: target_host vars: host_map: LHR: dblhr002 SJC: dbsjc003 - hosts: target_host gather_facts: false tasks: - debug: