以下是我的剧本的详细信息:
Playbook树
├─ devops
| ├─ roles
| | ├─ mongodb
| | ├─ haproxy
| | ├─ monit
| | | ├─ vars
| | | | └─ main.yml
| | | └─ ...
| | └─ ...
| ├─ hosts
| ├─ play1.yml
| └─ play2.yml
主机
[play1]
...instructions...
[play2]
...instructions...
play1.yml
---
- hosts: play1
user: root
roles:
- haproxy
- monit
play2.yml
---
- hosts: play2
user: root
roles:
- mongodb
- monit
我想根据主机(play1.yml或play2.yml)为monit使用不同的变量文件。我怎么能做到这一点?
非常感谢
答案 0 :(得分:3)
根据http://docs.ansible.com/playbooks_best_practices.html#directory-layout,建议的布局如下:
production # inventory file for production servers
stage # inventory file for stage environment
group_vars/
group1 # here we assign variables to particular groups
group2 # ""
host_vars/
hostname1 # if systems need specific variables, put them here
hostname2 # ""
library/ # if any custom modules, put them here (optional)
filter_plugins/ # if any custom filter plugins, put them here (optional)
site.yml # master playbook
webservers.yml # playbook for webserver tier
dbservers.yml # playbook for dbserver tier
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
defaults/ #
main.yml # <-- default lower priority variables for this role
meta/ #
main.yml # <-- role dependencies
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
注意host_vars/
目录。在那里,您可以包含您的角色稍后可以使用的特定于主机的变量。
答案 1 :(得分:2)
Malo,
你应该使用&#34; host_vars&#34;而不是hosts_vars
/host_vars/play1/mongodb.yml
此外,play1
应与您在主机广告资源中配置的主机名称相匹配。
答案 2 :(得分:0)
Ansible允许您将数据与代码分开。现在,这些数据是您以变量形式定义的。
当涉及到变量时,如果在多个位置定义了相同的变量,则会有优先规则可供使用。建议是
在角色中提供默认变量 - &gt;默认值/目录。这就是它的用途。 Sane默认。
从其他位置覆盖这些默认值,例如host_vars。多数民众赞成你将主机特定的变量。这就是你问题的答案。
但是,如果您在角色中指定相同的var - &gt; vars目录,优先级更高。所以要小心这个。
除此之外,还有更多的优先规则。但是,ansible的创建者建议仅在一个地方定义变量。我个人不会遵循该规则,并将使用理智的默认值和主机/组特定的变量。