Configuration

如何設置要為特定庫存組執行的任務?

  • August 16, 2021

以下任務:

- 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組 under south,您會發現只有第一個組中的成員會被包括在內。

在 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 中的庫存結構,因為我會推薦使用者指南;各種培訓網站上也有一些很棒的資源,可以更詳細地介紹。

有關使用多個組(組合、聯合和排除等)的更複雜定位的更多資訊,我建議您查看此其他使用者指南


就個人而言,最初我認為設置乏味且有限,但隨著我越來越熟悉使用它,我實際上發現它比替代方案更具動態性。

引用自:https://serverfault.com/questions/1074397