我希望能够根据主机名的前缀在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的新手,所以道歉。
答案 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集团。