首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ansible系列第五篇

ansible系列第五篇(变量)

变量(1)

注意: 在ubuntu系统经过测试,普通用户和root用户都需要设置密码。

执行playbook脚本时,都需要执行该命令:ansible-playbook -S -R root yaml文件名称

变量由字母,数字,下划线组成。变量名要以字母开头。

在playbook中使用变量

使用vars关键字,表示在当前play中进行变量的相关设置。

使用"{}" 可以引用对应的变量。

在定义变量时,以类似"属性"的方式定义变量,例如:

变量文件分离: 将变量分离到某个文件中,可隐藏某些变量值并将不同类的信息放在不同的文件中,与play剧本分开。

在文件中定义变量时,不要使用vars关键字,直接定义变量即可。例如:

在playbook剧本中引入包含变量的文件时,使用"vars_files" 关键字,被引入的文件要以"-" 开头,以YAML中块序列的语法引入。例如:

执行nginx的playbook剧本:

也可以引入多个变量文件,每个被引入的文件都要以"-"开头。

"vars"关键字和"vars_files"关键字可同时使用。

变量(2)

当运行一个playbook时,默认都会运行一个名为[Gathering Facts]的任务,ansible通过这个默认任务收集远程主机的相关信息。收集到的远程主机信息会保存在对应变量中。

setup模块

查看这个默认任务收集的信息可以使用setup模块。

返回信息比较多,但是都是json格式的字符串。就不一一介绍了,相信各位工程师都可以看懂。

通过setup模块的filter参数可指定需要过滤的关键字。

通过关键字对信息进行过滤,例如查看系统信息

返回信息为:

使用通配符,进行模糊过滤。

也可以在远程主机中写入自定义信息,自定义信息需要写在/etc/ansible/facts.d目录下的以".fact"为后缀的文件中,文件内容格式必须是ini或者json格式。

ansible默认会去远程主机的/etc/ansible/facts.d目录下查找主机中的自定义信息。

在远程主机创建目录

在被控机本地自定义的信息被称为"local facts".

可通过"ansible_local"关键字过滤远程主机的"local facts"信息。

在管控机执行:

输出信息为:

debug模块

可以使用msg参数输出自定义信息,也可以使用var参数直接输出变量中的信息。

例如:

使用debug的msg参数时也可以引用变量的值。{}。

输出信息如下:

变量(3)

注册变量

注册变量:将模块的返回值写入到变量中的方法。

使用"register"关键字指定对应的变量名即可。

输出的信息如下:

如果要获取到返回值中的某一项特定值,只需要指定键值对中的key即可。例如: {}

提示用户输入信息并写入变量

将用户输入的信息存入指定的变量中,当需要输入信息时,引用对应的变量即可。

输出信息如下:

命令执行后默认情况下不显示用户输入的信息。要显示用户输入时的信息,可以使用private关键字。将属性设置为no即可。

为提示信息设置默认值

输出信息如下:

用提示信息创建用户和密码

使用user模块创建用户并设置密码。

使用"encrypt"关键字,对用户输入的字符串进行哈希。

表示使用sha512算法对用户输入的信息进行哈希。

注意: 当使用"encrypt"关键字对字符串进行哈希时,ansible需要依赖passlib库完成哈希操作。

安装:

也可以用其他算法对字符串进行哈希。参考ansible官网。

例如:

执行命令:

输出信息如下:

使用"confirm"关键字实现确认密码的功能。

在useradd.yaml文件中,encrypt关键字的下方添加confirm关键字,并设置属性为yes即可。

在远程主机18.18.23.102上,用user用户并输入密码即可登录。

变量(4)

在清单中配置变量

主机变量

配置被控机时也可以配置对应变量。主机变量的生效范围只限于对应主机。

主机组变量

将多个主机分为一组。为单个组配置组变量。组变量的使用范围为组内所有主机。也可以用YAML格式配置。使用vars关键字指定组变量,vars对应组的下一级。

执行结果如下:

通过set_fact定义变量

set-fact是一个模块,通过set_fact模块在tasks中定义变量。也可以通过set_fact将一个变量的值赋予另一个变量,例如:

说明; 先定义变量nodename,再使用register将shell模块的返回值注册到变量shellreturn中,接下来,使用set_fact模块将nodename变量的值赋予给变量node1,将shellreturn变量的stdout信息赋值给node2变量。最后使用debug模块输出node1和node2的值。

变量(5)

清单配置:

内置变量ansible_version

查看ansible版本号

内置变量hostvars

hostvars在操作当前主机时获取到其他主机中的信息。

命令行执行:

执行playbook脚本时,都需要执行该命令:

输出test2的ens34网卡的IP信息:

使用gather_facts关键字可以控制当前play是否收集对应主机的facts信息。

使用hostvars内置变量获取其他主机中的注册变量。例如:

跨play获取其他主机中的变量信息

内置变量inventory_hostname

通过inventory_hostname变量可以获取到被操作的当前主机的主机名称。

执行命令:

这里的主机名称是对应主机在清单中配置的名称。

内置变量inventory_hostname_short

获取当前play操作的主机在清单中的名称。

返回结果为主机的简短名称。

内置变量play_hosts

获取到当前play所操作的所有主机的主机名列表。

执行hosts.yaml。

总结: inventory_hostname只返回当前被操作的主机的主机名。play_hosts则返回当前play中所有被操作主机的主机名列表。

内置变量groups

通过groups内置变量获取到清单中"所有分组"的分组信息。

执行命令:

获取指定组的分组信息,例如:获取testA信息

内置变量group_names

获取当前主机所在分组的组名。

内置变量inventory_dir

获取到ansible主机中清单文件的存放路径。

一般是默认的清单文件路径:/etc/ansible/hosts

执行命令:

坚持自己所选择的,方能成就自己想成就的。或许学英语对有些人很简单,但是对于运维人员来说,也是一项不小的挑战。往往最新最火的技术就在官方英文文档中,虽然现在的翻译软件很多,但翻译出来的句子大部分有点词不达意,导致自己误解了官网文档的正确意思。学好英语和思考能力是必不可缺的。小编也会尽量每周更新一篇文章和一小段每日英语,希望能够帮助更多的读者。

每日英语(Daily English Tips)(1)

1-100的英文单词如下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181230G0B7IR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券