2014-09-04 104 views
36

在Ansible 1.7中,我可以使用命令行中的--tags來僅運行該劇本任務的一個子集。Ansible:在劇本中,通過標記過濾角色而不通過命令行

但是我想烘焙到我的劇本中,只運行匹配標籤的任務來運行一組角色。也就是說,我不想通過命令行來傳遞它,因爲它每次都是一樣的。

起初我以爲是這個命令,但是這卻做了相反的事情:用這些標籤標記任務,而不是基於這些標籤過濾出來。

roles: 
    - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] } 

我可以想象實現這個使用條件,但標籤將是一個更加優雅的方式來實現這一點。

+0

順便說一句,我想這樣做的原因是跨多個角色運行所有軟件包安裝任務,所以我可以創建一個緩存所有更新/升級/安裝的AMI。然後我可以使用它作爲我的基礎AMI。讓腳本正常工作,現在只需通過命令行指定 – 2014-09-04 23:36:27

回答

39

你只需要與當前版本Ansible以下選項:

  1. 指定命令行
  2. 使用一個變量,而不是標籤上的標籤來有條件地運行任務
  3. 分割你的網絡服務器角色轉換爲多個角色並對常見任務使用角色依賴關係

此功能請求has come up on the mailing list a few times我還沒有看到開發團隊的任何指示t它將被添加爲新功能。

+14

驚訝的是,更多的人不爲此而吵鬧!感謝你的回答 – 2014-09-04 23:34:23

0

使用條件可以滿足您的需求。

你可以在我的回答中看到更多的信息,他人的同類問題here