Hri*_*nov 18 variables ansible
我有一个有多个主机部分的剧本.我想在这个playbook.yml文件中定义一个仅适用于文件的变量,例如:
vars:
my_global_var: 'hello'
- hosts: db
tasks:
-shell: echo {{my_global_var}}
- hosts: web
tasks:
-shell: echo {{my_global_var}}
Run Code Online (Sandbox Code Playgroud)
上面的例子不起作用.我必须为每个主机部分复制变量(坏)或在更高级别定义它,例如在我的group_vars/all(不是我想要的,但工作).我也知道可以包含变量文件,但这会影响可读性.是否有任何建议将其置于正确的范围内(例如,剧本文件本身)?
小智 12
set_fact如果group_vars不适合您的需要,该模块将完成此操作.
http://docs.ansible.com/ansible/set_fact_module.html
该模块允许设置新变量.变量按主机设置>基础设置,就像设置模块发现的事实一样.在Ansible运行期间,这些变量将在播放之间存活,但即使您使用事实缓存,也不会在>执行中保存.
- hosts: db:web
tasks:
- set_fact: my_global_var='hello'
- hosts: db
tasks:
-shell: echo {{my_global_var}}
- hosts: web
tasks:
-shell: echo {{my_global_var}}
Run Code Online (Sandbox Code Playgroud)
我更喜欢将全局变量保留在清单文件中,在其中保留主机的组和名称。
例如:
my-hosts:
[all:vars]
my_global_var="hello"
[db]
db1
db2
[web]
web1
web2
Run Code Online (Sandbox Code Playgroud)
使用以下命令运行您的剧本:
ansible-playbook -i my-hosts playbook.yml
Run Code Online (Sandbox Code Playgroud)
现在将为所有主机定义变量。
如果使用ec2.py或其他动态清单,则可以将全局变量放入文件中group_vars/all以达到相同的结果。