无vCenter独立ESXi环境下用Ansible add_host调用vim-cmd报错求助
报错根因
当前任务的命令执行位置配置完全错误:
- 针对
/bin/vim-cmd的执行任务你配置了delegate_to: localhost,该参数会强制把本该在远程ESXi节点上运行的命令,拉回执行Ansible的本地控制机运行 - 通用操作系统(你的本地控制机)不存在ESXi专属内置程序
/bin/vim-cmd,直接触发系统层的「文件或目录不存在」报错,对应返回信息[Errno 2] No such file or directory
对应解决操作
- 移除错误的委派配置:直接删掉
command: /bin/vim-cmd vmsvc/getallvms任务下的delegate_to: localhost行。删除后Ansible会按照add_host配置的连接参数,SSH登录到对应ESXi节点执行命令,/bin/vim-cmd是ESXi系统原生预装的程序,路径本身有效。 - 移除不兼容的提权配置:playbook中配置的
become: yes不适用于ESXi的通用SSH连接——ESXi的SSH会话使用root账号登录时本身就是最高权限,不需要通过Ansible的sudo提权机制,直接删除这行即可。 - 前置加连通性校验:为避免其他路径异常,可先加一个简易校验任务确认ESXi端可正常访问目标程序,修正后的角色tasks/main.yml参考:
--- - block: - name: 校验vim-cmd程序存在 command: ls -l /bin/vim-cmd - name: 获取ESXi上所有虚拟机列表 command: /bin/vim-cmd vmsvc/getallvms rescue: - name: 失败兜底提示 debug: msg: "当前ESXi节点执行vim-cmd失败,请检查SSH连接、账号权限配置"
补充注意:ESXi主机需要提前开启SSH服务,且root账号的Shell访问权限未被禁用,否则会触发连接类报错,和当前的文件不存在报错逻辑无关。
内容的提问来源于stack exchange,提问作者이상규
相关产品推荐
相关产品推荐

