如何使用 Ansible Playbook 与特定组一起玩
How to Play with particular group using Ansible Playbook
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'
所有的戏都在演。请帮我解决这个问题。
我需要的是:在执行剧本时我会给出组名,只有那个组应该玩,所以请让我知道有没有其他方法。
原问题是:--限制选项不起作用
通过调用 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]
这是对上一个答案的补充。如果我误解了您的问题,我深表歉意,但是您的示例剧本没有任何描述。
正在清理跳过的主机:
组 'ND' 将(如上所述)不匹配任何主机。如果您想从播放中删除输出,则必须使用回调插件。我使用以下 Gist:
另一种限制方式:
要限制您要求的方式,您需要使用 TAGS。这将允许您通过播放(这似乎是您想要做的)而不是主机列表来限制。
为此,请在播放中添加标签:
...
- hosts: PM
remote_user: root
tags: pmtag
tasks:
{some thing}
然后 运行 根据您的需要排除或包含带有新标签的剧本。
ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag
这将确保只有 PM 运行 中的主机才能播放带有 pmtag 标记的内容。
为剧本文件创建目录:
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
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'
所有的戏都在演。请帮我解决这个问题。
我需要的是:在执行剧本时我会给出组名,只有那个组应该玩,所以请让我知道有没有其他方法。
原问题是:--限制选项不起作用
通过调用 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]
这是对上一个答案的补充。如果我误解了您的问题,我深表歉意,但是您的示例剧本没有任何描述。
正在清理跳过的主机:
组 'ND' 将(如上所述)不匹配任何主机。如果您想从播放中删除输出,则必须使用回调插件。我使用以下 Gist:
另一种限制方式:
要限制您要求的方式,您需要使用 TAGS。这将允许您通过播放(这似乎是您想要做的)而不是主机列表来限制。
为此,请在播放中添加标签:
...
- hosts: PM
remote_user: root
tags: pmtag
tasks:
{some thing}
然后 运行 根据您的需要排除或包含带有新标签的剧本。
ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag
这将确保只有 PM 运行 中的主机才能播放带有 pmtag 标记的内容。
为剧本文件创建目录:
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