在Ansible清单中,可以使用主机变量来定义组关联,以便根据主机变量的值将主机分配到不同的组中。以下是一个示例解决方法:
假设我们有以下清单文件 inventory.ini
:
[web]
host1 ansible_host=192.168.0.1 webapp=nginx
host2 ansible_host=192.168.0.2 webapp=apache
[db]
host3 ansible_host=192.168.0.3 db_type=mysql
在上面的示例中,我们定义了三个主机,并使用主机变量 webapp
和 db_type
来定义它们的角色。
接下来,在Playbook中使用这些组进行操作。例如,我们可以使用以下Playbook playbook.yml
:
---
- name: Example playbook
hosts: all
gather_facts: false
tasks:
- name: Print web servers
debug:
msg: "{{ inventory_hostname }} is a web server"
when: "'web' in group_names"
- name: Print database servers
debug:
msg: "{{ inventory_hostname }} is a database server"
when: "'db' in group_names"
在上面的示例中,我们使用 group_names
变量来判断主机所属的组,并根据组的不同执行不同的任务。
执行这个Playbook:
ansible-playbook -i inventory.ini playbook.yml
输出结果将根据主机的组成员关系而不同。
对于主机 host1
和 host2
,输出将是:
TASK [Print web servers] *********************************************
ok: [host1] => {
"msg": "host1 is a web server"
}
ok: [host2] => {
"msg": "host2 is a web server"
}
对于主机 host3
,输出将是:
TASK [Print database servers] ****************************************
ok: [host3] => {
"msg": "host3 is a database server"
}
这样,我们就可以根据主机变量的值将主机分配到不同的组中,并根据组的不同执行不同的任务。
下一篇:Ansible求和寄存器值