Ansible

通過 Jinja 條件向 Ansible playbook 提供主機價值

  • October 8, 2021

我有一個 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:

引用自:https://serverfault.com/questions/1079905