7

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}

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

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

但是剧本仍然在与所有主机一起玩,这意味着

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

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

我需要的是:在执行剧本时,我会给出组名,只有那个组应该玩,所以请让我知道还有其他方法。

4

3 回答 3

4

最初的问题是:-- limit 选项不起作用

通过调用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]
于 2016-07-12T09:47:43.400 回答
3

为剧本文件创建目录:

mkdir 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
于 2016-08-11T07:21:47.010 回答
0

这是对上一个答案的补充。如果我误解了您的问题,我深表歉意,但您的示例剧本没有描述。

清理跳过的主机:
组“ND”将(如上所述)不匹配任何主机。如果您想从播放中删除输出,则必须使用回调插件。我使用以下要点

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

为此,请在 play 中添加一个标签:

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

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

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

这将确保只有 PM 运行的主机只播放带有 pmtag 标记的播放。

于 2016-07-18T19:15:48.650 回答