本来打算自己写一波 ansible 系列的,后来发现一老哥写的太好了,「点击此处直达」,我这里也就边看边对该系列文章做下笔记,方便以后查阅,ansible 入门的话墙裂建议阅读前方链接博文~~~
主机变量
在清单中配置远程主机时,可以同时为主机配置对应的变量,当操作这个主机时,即可直接使用对应的变量。
比如,我在 /etc/ansible/hosts
中定义 B 主机时,可以为 B 主机配置一个名为 testhostvar
的变量,变量值为 test70_host_var
,示例如下:
$ B ansible_host=10.0.1.201 testhostvar=B_host_var
如上例所示,只要在定义主机时将变量名和变量值写在主机配置的后面即可,可以为一个主机定义多个主机变量,用空格隔开即可。
测试一下:
$ ansible B -m debug -a 'msg={{testhostvar}}'
B | SUCCESS => {
"msg": "B_host_var"
}
如上图所示,操作 B 主机时,testhostvar
已经被引用到了,当然, testhostvar
是 B 主机变量,其他主机并不能引用到这个变量,主机变量的生效范围只限于对应的主机。
前文中总结过,配置清单时可以使用 INI 格式或者 YAML 格式的语法,刚才的示例为 INI 风格的语法配置,YAML 格式的配置中,可以使用如下方法配置变量:
all:
hosts:
B:
ansible_host: 10.0.1.201
ansible_port: 22
testhostvar: B_host_var
直接在 B 的下一级写明变量与变量值即可。
也可以使用如下方法配置有层级的变量,如下:
all:
hosts:
B:
ansible_host: 10.0.1.201
ansible_port: 22
testhostvar: B_host_var
testnewval:
var1: B_var1
var2: B_var2
可以通过如下方式引用变量值:
$ ansible B -m debug -a 'msg={{testnewval.var1}}'
B | SUCCESS => {
"msg": "B_var1"
}
$ ansible B -m debug -a 'msg={{testnewval["var2"]}}'
B | SUCCESS => {
"msg": "B_var2"
}
主机组变量
我们能将多个主机分为一组,这样方便我们成批的操作远程主机。
比如,我在清单中将 B 与 C 分为一组,组名为 testgroup,INI 格式的配置如下:
[testgroup]
B ansible_host=10.0.1.201
C ansible_host=10.0.1.202
可通过如下方式为 testgroup
组配置组变量:
[testgroup]
B ansible_host=10.0.1.201
C ansible_host=10.0.1.202
[testgroup.vars]
test_group_var1='group var test1'
test_group_var2='group var test2'
[testgroup:vars]
表示为 testgroup
组配置变量,组变量的使用范围为组中的所有主机,所以无论 B 还是 C ,都可以使用到上述两个变量,效果如下:
$ ansible B -m debug -a 'msg={{test_group_var1}}'
B | SUCCESS => {
"msg": "group var test1"
}
$ ansible C -m debug -a 'msg={{test_group_var2}}'
C | SUCCESS => {
"msg": "group var test2"
}
上例为 INI 格式中配置组变量的方法,YAML 格式中配置组变量的示例如下:
testgroup:
vars:
test_group_var1: 'group var test1'
test_group_var2: 'group var test2'
hosts:
B:
ansible_host: 10.0.1.201
C:
ansible_host: 10.0.1.202
如上,使用 vars
关键字可以指定组变量,vars
关键字位于对应组的下一级,调用效果与上述 INI 格式配置相同。
评论区