在执行 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 单节点验证,再逐步扩大范围。