使用Ansible VMware模块收集VM facts时持续遭遇权限拒绝错误
我仔细看了你的问题描述、playbook代码和错误日志,发现真正的问题不是VMware vCenter的认证权限,而是Ansible执行模块时调用的Python解释器路径/home/neil/venv/Ansible/bin/python3.11没有执行权限,这才导致了Permission denied错误。
先给你展示一下你提供的相关代码和错误信息,方便对照排查:
你的VM facts收集任务代码
- name: Find VM's facts community.vmware.vmware_guest_info: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" datacenter: "{{ vmware_datacentres[vcenter_hostname] }}" name: "{{ ansible_fqdn }}" validate_certs: false delegate_to: localhost register: vm_facts - name: Debug vm_facts debug: var=vm_facts
错误日志片段
TASK [vmware-test : Find VM's facts] **************************************************************************************************
fatal: [testhost1 -> localhost]: FAILED! => {"changed": false, "module_stderr": "\n/bin/sh: /home/neil/venv/Ansible/bin/python3.11: Permission denied\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 126}
接下来给你几个针对性的解决步骤:
第一步:检查Python解释器的权限
登录到localhost(也就是你执行Ansible的机器),运行以下命令查看目标Python文件的权限:ls -l /home/neil/venv/Ansible/bin/python3.11正常情况下,权限位应该包含
x(执行权限),比如-rwxr-xr-x,如果没有x,说明确实缺少执行权限。第二步:修复Python解释器的执行权限
如果检查后发现缺少执行权限,运行下面的命令添加权限:chmod +x /home/neil/venv/Ansible/bin/python3.11第三步:明确指定Ansible使用的Python解释器
有时候Ansible会自动选择不合适的Python路径,你可以在playbook的开头明确指定一个有执行权限的Python解释器,比如系统默认的Python3:- name: VMware VM Facts Collection hosts: testhost1 vars: ansible_python_interpreter: /usr/bin/python3 # 根据你机器的实际路径调整 tasks: # 这里放你原来的VMware任务代码或者你也可以修改
ansible.cfg配置文件中的interpreter_python参数,全局指定正确的Python路径。第四步:验证虚拟环境完整性(可选)
如果上面的步骤都没解决问题,可能是你的Ansible虚拟环境损坏了,可以尝试重新创建虚拟环境:# 如果当前在虚拟环境中,先退出 deactivate # 删除旧的虚拟环境 rm -rf /home/neil/venv/Ansible # 重新创建虚拟环境 python3 -m venv /home/neil/venv/Ansible # 激活虚拟环境 source /home/neil/venv/Ansible/bin/activate # 重新安装所需依赖 pip install ansible community.vmware
按照这些步骤排查后,应该就能解决权限拒绝的问题,成功收集VM的facts了。
备注:内容来源于stack exchange,提问作者NeilWang

