Ansible - 根据主机名前缀定义设置

时间:2017-09-06 16:00:03

标签: ansible

我希望能够根据主机名的前缀在ansible playbook中设置值。

e.g。启动LondonXXXX的主机接收DNS的IP 192.168.1.1      启动NewYorkXXX的主机接收DNS等的IP 192.168.2.1

我尝试了各种方法但似乎无法使其工作。我在剧本中引用变量.yml:

  vars_files:
    - dns.yml

我在DNS.yml文件中尝试过的一些例子:

---
- include:
  - name: Check if located in London
    set_fact: 
      DNS: '192.168.1.1'
    when: ansible_hostname.find("London") != -1

  - set_fact:
      DNS: '192.168.2.1'
    when: '"NewYork" in ansible_hostname'

如果这是一个简单的语法问题,我是使用ansible的新手,所以道歉。

2 个答案:

答案 0 :(得分:1)

vars文件只是name:value对的集合。它无法完成任务。您发布的示例中似乎也存在一些语法错误,您可能会使用一些实际不存在的变量。

如果你想使用像set_fact这样的任务,那就需要进入剧本。例如,你可以这样做:

- hosts: all
  gather_facts: false
  tasks:
    - name: Check if located in London
      set_fact:
        DNS: '192.168.1.1'
      when: >
        "London" in inventory_hostname

    - set_fact:
        DNS: '192.168.2.1'
      when: >
        "NewYork" in inventory_hostname

    - debug:
        msg: "Variable DNS is: {{DNS}}"

给出一个如下所示的清单:

London1234 ansible_host=localhost ansible_connection=local
NewYork1234 ansible_host=localhost ansible_connection=local

我可以像这样运行上面的剧本:

ansible-playbook playbook.yml -i hosts

得到:

PLAY [all] *********************************************************************************

TASK [Check if located in London] **********************************************************
ok: [London1234]
skipping: [NewYork1234]

TASK [set_fact] ****************************************************************************
skipping: [London1234]
ok: [NewYork1234]

TASK [debug] *******************************************************************************
ok: [London1234] => {
    "msg": "Variable DNS is: 192.168.1.1"
}
ok: [NewYork1234] => {
    "msg": "Variable DNS is: 192.168.2.1"
}

PLAY RECAP *********************************************************************************
London1234                 : ok=2    changed=0    unreachable=0    failed=0   
NewYork1234                : ok=2    changed=0    unreachable=0    failed=0   

答案 1 :(得分:0)

在我看来,在group_vars文件中使用该变量会更容易。然后,您的库存会将伦敦的东道主纳入伦敦集团,而纽约的东道主则会进入New_York集团。