在Ansible中,可以使用条件判断来确保每个角色只在一个主机组上运行。下面是一个包含代码示例的解决方法:
site.yml
的Ansible Playbook文件,用于定义主机组和角色的关系:---
- name: Run roles on specific host groups
hosts: all
gather_facts: false
roles:
- { role: role1, when: "'group1' in group_names" }
- { role: role2, when: "'group2' in group_names" }
在上面的示例中,Playbook定义了两个角色:role1
和role2
。当主机组包含group1
时,role1
将运行;当主机组包含group2
时,role2
将运行。
inventory.ini
的Ansible Inventory文件,用于定义主机和主机组的关系:[group1]
host1
[group2]
host2
在上面的示例中,group1
包含host1
,group2
包含host2
。
roles/role1/tasks/main.yml
的文件,用于定义role1
的任务:---
- name: Task 1 for role1
debug:
msg: "Running Task 1 for role1"
在上面的示例中,role1
的任务是打印一条调试信息。
roles/role2/tasks/main.yml
的文件,用于定义role2
的任务:---
- name: Task 1 for role2
debug:
msg: "Running Task 1 for role2"
在上面的示例中,role2
的任务是打印一条调试信息。
ansible-playbook -i inventory.ini site.yml
根据主机组的不同,适当的角色将在相应的主机组上运行。例如,如果inventory.ini
中只包含host1
,那么role1
将在host1
上运行;如果inventory.ini
中只包含host2
,那么role2
将在host2
上运行。
这种方法确保每个角色只在一个主机组上运行,并且根据实际需求进行了灵活的配置。