2016-05-14 26 views
2

我创建了一个角色,我在其中定义了所有合理的任务。另外,我在库存中有主机A和主机B.是否有可能在主机A上执行90%的任务,在主机B上执行10%的任务?我的Ansible控制器是主机C.在不同的主机上执行Ansible任务

+1

对于主机A而言,90%的任务和主机B上的10个任务意味着什么? – shaps

+0

我在主机A上部署堆栈,我想在主机B上执行配置后脚本。这些脚本应该从可控制器(主机C)或从主机A到主机B,但我不确定如何实现。 – tgcloud

+0

但是,我设法通过提取主机C并使用“delegate_to”来在主机B上执行scp来推送脚本,但无法执行这些脚本。 – tgcloud

回答

3

我认为这样做的第一种方法是基于库存的条件。

在清单中为创建一个组,并为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" 
+0

这可能在旧版本的Ansible中正常工作,但至少从版本2.4.2.0开始,条件应该是'when:'group_names“'中的'group_A'。 –

6

如果你正在分裂的所有任务在一个两个不同主机之间的角色,那么这两个主机都没有这个角色,是吗?我想说,当你真的有两个角色时,将所有这些任务集中到一个角色中,这是对角色系统的滥用。

如果您有多台主机As,会发生什么情况?怎么样多个主机Bs?

在我看来,你实际上并不想在这里使用角色 - 你只想使用普通的ol剧本。

- hosts: A 
    tasks: 
    [...] 

- hosts: B 
    tasks: 
    [...] 

剧本是按照特定的顺序定义了一系列的行动,而你的“做B本的东西做这个东西之后只A”是。

+1

我倾向于同意,但理论上您可以设计一个用于设置Hadoop集群的角色,并且您需要在主服务器和从服务器上运行不同的任务。这超出了配置管理到基础架构部署,但它在Ansible中得到了支持。 – smiller171

相关问题