2017-09-23 230 views
0

我用角色來部署我的機器,角色有瓦爾,但有時我有多個角色,我希望把根文件夾中的全局變量文件,所以ansible使用vars/global.yml覆蓋role/vars/main.ymlAnsible角色全局變量

#vars/global.yml 
somevariable: somevalue 

但如果在根文件夾全局變量,只是簡單地覆蓋基於角色的變量和實施的var /全球代替。

├── Playbook.yml 
├── ansible.cfg 
├── roles 
│ ├── Ansible-Role-UserProfile 
│ │ ├── LICENSE 
│ │ ├── README.md 
│ │ ├── meta 
│ │ │ └── main.yml 
│ │ ├── tasks 
│ │ │ └── main.yml 
│ │ ├── templates 
│ │ │ ├── rm.j2 
│ │ │ └── vimrc.j2 
│ │ └── vars 
│ │  └── main.yml 
└── vars 
    └── global.yml 

是否有任何東西的角色和變量本質上重用的套件?

回答

1

看一看的Variable Precedence: Where Should I Put A Variable?章。

「的角色瓦爾」名單上的上市後的所有角色將擁有優先權,所以使用任何這些。

  • 塊瓦爾(僅適用於塊任務)
  • 任務瓦爾(僅適用於任務)
  • 角色(和include_role)PARAMS
  • 包括PARAMS
  • include_vars
  • set_facts /註冊瓦爾
  • 額外的增值經銷商(總是贏優先)

否則,使用默認的作用,它具有最低的優先級,定義變量值。從問題中的示例中,角色默認值被play vars覆蓋。

+0

請詳細說明您的答案。 –

0

將您的全局變量放在group_vars/all中。看看它如何適合你的目錄結構Directory layout

角色瓦爾有超過group_vars優先級,這樣你就可以覆蓋一個角色的全局值。

+0

OP寫道:「我想把一個全局變量文件放在根文件夾中,所以使用vars/global.yml和**覆蓋** role/vars/main.yml」 - 你完全回答相反的請求。我錯過了什麼? – techraf

+0

如果這就是他的意思,我誤解了這個問題。 –