playbook剧本(2)--Ansible变量

.Ansible 变量简介

变量是 Ansible 中用来存储值的"容器",让你把 Playbook 中会变化的内容抽取出来,实现"一套剧本,到处可用"。

比如我们之前想要修改httpd的端口值,我们是直接写的具体的值。

我们这里还只有两个地方写了端口,很多时候写了端口的地方会有很多,此时我们如果想要换端口的话,这样写就需要一个一个修改,不太灵活。此时我们就可以定义变量,不仅让playbook变得更灵活,适用场景更多,可维护性更高,还降低了耦合度。

我们先看一下最简单的变量声明的方式:

直接在playbook里面声明变量,此时这个变量在web组里面生效。

使用变量用两个大括号括起来即可。

. 自定义变量

Ansible提供了多种的变量定义方式,自定义变量中最直接的就是在playbook中直接定义变量,在哪一个组中定义变量,这个变量就属于哪一个组。

定义变量的语法就是vars:然后换行下面接上变量列表即可。然后使用变量就是两个{},里面写要引用的变量名即可。

playbook中定义变量:

在playbook中定义变量是不推荐的,不仅会导致playbook的长度增加,我们如果要修改变量值还需要修改playbook,这是不太合适的。

清单中定义变量:

我们还可以在清单中定义变量,直接在某一个主机或者某一个组后面加上变量,这就是为某一个主机配置变量或者某一个组配置变量。

直接在一台主机后面加上变量,就是为这台主机设置变量。对组设置变量就是第二个声明方式,此时web里面的所有主机都有app_user这个变量。最后我们还可以对多个组进行同时设置变量,只不过需要先将两个组对于一个大组中,此时就可以同时为多个组设置变量了。

不过这种声明方式依旧不是首选,因为清单本就是用来告诉ansible哪些主机是受控端,属于哪些组的,直接在清单中定义无疑不是最优选择。

使用group_vars/目录声明变量

最佳声明变量的方式是在group_vars目录下创建变量文件,这里面全部都是声明变量的语句。

这样的声明方式,也是可以实现组和组之间区分变量,以及公共变量的,同时还不会让清单和剧本文件中多出变量的声明。

通过自定义变量实现keepalived高可用:

我们这里只是简单的实现两个主机的高可用,看看是否有vip漂移,所以我们就直接在清单中定义变量了。然后我们要配置高可用的话,我们就需要配置高可用的配置文件,那么我们想要通过变量来使用高可用,我们就需要使用到Ansible中的模板模块了,这个就是将这些配置文件变成了"模板文件",就是将原本的配置文件拷贝一份到当前目录,将后缀加上一个.j2,此时就是模板文件,那么里面就可以使用我们定义的变量了,此时这个配置文件就从静态的写死的文件变成动态文件了。

我们先在清单文件中把变量定义好:

我们要实现的是keepalived高可用,我们这里就设置一个组,表示高可用的两个主机,同时它们的state和pri优先级是不同的,后续我们写在模板文件中,就会因为主机的不同变量值而不同。而后续组变量,两个主机的网卡名都是eth0,路由要一样,vip肯定也是一样的。

然后我们重新创建一个keepalived.yml文件,在这里面写我们的剧本:

具体剧本就是先安装keepalived,然后根据模板文件生成配置文件,如果配置文件被修改,那么触发触发器,重启服务,如果没有就不被触发,最后检查是否启动服务,没有启动的话就启动。

所以我们还需要修改模板文件。

将这些定值改为我们的变量。最后执行ansible即可。

我们的master已经有了vip了,此时停止keepalived,看看会不会有vip漂移。

成功漂移:

此时我们就部署成功了。

. 其他变量

1.Facts 变量

Facts变量是Ansible 自动收集的目标主机系统信息,可以直接调用。

输入ansible 主机名 -m setup可以列出ansible收集到目标主机的所有的系统信息。比如ansible_devices就是显示磁盘设备信息,ansible_hostname显示主机名等等。是可以直接使用的。

2. 注册变量( register

注册变量就是使用register将执行结果保存为变量。比如我们之前写的httpd的剧本,我们可以设置一个本地访问网站的剧本。

此时register变量就会将访问结果保存为register变量。然后我们通过debug模块,可以将result记录的结果打印出来。

3. 魔法变量

魔法变量是Ansible 自身在运行时自动生成的变量,用于获取 Playbook 执行过程中的上下文信息。魔法变量包括hostvars变量以及groups变量,hostvars 是一个字典,包含所有主机的变量信息,可以通过主机名或别名访问特定主机的变量。一般用来获取其他主机的变量。

groups 是一个字典,包含资产文件中定义的所有组及其主机列表。一般用来获取组内主机列表。

相关推荐
lengjingzju1 小时前
编译与调试完全指南—第14章 系统配置与调优
linux
ly76892 小时前
Docker 从入门到实践:镜像、容器、Dockerfile 与 Docker Compose 详解
运维·docker·容器
发光小北2 小时前
IO‑Link 从站转接模块如何应用?
网络
大鹏的NLP博客2 小时前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译
用户3169353811832 小时前
ry.bat和ry.sh部署
运维
我爱cope3 小时前
【计算机网络 | 数据链路层7:VLAN:一台交换机如何划分多个逻辑局域网?】
网络·学习·计算机网络
数据知道3 小时前
网络安全实战:服务指纹识别——Banner、协议探测、版本漏洞关联
网络·安全·web安全·网络安全
mennekes3 小时前
自动化产线临时配电:明装工业插座 vs 面板式工业插座 vs 模块化插座箱取舍
运维·科技·安全·制造
无锡耐特森3 小时前
ModbusTCP转Profinet网关:恒压供水系统互联互通解决方案
网络