使用 vCenter API 将模板或 OVA 移动到数据存储

问题描述 投票:0回答:1

作为 Ansible 安装过程的一部分,我们需要将一些 ISO、OVA 文件或模板文件导入到数据存储中,以便我们可以在安装过程中使用它们。我们已经有一个用于 API 访问的现有令牌,因此我们希望使用该身份验证来上移文件。为了避免依赖性,我们仅使用 Ansible URI 调用 vCenter API,并希望我们可以继续该方法。

  • 有没有办法通过 vCenter API 将 OVA 或 VMDK 文件从本地 Linux 主机(当前为 Ubuntu 22.04)复制到 ESXi 主机?
  • 我们已经从 API 获得了集群中的主机列表。如果我们可以使用通过 vCenter 已有的身份验证来上传文件,那将是首选。我们试图避免必须有两组身份验证才能完成安装。

我们看到 govc 和 PowerCli 能够在何处将文件上传到数据存储,并且我们看到 GUI 可以通过 vCenter 上传 OVA 和其他文件,而无需 root 身份验证,但我们无法找到可用于上传的 API 调用我们需要的文件。现在我们可以使用 ssh 或 govc 来做到这一点,但我们试图避免多种身份验证方法(例如 ssh / root 访问主机),并希望尽可能限制对其他工具的依赖。这可以通过 API 来完成吗?我看到参考文献说 SOAP 可能是执行此操作的方法,但我没有看到任何示例。

到目前为止我们已经尝试过:

  - name: Upload File
    uri:
      url:  "https://{{ vcenter_hostname }}/folder/{{ upload_datastore }}/Some-test-file.iso"
      method: PUT
      src: ISOs/debian/11/debian-11.9.0-amd64-DVD-1.iso
      force_basic_auth: yes 
      validate_certs: no
      headers:
        Cookie: "{{ auth_cookie.set_cookie }}"

我们还尝试使用在身份验证过程中从 vCenter 获得的相同令牌写入 ESXi 主机

  - name: Upload File
    uri:
      url:  "https://{{ esxi_hostname }}/folder/{{ upload_datastore }}/Some-test-file.iso"
      method: PUT
      src: ISOs/debian/11/debian-11.9.0-amd64-DVD-1.iso
      force_basic_auth: yes 
      validate_certs: no
      headers:
        Cookie: "{{ auth_cookie.set_cookie }}"

目标是在数据存储中创建 ISO。我只需要了解 API 调用即可。我知道其他工具可以做到这一点,但这个问题具体是关于调用 vCenter 服务器来完成此操作。

rest ansible vmware vcenter
1个回答
0
投票

我能够解决这个问题。几个要点:

  • 有关文件目标的所有信息都将位于被调用的 URL 中
  • 我尝试使用用于其他 API 调用的 cookie。该 cookie 在这里不起作用,我必须重新发送身份验证凭据才能发送文件。

这应该是一个有效的示例:

- name: Transfer a File
  hosts: localhost
  gather_facts: false
  vars:
    vcenter_hostname: "your.vcenter.local"
    vcenter_user: "[email protected]"
    src_file_path: "./testfile.txt"
    dst_file_name: "SomeNewFileName.txt"
    dst_folder_name: "AnExistingFolder"
    datastore_name: "TheNameOfTheDatastore" 
    datacenter_name: "TheNameOfTheDatacenterInVCenter"

  tasks:
  
  - name: Transfer a File Test
    uri:
      url: "https://{{ vcenter_hostname }}/folder/{{ dst_folder_name }}/{{ dst_file_name }}?dsName={{ datastore_name }}&dcPath={{ datacenter_name }}"
      force_basic_auth: yes
      validate_certs: no
      user: "{{ vcenter_user }}"
      password: "{{ lookup('ansible.builtin.env', 'ANSIBLE_PASSWORD') }}"
      method: PUT
      src: "{{ src_file_path }}"
© www.soinside.com 2019 - 2024. All rights reserved.