首页 > 解决方案 > 如果已创建 VM,Ansible vmware_guest customize_spec 不会更改任何内容

问题描述

背景:

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

我发现如果我尝试将其应用于customization_spec我通过vmware_guest模块从模板克隆的不同 VM,情况也是如此。我创建了一个单独的剧本,它只会进行自定义,所以不会有任何其他事情可以解决它,我正在使用静态名称等等,因为这是一些初始测试和开发。

不过,这很重要,如果我使用相同的vmware_guest模块从模板中克隆 VM,它将克隆 VM 并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

标签: ansiblevmware

解决方案


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

问题是由于 VM 已经存在,您必须提供

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

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


推荐阅读