侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 743 篇文章
  • 累计创建 64 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible笔记(10)之在主机清单中配置变量

zze
zze
2020-03-29 / 0 评论 / 0 点赞 / 711 阅读 / 3008 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

本来打算自己写一波 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 格式配置相同。

0

评论区