[英]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'
所有戲劇都在播放。 請幫我解決這個問題。
我需要的是:在執行劇本時,我會給出組名,只有那個組應該玩,所以請讓我知道還有其他方法。
最初的問題是:-- 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 將執行你的劇本中適用於 xyz.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]
為劇本文件創建目錄:
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
這是對上一個答案的補充。 如果我誤解了您的問題,我深表歉意,但您的示例劇本沒有描述。
清理跳過的主機:
組“ND”將(如上所述)不匹配任何主機。 如果您想從播放中刪除輸出,則必須使用回調插件。 我使用以下要點:
另一種限制方式:
要限制您要求的方式,您需要使用TAGS 。 這將允許您通過播放(這是您似乎想要做的)而不是主機列表來限制。
為此,請在 play 中添加一個標簽:
...
- hosts: PM
remote_user: root
tags: pmtag
tasks:
{some thing}
然后根據您的需要運行排除或包含新標簽的劇本。
ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag
這將確保只有 PM 運行的主機只播放帶有 pmtag 標記的播放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.