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 是一个字典,包含资产文件中定义的所有组及其主机列表。一般用来获取组内主机列表。

相关推荐
北京中科新远科技2 小时前
AI集群交换网络容量怎么算:端口、收敛比与Leaf-Spine验收
服务器·网络·人工智能
wdfk_prog2 小时前
Wi-Fi Direct 教程 04:Interface 协议子系统初始化——WPA/EAPOL、WPS、DPP/NAN、GAS 与 P2P callback
android·运维·服务器·ubuntu·p2p·wps·wifi-direct
云飞云共享云桌面2 小时前
有个10人的SolidWorks设计团队,服务器什么配置合适,如何落地
运维·服务器·3d·自动化·电脑·制造
逆向编程2 小时前
VMware仅主机(Host‑Only,VMnet1)物理机‑虚拟机文件共享完整实操
运维
ai小陈2 小时前
GPU算力平台远程训练监控:TensorBoard与SSH隧道配置实战
运维·人工智能·深度学习·ai·ssh·gpu算力
cuijiecheng20182 小时前
RK3588 DEP 接入 Dante Domain Manager(DDM)完整测试记录
linux
白帽攻防录2 小时前
SRC 挖洞:GitLab GraphQL 指令绕过深度复盘,CVE-2026-19478 未授权删项目怎么打穿代码托管平台
网络·网络安全·gitlab·graphql
adminwolf2 小时前
抖音个人号私信自动化回复浏览器扩展,非破解协议,合规的RPA手段
运维·自动化·rpa
爱吃香菜的初学者2 小时前
十二.Linux——管道
linux·运维·服务器
neo_will_mvp2 小时前
上海莫双一流211大学:实操安装HP1188pnw网络打印机
网络