[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

[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语句来执行各种其他条件分支。
想了解更多请阅读官方文档

如果您觉得这篇文章有帮助,请点赞!
1
加载中...
1 票,平均:1.00 / 11
18,733
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

姬菇

证书:
- TOEIC 835
- LPIC304
- AWS 解决方案架构师助理
- AWS 解决方案架构师专业
- GCP 专业云架构师
- IPA SC(未注册)

戈薇,戈薇,
我身后的老头,就这样了。

这是我叔叔。 (2018)