Ansible-基于主机名前缀定义设置
我希望能够根据主机名的前缀在ansible playbook中设置值 e、 g.启动LondonXXXX的主机接收DNS的IP 192.168.1.1 启动NewYorkXXX的主机会收到DNS等的IP 192.168.2.1 我试过各种方法,但似乎都没能奏效。我通过以下方式引用剧本中的变量.yml:Ansible-基于主机名前缀定义设置,ansible,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
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,因此如果这是一个简单的语法问题,我深表歉意。vars文件只是名称:值对的集合。它不能有任务。在您发布的示例中似乎还存在一些语法错误,可能您使用的是一些实际上不存在的变量 如果你想使用像
set\u 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
给定一个如下所示的清单:
- 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
我可以这样运行上面的剧本:
- 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
在我看来,在group_vars文件中使用该变量会更容易。然后,您的资源清册会将伦敦主机放入伦敦组,将纽约主机放入纽约组。谢谢larsks,但我希望从配置文件中引用,而不是在剧本中对其进行配置。看起来我可能不得不以不同的方式管理hosts文件并使用group_varsSure,只是您的示例试图使用
set_fact
模块,该模块仅在剧本中有效。解决这个特殊问题绝对有其他方法。