如何通过vCenter API将模板/OVA等文件上传至数据存储
解决方案
关于你的两个疑问
- 完全可以:通过vCenter API就能把本地Ubuntu主机上的ISO/OVA/VMDK上传到ESXi的数据存储,不需要直接和ESXi主机建立单独认证会话,全程用vCenter的认证凭证即可完成操作。
- 可行:只用vCenter一套认证体系完全没问题,不用维护两套认证逻辑。你之前的尝试没成功,核心问题是URL格式不对,下面是修正后的正确实现:
正确的Ansible URI调用示例
- name: 上传ISO到vCenter管理的数据存储 uri: url: "https://{{ vcenter_hostname }}/folder/ISO/Some-test-file.iso?dsName={{ upload_datastore }}" method: PUT src: ISOs/debian/11/debian-11.9.0-amd64-DVD-1.iso validate_certs: no headers: Cookie: "{{ auth_cookie.set_cookie }}" status_code: 201
关键修正细节
- URL格式:vCenter的
/folder接口需要通过dsName查询参数指定目标数据存储名称,不能把数据存储名直接嵌入路径。路径里的ISO/Some-test-file.iso是数据存储内的目标目录和文件名(目录不存在时vCenter会自动创建)。 - 认证设置:无需开启
force_basic_auth,直接用vCenter登录返回的会话Cookie就能完成权限验证,避免重复认证流程。 - 结果判断:文件上传成功后vCenter会返回
201 Created,添加status_code: 201能让Ansible准确判断任务是否执行成功。
OVA/VMDK上传说明
如果是上传OVA或VMDK文件,操作逻辑和ISO完全一致,只需修改src和URL中的文件名即可。若需要将OVA直接部署为虚拟机,则需调用vCenter的OVA部署API,但单纯将文件上传至数据存储的话,上述方法完全适用。
内容的提问来源于stack exchange,提问作者OldguardMD
相关产品推荐
相关产品推荐

