我创建了一个角色,我已经定义了所有的ansible任务。此外,我在库存中有主机A和主机B.是否可以在主机A上执行90%的任务,在主机B上执行10%的任务?我的Ansible控制器是主机C.
答案 0 :(得分:9)
如果您在两个不同主机之间分配一个角色中的所有任务,那么这些主机中都没有真正具有该角色,是吗?我说这是滥用角色系统,当你真的有两个任务时,将所有这些任务集中到一个角色。
如果您有多个主机As,会发生什么?那么多个主机B呢?
在我看来,你实际上并不想在这里使用一个角色 - 你只想使用一个普通的角色。剧本。
- hosts: A
tasks:
[...]
- hosts: B
tasks:
[...]
Playbooks用于按特定顺序定义一系列操作,并且只有在A"上执行此操作后,您才能在B上执行此操作。就是这样。
答案 1 :(得分:5)
我能想到的第一种方法是使用基于库存的条件。
在A的广告资源中创建一个组,为B创建一个组。我将这些组称为group_A和group_B
# inventory
[group_A]
192.168.1.20
[group_B]
192.168.1.30
然后在你的任务上使用条件
- name: run this on A
debug: msg="this runs only on A
when: "'group_A' in {{group_names}}"
- name: run this on B
debug: msg="this runs only on B
when: "'group_B' in {{group_names}}"
根据您拥有的任务数量,为每项任务设置条件可能太多,因此您可以在包含上使用条件,如下所示:
文件结构:
-tasks
|- main.yml
|- A_tasks.yml
|- B_tasks.yml
main.yml:
- include: A_tasks.yml
when: "'group_A' in {{group_names}}"
- include: B_tasks.yml
when: "'group_B' in {{group_names}}"
A_tasks.yml:
- name: run on A
debug: msg="this only runs on A"
B_tasks.yml:
- name: run on B
debug: msg="this only runs on B"