我们可以将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/
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021