技术博客

Ansible 维护周期变化下,Playbook 升级前如何做兼容性检查

结合 ansible-core 2.19 到 2.21 的维护信息,整理自动化运维中 Python 版本、模板行为、连接插件和 playbook 校验的升级清单。

AnsiblePlaybook自动化运维Python

Ansible 是 Linux 自动化运维中最常用的工具之一。很多团队一开始只是用它批量执行命令,后来会逐步把系统初始化、应用部署、巡检、配置变更都放进 playbook。

当 Ansible 版本升级时,风险也会随之放大。尤其是 ansible-core 维护周期和 Python 支持范围变化后,升级前做兼容性检查非常必要。

先区分 Ansible 和 ansible-core

ansible-core 是 Ansible 的核心执行引擎,包含基础 CLI、playbook 执行器、插件架构和 ansible.builtin

完整的 ansible 包通常还会包含大量 community collections。

检查版本:

ansible --version
ansible-playbook --version

重点看:

为什么维护周期重要

官方维护矩阵显示,不同 ansible-core 版本支持的控制节点 Python、目标节点 Python 和安全维护时间不同。

例如 ansible-core 2.21 面向更新的 Python 版本,2.19、2.20 也有各自的维护窗口。对运维来说,这意味着:

检查控制节点:

python3 --version
ansible --version

检查目标节点:

ansible all -m setup -a 'filter=ansible_python_version'

模板行为变化要重点测试

ansible-core 2.19 文档特别提醒:模板处理有显著变化,会暴露过去未被发现的问题。这类变化对 playbook 影响很大,因为变量、Jinja2 模板、条件判断几乎无处不在。

容易出问题的地方:

升级前建议跑:

ansible-playbook site.yml --syntax-check
ansible-playbook site.yml --check --diff

不要只测一个 playbook,要覆盖核心 role。

inventory 和变量也要纳入测试

很多故障不在 playbook 文件,而在 inventory 和变量层。

检查 inventory:

ansible-inventory -i inventory.ini --list

检查变量渲染:

ansible all -m debug -a 'var=ansible_host'

如果使用动态 inventory,要确认插件版本和认证方式是否兼容。

SSH 连接插件要关注

Ansible 默认大量依赖 SSH。OpenSSH 10 移除 DSA 之后,老设备可能连接失败。ansible-core 的路线图中也提到连接插件和认证方式相关改进。

升级 Ansible 前,先单独验证 SSH:

ansible all -m ping -vvv

如果失败,先判断是 SSH 算法、Python 解释器、sudo 权限,还是网络问题。

collections 版本要锁定

生产环境不建议每次运行都临时安装最新版 collection。建议使用 requirements.yml 锁定:

collections:
  - name: community.general
    version: ">=9.0.0,<10.0.0"

安装:

ansible-galaxy collection install -r requirements.yml

然后把 requirements.yml 提交到仓库。

建立 playbook 升级测试流程

一个比较稳的流程:

  1. 准备测试控制机。
  2. 安装目标 ansible-core 版本。
  3. 安装锁定的 collections。
  4. --syntax-check
  5. --check --diff
  6. 对测试节点执行真实变更。
  7. 检查幂等性,再跑第二次。
  8. 才考虑升级生产控制机。

幂等性很重要。第二次执行不应该反复显示 changed。

总结

Ansible 升级不是简单的 pip install。它会同时影响 Python、SSH、模板渲染、collections、inventory 和 sudo 行为。

对 Linux 运维学习者来说,Ansible 是从“手工操作”走向“自动化平台”的关键工具。学会写 playbook 只是第一步,学会维护 playbook 的兼容性和可重复执行,才更接近生产能力。

参考资料