如何使用Ansible Playbook与特定群组一起玩

时间:2016-07-12 09:18:49

标签: ansible ansible-2.x ansible-inventory

Ansible版本:2.1.0

我的ansible主机文件是:

[PM]
xyz.example.com ansible_connection=ssh

[ND]
pqr.example.com ansible_connection=ssh

[CM]
xyz.example.com ansible_connection=ssh
pqr.example.com ansible_connection=ssh

剧本是:

- hosts: PM:ND:CM
   remote_user: root
   tasks:
    {some thing}

- hosts: PM
   remote_user: root
   tasks:
    {some thing}

 - hosts: ND
   remote_user: root
   tasks:
    {some thing}

- hosts: CM
   remote_user: root
   tasks:
    {some thing}

我正在使用以下命令运行playbook:

ansible-playbook --limit 'PM' akana-installation.yml

但是剧本仍在播放所有主持人,这意味着

Play 'PM:ND:CM'
Play 'PM'
Play 'ND'
Play 'CM'

所有戏剧都在播放。请帮我解决这个问题。

我需要的是:执行剧本时,我会给团体名称,只有团体才能播放,所以请告诉我有没有别的办法。

3 个答案:

答案 0 :(得分:4)

原始问题是: - 限制选项不起作用

通过调用ansible-playbook --limit 'PM' akana-installation.yml,您告诉ansible将服务器限制为PM组中的主机 在您的情况下,它将是xyz.example.com 请记住,如果您在多个组中拥有此服务器,那么它仍将是该组的成员 您的有限库存将变为:

[PM]
xyz.example.com ansible_connection=ssh

[ND]

[CM]
xyz.example.com ansible_connection=ssh

ansible-playbook将执行适用于asma.example.com的剧本中的每个剧本 在你的情况下:

Play 'PM:ND:CM'
[xyz.example.com]
Play 'PM'
[xyz.example.com]
Play 'ND'
skipping: no hosts matched
Play 'CM'
[xyz.example.com]

答案 1 :(得分:2)

为playbook文件创建目录:

mkdir playbooks

将您的Playbooks拆分为单独的文件,例如。剧本/ pm.yml:

- hosts: PM
  remote_user: root
  tasks:
  {some thing}

创建文件all.yml

- hosts: PM:ND:CM
  remote_user: root
  tasks:
  {some thing}

- include: playbooks/pm.yml
- include: playbooks/nd.yml
- include: playbooks/cm.yml    

现在您有单独的逻辑,您可以使用命令全部播放:

ansible-playbook all.yml

或运行单独的命令:

ansible-playbook playbooks/pm.yml

ansible-playbook playbooks/nd.yml

答案 2 :(得分:0)

这是添加到上一个答案。如果我误解了你的问题,我很抱歉,但你的示例剧本没有任何描述。

清理跳过的主机:
Group' ND'将(如上所述)与任何主机不匹配。如果你想从播放中删除输出,你将不得不使用一个Callback插件。我使用以下Gist

另一种限制方式:
要限制您的要求,您需要使用TAGS。这将允许您通过播放限制(这似乎是您想要做的)而不是主机列表。

为此,请在游戏中添加标签:

...
- hosts: PM
  remote_user: root
  tags: pmtag
  tasks:
    {some thing}

然后根据您的需要排除或包含新标签来运行剧本。

ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag

这将确保只有PM中的主机才会播放标记有pmtag的内容。