通过 Jinja 条件语句向 Ansible playbook 提供主机值

通过 Jinja 条件语句向 Ansible playbook 提供主机值

我有一个 Ansible 角色,我想根据特定条件在特定主机上执行。

我想填写hostsAnsible 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

答案1

只要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:

相关内容