[Ansible]如何分支playbook处理[配置管理]
您好!我是系统解决方案部的 Shimeji。
距离我调到SRE团队已经过去两个月了。
还有很多东西我不明白,但我很感激每天都能学到新东西的环境,
学习新东西很有趣!
今天我们来聊聊配置管理工具Ansible。
有时您想要对剧本的处理进行分支。
例如,假设您要执行以下 playbook 流程。
内容是对原配置文件重命名后安装新配置文件的常用方法。
- name: 重命名配置文件 shell: mv /etc/hoge/main.cf /etc/hoge/main.cf_backup - name: 部署配置文件 template: src: "{{ inventory_dir }}/roles/hoge/template/conf. j2”目标:“/etc/hoge/main.cf”所有者:根组:根模式:644
上述过程将“重命名原始配置文件”并完成“新配置文件的安装”,没有任何特殊事件。
但是,如果名为“main.cf_backup”的文件已经存在,我想跳过该过程。
在这种情况下,请使用注册变量和when语句。
注册变量允许您将已执行任务的执行结果存储在变量中。
通过根据结果对过程进行分支,您可以跳过该过程。
使用when语句进行分支处理。
如果您想跳过该文件(如果该文件已存在)
考虑到上述情况,剧本处理如下。
- name: 重命名配置文件 确认 stat: 路径: /etc/hoge/main.cf_backup 注册: 结果 - name: 重命名配置文件 shell: mv /etc/hoge/main.cf /etc/hoge/main.cf_backup 当: 否result.stat.exists - 名称:部署配置文件模板:src:“{{ inventory_dir }}/roles/hoge/template/conf.j2” dest:“/etc/hoge/main.cf”所有者:root 组:root模式:644
查看名为“重命名配置文件确认”的过程。
stat:路径:/etc/hoge/main.cf_backup 寄存器:结果
stat 模块用于检查 main.cf_backup 是否存在。
如果存在,则将 True 存储在名为 result 的变量中,否则存储 False。
并且在Rename Config File过程中写入了一个when语句。
何时:不存在 result.stat.exists
仅当结果不为 True 时才执行重命名配置文件过程。
让我们确认当条件实际匹配时该过程不会被执行。
让我们在main.cf_backup所在的服务器上执行该进程。
・192.168.33.72 [CentOS72]
ansible-playbook -i 托管操作.yml --ask-pass
PLAY [将通用配置应用于所有节点] ************************************* 任务 [收集事实] *** ********************************************************** **** ok: [192.168.33.72] TASK [hoge : 重命名配置文件确认] ****************************** ****** ************ 好的:[192.168.33.72] 任务 [hoge:重命名配置文件] ************** ** ************************* 跳过:[192.168.33.72] TASK [hoge:部署配置文件] ******** ** *********************************************** 好的 : [ 192.168.33.72] 重温************************************************ **** ************************** 192.168.33.72 : 正常=3 已更改=0 无法访问=0 失败=0
是的,正在跳过处理。
其他分厂加工
When 语句可以执行各种其他条件分支。
以下是仅在操作系统为 CentOS7 时安装 Apache 的 playbook。
- 名称:CentOS7 安装 Apache yum:名称:httpd 状态:出现时间: - ansible_facts['distribution'] == "CentOS" - ansible_facts['distribution_major_version'] == "7"
条件可以写成列表格式。
在这种情况下,只有满足所有条件时才会执行该过程。
(上例中操作系统为CentOS,版本为7)
让我们在以下两台服务器上实际执行该过程。
・192.168.33.67 [CentOS67]
・192.168.33.72 [CentOS72]
ansible-playbook -i 托管操作.yml --ask-pass
PLAY [将通用配置应用于所有节点] ************************************* 任务 [收集事实] *** ********************************************************** **** 好的:[192.168.33.65] 好的:[192.168.33.72] 任务 [测试:CentOS7-install-apache] ********************** ********************* 跳过:[192.168.33.65] 更改:[192.168.33.72] 播放回顾 ************* ********************************************************** ****** 192.168.33.65 :确定=1 更改=0 无法访问=0 失败=0 192.168.33.72 :确定=2 更改=1 无法访问=0 失败=0
该进程仅在 192.168.33.72 上执行。
成功!
在最后
这是一个简单的介绍,但
您可以使用when语句来执行各种其他条件分支。
想了解更多请阅读官方文档
!