首页 » 翻译 » Ansible 入门 » 正文

ansible 入门教程09 变量文件分离

我们可以将play中的变量分离出来单独存放在别的文件中

– hosts: all
remote_user: root
vars:
favcolor: blue
vars_files:
– /vars/external_vars.yml

tasks:

– name: this is just a placeholder
command: /bin/echo foo
然后,我们在/vars/external_vars.yml中:

# in the above example, this would be vars/external_vars.yml
somevar: somevalue
password: magic

我们也可以直接在命令行中定义变量(在执行某个playbook的时候)例如:

ansible-playbook release.yml –extra-vars “version=1.23.45 other_variable=foo”

这个特别是在单独设置目标主机的时候:

– hosts: ‘{{ hosts }}’
remote_user: ‘{{ user }}’

tasks:
– …

ansible-playbook release.yml –extra-vars “hosts=vipers user=starbuck”
在版本1.2中,可以通过json的格式传递参数:
–extra-vars ‘{“pacman”:”mrs”,”ghosts”:[“inky”,”pinky”,”clyde”,”sue”]}’

在版本1.3中,你甚至可以直接加载一个json文件

–extra-vars “@some_file.json”
既然我们可以在各种地方定义变量,命令行,playbook中,其他文件中,当然还有什么gropu_var,那么他们的优先级是什么?

优先级最高的是 命令行

role中的default变量优先级最低

好吧,记不住,

看例子吧:

1:group vars 具有超级权利

子组覆盖父组,host覆盖group

2:使用role时,defaults下的变量的值我们称谓默认值,如果没有在别的地方覆盖它,那么它就是默认值

当然,如果你不想被覆盖,那么你就不能放在


# file: roles/x/defaults/main.yml
# if not overridden in inventory or as a parameter, this is the value that will be used
http_port: 80

你需要放在另外的一个空间(注意,命令行仍然可以修改)


# file: roles/x/vars/main.yml
# this will absolutely be used in this role
http_port: 80

如果想是在调用这个role时候覆盖掉原来的值,

roles:
– { name: apache, http_port: 8080 }

roles:
– { role: app_user, name: Ian }
– { role: app_user, name: Terry }
– { role: app_user, name: Graham }
– { role: app_user, name: John }

欢迎转载,转载请注明出处:http://www.503error.com/

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)