最常用的就是在控制主机上编辑对应的配置文件随后将配置文件推送到被控主机上,方便配置文件的统一修改,在这个配置文件中涉及到了变量的调用,这个文件就是一个jinja模板文件。这个调用的变量常是facts变量中被控主机的IP地址和主机名。
对于ansible软件中jinja模板变量替换的范围和同一变量名替换的优先级,取决于ansible变量作用域以及ansible软件变量优先级规则。
变量替换范围:Jinja 模板可以访问所有作用域内的变量,但优先级规则决定了最终使用的值。
优先级顺序:
命令行变量 > Play 作用域变量 > Host 作用域变量 > Role 默认变量。
ansible软件变量作用域
变量替换规则
jinja模板最常调用的就是IP地址和主机名。
支持在文件中调用变量
{{ 变量名称 }}
jinja是一种文件格式的名称。
ansible支持将配置模板文件变成jinjia模板文件。【在配置文件模板中涉及到了变量的调用。】
增强配置文件的灵活性。
建议文件名称以.j2结尾以区分普通文件。
如果推送的文件是jinjia模板的话,必须使用template模板进行文件推送,不能使用copy模块进行推送。
host作用域变量---主机清单文件变量设置
如上图所示,这是ansible控制主机上关于MySQL软件配置文件my.cnf的一个jinja模板文件,这其中涉及到了变量的调用。
如上图所示,这是修改ansible主机清单文件的内容。给不同被控机器的MySQL软件设置不同的二进制文件名称。
如上图所示,这是在jinjia模板文件中对变量值的引用。
随后当我们使用剧本去推送jinjia模板文件的时候,只能使用template模块去推送文件,不能使用copy模块去推送文件,以此触发变量的调用。
主要目的是为了增加配置文件的灵活性,配合facts变量去使用。
如上图所示,我们在主机清单文件中编辑的变量在jinja模板分配给被控主机的时候生效。
host作用域变量---配置facts变量以增加灵活性
如上图所示,此时MySQL软件在被控机器上监听在所有IP地址上。
如上图所示,这行配置可以指定MySQL软件监听的IP地址。当不在MySQL的配置文件中添加监听IP的时候,就是默认监听所有IP地址。
如上图所示,此时推送到被控主机上的配置文件,使得MySQL软件监听的IP地址是被控机器自己的IP地址。
这就是使用ansible的jinja模板去获取facts变量中的ipv4变量的值。
对于ansible软件来说,绿色的显示表示机器已经执行过了,黄色的显示表示机器发生了新的改变。
如上图所示,此时被控机器的MySQL服务监听在自己的IP地址上。
handlers组件
与tasks是同级别的组件,即将来在剧本中需要使用handlers组件的时候,需要跟tasks对齐。
handlers模块中的操作默认不执行,只有当触发某种操作的时候,才能触发handlers模块中的操作。
特征:只有满足特定的条件时,handlers组件中的操作才会执行,
应用:检测配置文件变化,自动重启服务。
如上图所示,当执行推送配置文件操作并且推送的文件内容相比于之前发生变化的时候,会生成对应的notify通知,此时就会触发handlers模块中的操作。
如果源文件和目标文件内容相同,则 tasks 任务的 changed=False,因此不会触发 重启 Apache 的 Handler。