ansible-playbook常用的检查命令

在执行 ansible-playbook 之前,建议按下面顺序检查。

1. 检查 Ansible 版本

bash 复制代码
ansible --version

用于确认:

  • Ansible 是否安装。
  • Python 使用哪个环境。
  • 配置文件位置。
  • 默认 inventory。
  • 默认 forks 数量。

2. 检查 inventory 是否能解析

bash 复制代码
ansible-inventory -i inventory.ini --graph

查看完整变量:

bash 复制代码
ansible-inventory -i inventory.ini --list

用于确认:

  • 主机是否被正确识别。
  • 主机组是否正确。
  • ansible_host、ansible_user 等变量是否生效。
  • 是否因为 inventory 格式错误导致没有主机。

3. 只显示本次会操作哪些主机

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --list-hosts

避免因为主机组写错,把任务执行到不应该操作的机器。

也可以限制范围:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --limit ds-master

4. 检查 Playbook 语法

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --syntax-check

主要检查:

  • YAML 缩进。
  • hosts、tasks 等结构。
  • 模块参数格式。
  • Jinja2 表达式基本语法。

注意:语法检查不会连接远程主机,也不会验证远程路径是否存在。


5. 查看任务列表

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --list-tasks

用于确认任务执行顺序,特别适合检查:

  • 是否包含重启服务。
  • 是否包含删除文件。
  • 是否包含修改配置。
  • 是否遗漏某个任务。

如果 Playbook 使用了 tags:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --list-tags

6. 先做连接测试

bash 复制代码
ansible all \
  -i inventory.ini \
  -m ansible.builtin.ping

检查指定组:

bash 复制代码
ansible kafka \
  -i inventory.ini \
  -m ansible.builtin.ping

如果需要检查远端基本环境:

bash 复制代码
ansible all -i inventory.ini \
  -m ansible.builtin.command \
  -a 'hostname'

查看用户:

bash 复制代码
ansible all -i inventory.ini \
  -m ansible.builtin.command \
  -a 'whoami'

查看 Python:

bash 复制代码
ansible all -i inventory.ini \
  -m ansible.builtin.command \
  -a 'python3 --version'

7. 使用 Check Mode 预演

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --check

--check 会尽量模拟执行结果,但不真正修改远程系统。

常用于确认:

  • 哪些文件会变化。
  • 哪些目录会创建。
  • 哪些服务状态会改变。
  • 哪些任务会被标记为 changed。

不过不是所有模块都完全支持 check mode,尤其是某些 shell、第三方模块和自定义脚本。


8. 查看配置文件差异

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --check \
  --diff

对于 template、copy 等模块,可以看到远端文件修改前后的差异。

示例:

yaml 复制代码
- name: Deploy Kafka configuration
  ansible.builtin.template:
    src: server.properties.j2
    dest: /opt/datasophon/kafka-2.4.1/config/server.properties
    backup: true

使用 --check --diff 可以先确认配置变化是否符合预期。


9. 检查 Vault 密码是否可用

如果使用了 ansible-vault:

bash 复制代码
ansible-vault view group_vars/all/vault.yml

执行前验证变量能否解密:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --syntax-check \
  --ask-vault-pass

或者:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --check \
  --ask-vault-pass

10. 检查远端权限和 become

检查当前远端用户:

bash 复制代码
ansible all -i inventory.ini \
  -m ansible.builtin.command \
  -a 'whoami'

检查是否能提权:

bash 复制代码
ansible all -i inventory.ini \
  -b \
  -m ansible.builtin.command \
  -a 'whoami'

如果返回:

text 复制代码
root

说明 become 配置正常。


11. 检查变量值

查看某台主机最终变量:

bash 复制代码
ansible-inventory \
  -i inventory.ini \
  --host ds-master

使用临时变量:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  -e 'deploy_env=test'

注意不要在终端参数中直接传密码,因为可能出现在 shell 历史记录中。


12. 使用 ansible-lint 检查质量

如果安装了 ansible-lint:

bash 复制代码
ansible-lint playbook.yml

可以发现:

  • 模块没有写全限定名。
  • 使用了不推荐的 shell。
  • 变量命名问题。
  • 权限和幂等性问题。
  • Playbook 风格问题。

例如推荐:

yaml 复制代码
ansible.builtin.copy:

而不是:

yaml 复制代码
copy:

推荐的完整检查顺序

bash 复制代码
ansible --version

ansible-inventory -i inventory.ini --graph

ansible-playbook -i inventory.ini playbook.yml --syntax-check

ansible-playbook -i inventory.ini playbook.yml --list-hosts

ansible-playbook -i inventory.ini playbook.yml --list-tasks

ansible all -i inventory.ini -m ansible.builtin.ping

ansible-playbook -i inventory.ini playbook.yml --check --diff

ansible-lint playbook.yml

确认没有问题后,再正式执行:

bash 复制代码
ansible-playbook \
  -i inventory.ini \
  playbook.yml \
  --limit ds-master

涉及 Doris、Kafka、ZooKeeper、DolphinScheduler 等集群服务时,建议先用 --limit 单节点验证,再逐步扩大范围。

相关推荐
超级大福宝25 分钟前
VS Code Remote-SSH 因 RemoteForward 端口冲突导致连接失败的排查与解决
运维·服务器·windows·vscode·ssh
Vex2une1 小时前
Windows PowerShell 发展史:从命令行工具到自动化核心
windows·自动化运维·命令行·powershell·cmd·脚本语言·对象管道
怎么没有名字注册了啊13 小时前
Qt开发:MessageBox怎么调出标题栏那个问号按钮?
windows
李子红了时14 小时前
EncFS MP中文版汉化下载(免费文件加密工具)
windows·安全
辻弋20114 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
会飞的土拨鼠呀15 小时前
Windows 系统关闭虚拟内存文件pagefile.sys
windows
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
工作10年+,存储芯片行业17 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
lpfasd12318 小时前
WinSW在Win7上失败真相-实测与修复
windows·nginx
万山寒19 小时前
windows使用WinSW注册服务
windows