如果已经创建了 VM,Ansible vmware_guest customization_spec 不会更改任何内容

Ansible vmware_guest customization_spec doesn't change anything if a VM is already created

背景:

我正在研究一些自动化,以便能够从内容库 OVF 模板部署 VM。我能够从 OVF 模板成功部署 VM,但是,当我尝试通过 vmware_guest 模块应用 customization_spec 模板时,它没有任何改变。模块运行,但只是输出 OK 而不是 changed.

我发现如果我尝试将此 customization_spec 应用到我通过 vmware_guest 模块从模板克隆的不同 VM,也会出现这种情况。我创建了一个单独的剧本,专门进行自定义,所以不会有任何其他问题,我正在使用静态名称和诸如此类的东西,因为这是一些初步测试和开发。

但问题是,如果我使用相同的 vmware_guest 模块从模板克隆虚拟机,它将克隆虚拟机并在同一进程中应用 customization_spec。考虑到环境,内容库部署是首选,但如果我不能在事后部署一个customization_spec,它有点毁了它。

我可以通过 vCenter 手动应用 VM 自定义,所以我知道自定义模板很好,并且如前所示,通过 vmware_guest 模块克隆模板时它确实有效。我没有看到它在 vCenter 中显示为任务,所以我知道它没有通过单独的模块生效。我还应该注意,我可以使用相同的 vmware_guest 模块来很好地启动虚拟机,如果我将 customization_spec 行与其组合,它仍然不会在 vCenter 中启动来宾自定义。我是否遗漏了模块中的某些内容以强制其生效?

清理后的代码:

从模板克隆 - 自定义有效

- name: Clone the template with customizations - wait
  vmware_guest:
    hostname: {{ hostname }}
    username: {{ username }}
    password: {{ password }}
    validate_certs: False
    name: ansible_test_custom_yes_wait
    template: def_Win2019
    datacenter: {{ datacenter }}
    datastore: {{ datastore }}
    folder: {{ folder }}
    state: poweredon
    cluster: non-PRD v4
    customization_spec: customization
    wait_for_customization: yes

从内容库 ovf 克隆 - 没有自定义选项,但克隆有效

- name: Clone template from content library
  community.vmware.vmware_content_deploy_ovf_template:
    hostname: {{ hostname }}
    username: {{ username }}
    password: {{ password }}
    content_library: {{ library }}
    ovf_template: def_Win2019
    datastore_cluster: {{ datastore_cluster }}
    datacenter: {{ datacenter }}
    folder: {{ folder }}
    name: ansible_test_content_library
    cluster: {{ cluster }}
    validate_certs: false

设置 VM 自定义 - 创建 VM 后不起作用

- name: Set VM customization
  vmware_guest:
    hostname: {{ hostname }}
    username: {{ username }}
    password: {{ password }}
    name: ansible_test_content_library
    state: present
    customization_spec: {{ customization }}
    wait_for_customization: yes

呃,我发誓,每次我在这里 post 一个问题,我都会在 5 分钟后找出解决方案...

问题是因为虚拟机已经存在,所以你必须提供

customization:
   existing_vm: True

在模块中。所以,它应该是这样的:

- name: Set VM customization
  vmware_guest:
    hostname: {{ hostname }}
    username: {{ username }}
    password: {{ password }}
    name: ansible_test_content_library
    state: present
    customization:
      existing_vm: True
    customization_spec: {{ customization }}
    wait_for_customization: yes

一旦它在那里,它将 运行 通过虚拟机 customization_spec。否则,existing_vm 字段默认为 False,并且仅在克隆 VM 时应用。