Ansible Playbook在一台GCP Ubuntu VM生效另一台无效果求助
针对Ansible Playbook在相同配置VM上执行无效果的排查方案
核心排查方向及操作步骤
1. 验证目标路径的实际有效性
先确认us3tab02上/home/tableau-admin目录是否真实存在且权限正确:
ansible us3tab02 -m stat -a "path=/home/tableau-admin" -b -u tableau-admin
同时检查该目录的所有者和权限:
ansible us3tab02 -m shell -a "ls -ld /home/tableau-admin" -b -u tableau-admin
如果目录不存在,先创建目录再执行Playbook;如果权限不足,调整目录权限为tableau-admin用户可写。
2. 检查Become执行的实际环境
虽然配置了become_user: tableau-admin,但可能sudo执行时的环境变量或路径解析异常。直接测试sudo无密码执行创建文件的命令:
ansible us3tab02 -m shell -a "sudo -n touch /home/tableau-admin/test.log" -u <你的SSH登录用户>
(替换<你的SSH登录用户>为你实际用Ansible连接的用户)
如果该命令失败,说明tableau-admin用户的sudo配置存在问题,需要检查/etc/sudoers文件,确保该用户拥有无密码sudo权限:
tableau-admin ALL=(ALL) NOPASSWD: ALL
3. 确认Ansible执行时的路径解析
有时候用户的家目录可能不是/home/tableau-admin(比如系统用户的家目录在其他位置),用Ansible获取实际家目录:
ansible us3tab02 -m shell -a "echo ~tableau-admin" -b -u tableau-admin
如果输出不是/home/tableau-admin,修改Playbook中的path为实际家目录路径,比如:
path: "{{ ansible_env.HOME }}/test.log"
或者直接用获取到的实际路径。
4. 排查Ansible事实采集的干扰
尝试关闭gather_facts后重新执行Playbook,避免事实采集过程中引入的环境变量或配置干扰:
--- - name: Create a file in the home directory hosts: tab_clusters become: true become_user: tableau-admin gather_facts: false # 关闭事实采集 tasks: - name: Create empty file file: path: "/home/tableau-admin/test.log" state: touch mode: '0644'
5. 深度分析Ansible执行日志
重新执行Playbook并捕获完整的-vvv日志,重点关注us3tab02的执行片段:
ansible-playbook create-file.yaml -l us3tab02 -vvv > ansible-debug.log
在日志中查找以下关键词:
changed: [us3tab02]:如果显示changed=0,说明Ansible认为文件已存在,实际不存在则是路径匹配问题;executing command:查看实际执行的touch命令参数是否正确;sudo相关日志:确认sudo是否成功切换到tableau-admin用户。
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

