如何設置要為特定庫存組執行的任務?
以下任務:
- name: Download Jfrog Artifcats ansible.windows.win_shell: | $ENV:JFROG_CLI_OFFER_CONFIG="false" jfrog rt download ... when: ???
應該只對位於組
center
中的機器執行appservers
--- all: children: root: children: center: children: appservers: hosts: vm1.domain.com: qservers: hosts: vm2.domain.com: dbservers: hosts: vm3.domain.com: mobilefarms: hosts: children: gateways: hosts: south: children: brooklyn: hosts: vm4.domain.com: children: clients: hosts: vm5.domain.com: vm6.domain.com: north: children: new_york: hosts: vm8.domain.com: children: clients: hosts: vm9.domain.com:
when
為了實現這一點,我應該輸入什麼作為條件?另外,這個配置選項背後的原理是什麼?
為了在任務、播放或塊的條件中使用組成員資格,您將使用以下格式:
when: inventory_hostname in groups["<group name>"]
具體到您最初的問題:
when: inventory_hostname in groups["appservers"]
要訪問 下的所有機器
north
,您只需將其更改為:when: inventory_hostname in groups["north"]
關於您的後續說明(在特定“位置”中指定一個組),由於組名在 ansible 中必須是唯一的,因此無需區分您指的是哪個 組,因為只能在一個位置。
appservers``appservers
如果您嘗試創建兩個
appservers
組,ansible 引擎實際上只會解析第一個組;任何後續的同名組都將被忽略。因此,如果您計劃(將來)有一個appservers
組 undernorth
和一個appservers
組 undersouth
,您會發現只有第一個組中的成員會被包括在內。在 ansible 中,我們如何實現這一點(我假設您將來可能想要什麼),ansible 的繼續方式是將主機添加到多個組中,並適當調整您的限製或條件:
all: children: north: hosts: a.domain.com: b.domain.com: south: hosts: y.domain.com: z.domain.com: appservers: hosts: a.domain.com: y.domain.com: dbservers: hosts: b.domain.com: z.domain.com:
在此範例中,如果您想要所有應用伺服器,您只需定位
appservers
. 如果您只想appservers
在該north
地區,那麼您可以將游戲限制設置為north:&appservers
,或者使用條件when: - inventory_hostname in groups["appservers"] - inventory_hostname in groups["north"]
無論如何,我認為您可能需要重新了解 ansible 中的庫存結構,因為我會推薦使用者指南;各種培訓網站上也有一些很棒的資源,可以更詳細地介紹。
有關使用多個組(組合、聯合和排除等)的更複雜定位的更多資訊,我建議您查看此其他使用者指南。
就個人而言,最初我認為設置乏味且有限,但隨著我越來越熟悉使用它,我實際上發現它比替代方案更具動態性。