2016-06-14 80 views
1

比方說,我有兩組主機在我的結構中有類似的需求,但它們並不共享所有安裝的相同軟件包。像這樣:如何組織Ansible角色?

發生器(主機組)的需要:

  • 轉速甲
  • 轉速乙
  • 轉速Ç

執行人(另一個主機組)的需要:

  • rpm A
  • rpm B

我該如何組織我的Ansible角色?這樣做是有方法之一:

generators-role 
    - main.yml 
     - package install 
      - rpm A 
      - rpm B 
      - rpm C 

executors-role 
    - main.yml 
     - package install 
      - rpm A 
      - rpm B 

但問題是,如果我需要改變對帕茨卡安裝的東西,我必須改變它在兩個地方。

packages1-role 
    - main.yml 
     - package install 
      - rpm A 
      - rpm B 

packages2-role 
    - main.yml 
     - package install 
      - rpm C 

然後:我喜歡的東西去

generators-playbook 
    - roles: 
     - packages1-role 
     - packages2-role 

executors-playbook 
    - roles: 
     - packages2-role 

但在這種情況下,我真的需要有一個強有力的理由組RPM超越「他們在同一組主機屬於」。而且,我仍然會遇到與第一個例子相同的問題。

我也考慮過使用基於變量傳遞給角色的標籤或條件,但這看起來有點不可靠,或者至少這是我從Ansible文檔中理解的。

那麼,什麼是最好的方法來做到這一點的任何提示?

謝謝!

+1

請參閱最佳實踐(http://docs.ansible.com/ansible/playbooks_best_practices.html) – BMW

回答

1

我相信有2種其他方法可以做到這一點:

1)使用通用packages的作用,並通過轉速爲VAR

generators-playbook 
    - roles: 
     - { role: packages, packages: ["rpmA","rpmB"] } 
executor-playbook 
    - roles: 
     - { role: packages, packages: ["rpmC"] } 

2)使用1層的作用,安裝到角色然後在每個主機組中包括正確的角色

generators-playbook 
    - roles: 
     - rpmA 
     - rpmB 
executors-playbook 
    - roles: 
     - rpmC 

希望這有助於您!

+0

方式1或多或少是我寫「基於傳遞給角色的變量的條件」的意思。它可能工作的很好,但我認爲這並不改變這樣的事實,即如果我需要從我的劇本中添加/刪除軟件包,我需要更改安裝在多個位置的軟件包列表。 –

+1

我傾向於不把角色看作一個單一的軟件包安裝,對我而言,角色是一種更大的實體(例如,一個nginx角色將安裝ngnix軟件包並根據組/主機變量進行配置)。我可能會嘗試將「包」角色擴展爲更大的東西,以便在安裝的包中有效地執行某些操作。否則,包的作用是有道理的 – shaps