如果已经创建了 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 时应用。
背景:
我正在研究一些自动化,以便能够从内容库 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 时应用。