community.vmware.vmware_guest 模块 – 管理 vCenter 中的虚拟机
注意
此模块是 community.vmware 集合(版本 5.2.0)的一部分。
如果您使用的是 ansible
包,您可能已经安装了此集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用:ansible-galaxy collection install community.vmware
。
要在 playbook 中使用它,请指定:community.vmware.vmware_guest
。
概要
此模块可用于从模板或其他虚拟机创建新的虚拟机、管理虚拟机的电源状态(例如开机、关机、挂起、关闭、重启等)、修改各种虚拟机组件(如网络、磁盘、自定义等)、重命名虚拟机以及删除具有关联组件的虚拟机。
参数
参数 |
注释 |
---|---|
定义要添加到 VMX 配置的高级设置列表。 高级设置对象采用两个字段 不正确的键和值将被忽略。 默认值: |
|
要在虚拟机中包含的注释或注解。 |
|
虚拟机的 CD-ROM 配置列表。 对于 默认值: |
|
对于 对于 |
|
要使用的 ISO 文件的 datastore 路径,格式为 如果类型设置为 |
|
如果设置为 选项
|
|
CD-ROM 的类型。 使用 选项
|
|
对于 对于 |
|
指定在克隆模板或虚拟机时转换磁盘类型。 选项
|
|
从模板或虚拟机克隆时,或直接应用于现有虚拟机的操作系统自定义参数。 并非所有操作系统都支持使用各自的 vCenter 版本进行自定义,请查看 VMware 文档了解各自的操作系统自定义。 有关支持自定义的操作系统矩阵,请参阅(http://partnerweb.vmware.com/programs/guestOS/guest-os-customization-matrix.pdf) 基于 Linux 的操作系统需要安装 Perl 包才能进行操作系统自定义。 默认值: |
|
虚拟机自定义后自动登录。 特定于 Windows 自定义。 选项
|
|
重启后自动登录的次数。 特定于 Windows 自定义。 如果未设置 如果未设置,则使用 1。 |
|
要配置的 DNS 服务器列表。 Linux 和 Windows 自定义通用。 |
|
域后缀列表,也称为 DNS 搜索路径。 默认 Linux 和 Windows 自定义通用。 |
|
要使用的 DNS 域名。 Linux 和 Windows 自定义通用。 |
|
如果设置为 Linux 和 Windows 自定义通用。 选项
|
|
服务器所有者名称。 特定于 Windows 自定义。 如果未设置,将使用“Administrator”作为后备。 |
|
指定硬件时钟是使用 UTC 时间还是本地时间。 特定于 Linux 自定义。 选项
|
|
组织名称。 特定于 Windows 自定义。 如果未设置,将使用“ACME”作为后备。 |
|
本地管理员密码。 如果未定义,密码将设置为空(即无密码)。 特定于 Windows 自定义。 |
|
产品 ID。 特定于 Windows 自定义。 |
|
首次用户登录时要运行的命令列表。 特定于 Windows 自定义。 |
|
要使用 shebang 运行的脚本。 需要在 vmware tools 中启用:vmware-toolbox-cmd config set deployPkg enable-custom-scripts true 特定于 Linux 自定义。 |
|
唯一名称,用于标识请求的自定义规范。 如果设置,则会覆盖 |
|
定义要在虚拟机上设置的自定义值列表。 自定义值对象采用两个字段 不正确的键和值将被忽略。 默认值: |
|
部署操作的目标数据中心。 默认值: |
|
是否从清单中删除虚拟机或从磁盘中删除。 选项
|
|
要添加的磁盘列表。 不支持收缩磁盘。 不支持删除虚拟机的现有磁盘。 属性 默认值: |
|
选择使用较少的数据存储。 如果指定了此 选项
|
|
磁盘控制器总线号。 每个虚拟机最多支持 4 个相同类型的控制器。 选项
|
|
磁盘控制器的类型。 在不支持的 ESXi 或虚拟机硬件版本上设置此类型会导致部署失败。 设置为 如果设置为 选项
|
|
将用于磁盘的数据存储的名称。 如果 |
|
磁盘模式的类型。 如果指定了 如果指定了 如果指定了 选项
|
|
要使用的现有磁盘映像。 文件名必须已存在于数据存储中。 以 |
|
磁盘存储大小。 请指定存储单位,如 [kb, mb, gb, tb]。 |
|
磁盘存储大小,单位为 gb。 |
|
磁盘存储大小,单位为 kb。 |
|
磁盘存储大小,单位为 mb。 |
|
磁盘存储大小,单位为 tb。 |
|
磁盘的类型。 如果未指定,则在克隆时,磁盘类型将从源虚拟机或模板继承,否则为厚磁盘,没有 eagerzero。 选项
|
|
磁盘单元号。 SCSI 控制器的有效值范围为 0 到 15,但不包括 7。 NVME 控制器的有效值范围为 0 到 14。 SATA 控制器的有效值范围为 0 到 29。 使用多种类型的磁盘控制器和磁盘创建或重新配置虚拟机时,需要 创建新的虚拟机时, |
|
管理虚拟机加密设置 默认值: |
|
控制容错复制的加密 选项
|
|
控制使用 vmotion 的实时迁移的加密 选项
|
|
目标文件夹,用于查找现有客户机或创建新客户机的绝对路径。 该文件夹应包括数据中心。 ESXi 的数据中心是 ha-datacenter。 如果找到多个同名的计算机,则此参数用于标识 虚拟机的唯一性。 示例 folder: /ha-datacenter/vm folder: ha-datacenter/vm folder: /datacenter1/vm folder: datacenter1/vm folder: /datacenter1/vm/folder1 folder: datacenter1/vm/folder1 folder: /folder1/datacenter1/vm folder: folder1/datacenter1/vm folder: /folder1/datacenter1/vm/folder2 |
|
忽略警告并完成操作。 此参数在删除已打开电源的虚拟机时很有用。 此模块反映了 VMware vCenter API 和 UI 工作流程,因此,在某些情况下,`force` 标志将是强制性的,以执行操作,以确保您确定必须执行操作,无论后果如何。 这尤其适用于在 选项
|
|
设置客户机 ID。 创建虚拟机时此字段为必填项,从模板创建时则不需要。 有效值请参考此处:https://code.vmware.com/apis/358/doc/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html |
|
管理虚拟机的硬件属性。 默认值: |
|
选择用于引导虚拟机的固件。 选项
|
|
虚拟机的 CPU 利用率不会超过此限制。 单位为 MHz。 |
|
保证虚拟机可用的 CPU 资源量。 |
|
分配给此虚拟机的 CPU 份额数 cpu_shares_level 将自动设置为“custom” |
|
虚拟机 CPU 资源的分配级别。 选项
|
|
允许在虚拟机运行时添加虚拟 CPU。 选项
|
|
允许在虚拟机运行时添加内存。 选项
|
|
允许在虚拟机运行时移除虚拟 CPU。 选项
|
|
指定是否为此虚拟机启用 I/O MMU 的标志。 选项
|
|
虚拟机的最大活动远程显示连接数。 |
|
虚拟机的内存利用率不会超过此限制。 单位为 MB。 |
|
保证虚拟机可用的内存资源量。 |
|
分配给此虚拟机的内存份额数 mem_shares_level 将自动设置为“custom” |
|
虚拟机内存资源的分配级别。 选项
|
|
内存大小,单位为 MB。 |
|
如果设置为 选项
|
|
启用嵌套虚拟化。 选项
|
|
每个插槽的内核数。 |
|
CPU 数量。 必须是 例如,要创建具有 2 个插槽,每个插槽 4 个内核的虚拟机,请将 |
|
有效值为
选项
|
|
是否启用或禁用 (U)EFI 安全启动。 选项
|
|
虚拟机硬件版本。 默认值为 10(ESXi 5.5 及更高版本)。 如果设置为 请查看 VMware 文档以了解正确的虚拟机硬件版本。 不正确的硬件版本可能会导致部署失败。如果硬件版本已经等于给定值。 |
|
在 ESXi 6.7 及更高版本上,从硬件版本 14 开始,为 Windows 启用基于虚拟化的安全功能。 支持的客户操作系统为 Windows 10 64 位、Windows Server 2016、Windows Server 2019 及更高版本。 虚拟机的固件必须为 EFI,并且必须启用安全启动。 基于虚拟化的安全依赖于嵌套虚拟化和用于定向 I/O 的 Intel 虚拟化技术。 在不受支持的 ESXi、硬件版本或固件上部署可能会导致失败或部署具有意外配置的虚拟机。 选项
|
|
启用虚拟 CPU 性能计数器。 选项
|
|
vSphere vCenter 或 ESXi 服务器的主机名或 IP 地址。 如果任务中未指定该值,则将改用环境变量 |
|
将实例标记为模板。 这将把给定的虚拟机标记为模板。 注意,这可能需要在不进行任何其他更改的专用任务调用中完成。例如,用户不能在同一任务中将状态从已开机更改为已关机并另存为模板。 有关更多详细信息,请参阅 community.vmware.vmware_guest 源代码。 选项
|
|
要使用的虚拟机的名称。 vCenter 中的虚拟机名称不一定唯一,这可能会有问题,请参阅 如果存在多个具有相同名称的虚拟机,则需要 如果 |
|
如果多个虚拟机与名称匹配,则使用找到的第一个或最后一个。 选项
|
|
网络列表(按 NIC 的顺序排列)。 在重新配置虚拟机时不允许删除 NIC。 创建全新的空白虚拟机时,type、ip、netmask、gateway、domain、dns_servers 选项不会设置到客户机。它们通过 vmware-tools 的自定义进行设置。 如果要将选项的值设置到客户机,则需要从已安装操作系统和 vmware-tools(Linux 时还需 Perl)的模板进行克隆。 默认值: |
|
指示 NIC 当前是否已连接。 选项
|
|
虚拟网络设备。 有效值可以是
每个条目都是可选的。 用于虚拟硬件。 |
|
此网络接口的 DNS 服务器(Windows)。 每个条目都是可选的。 用于操作系统自定义。 |
|
此网络接口的域名(Windows)。 每个条目都是可选的。 用于操作系统自定义。 |
|
分布式 vSwitch 的名称。 每个条目都是可选的。 用于虚拟硬件。 |
|
静态网关。 每个条目都是可选的。 用于操作系统自定义。 |
|
静态网关。 每个条目都是可选的。 用于操作系统自定义。 |
|
静态 IP 地址。暗示 每个条目都是可选的。 用于操作系统自定义。 |
|
静态 IP 地址。暗示 每个条目都是可选的。 用于操作系统自定义。 |
|
自定义 MAC 地址。 每个条目都是可选的。 用于虚拟硬件。 |
|
每个条目都是可选的。 用于操作系统自定义。 |
|
每个条目都是可选的。 用于操作系统自定义。 |
|
指定虚拟机启动时是否连接该设备。 选项
|
|
IP 分配的类型。 有效值可以是
每个条目都是可选的。 用于操作系统自定义。 |
|
IP 分配的类型。 有效值可以是
每个条目都是可选的。 用于操作系统自定义。 |
|
此接口的 VLAN 号。 每个条目都需要。 |
|
向虚拟机添加或删除虚拟 NVDIMM 设备。 在 vSphere 6.7 或更高版本上,VM 虚拟硬件版本必须为 14 或更高版本。 添加虚拟 NVDIMM 设备之前,请验证虚拟机的客户操作系统是否支持 PMem。 请验证您是否拥有虚拟机的 *Datastore.Allocate* 空间权限。 确保虚拟机所在的主机或集群具有可用的 PMem 资源。 要向现有虚拟机添加或删除虚拟 NVDIMM 设备,必须处于关机状态。 默认值: |
|
要删除或配置的虚拟 NVDIMM 设备的标签,例如“NVDIMM 1”。 当 |
|
虚拟 NVDIMM 设备大小,单位为 MB。 默认值: |
|
vSphere vCenter 或 ESXi 服务器的密码。 如果任务中未指定该值,则将使用环境变量 |
|
将接收所有 HTTPS 请求并转发它们的 HTTP 代理端口。 如果任务中未指定该值,则将使用环境变量 |
|
使用给定的资源池进行虚拟机操作。 资源池应为所选主机父级的子级。 如果未指定,则将 Resources 作为默认值。 |
|
要用于创建虚拟机克隆的现有快照的名称。 当使用 |
|
指定虚拟机应处于的状态。 如果为 如果为 如果设置为 如果设置为 如果设置为 如果设置为 如果设置为 如果设置为 如果设置为 选项
|
|
如果 如果将此参数设置为正整数,则模块将改为等待虚拟机达到已关闭状态。 该值设置模块等待状态更改的超时时间(以秒为单位)。 默认值: |
|
用于创建新虚拟机的模板或现有虚拟机。 如果未设置此值,则会创建不使用模板的虚拟机。 如果虚拟机已存在,则会忽略此参数。 从 2.8 版开始,可以使用虚拟机或模板的绝对路径。 |
|
是否使用 VMware 实例 UUID 而不是 BIOS UUID。 选项
|
|
vSphere vCenter 或 ESXi 服务器的用户名。 如果任务中未指定该值,则将使用环境变量 |
|
如果要管理虚拟机且已知其 UUID,则使用该 UUID,这是 VMware 的唯一标识符。 如果未提供 如果虚拟机不存在,则会忽略此参数。 请注意,在创建虚拟机时会忽略提供的 UUID,因为 VMware 会在内部创建 UUID。 |
|
允许在 SSL 证书无效时进行连接。当证书不受信任时,设置为 如果任务中未指定该值,则将使用环境变量 选项
|
|
vApp 属性列表。 有关属性和类型的完整列表,请参阅:https://code.vmware.com/apis/704/vsphere/vim.vApp.PropertyInfo.html 默认值: |
|
属性 ID。 每个条目都需要。 |
|
仅当删除属性时,才需要 |
|
值类型,默认情况下为字符串类型。 |
|
属性值。 |
|
等待 vCenter 检测到所有客户机自定义已成功完成。 启用后,虚拟机将自动启动。 如果 vCenter 未检测到客户机自定义启动或成功,则在指定的 选项
|
|
定义 wait_for_customization 参数的超时时间(以秒为单位)。 设置此值时请小心,因为客户机自定义所花费的时间可能因客户机操作系统而异。 默认值: |
|
等待 vCenter 检测到虚拟机的 IP 地址。 这需要在创建后 vmware-tools (vmtoolsd) 正常工作。 需要在给定的虚拟机上安装 vmware-tools 才能使用此参数。 选项
|
|
定义 wait_for_ip_address 参数的超时时间(以秒为单位)。 默认值: |
注意
注意
请确保用于 community.vmware.vmware_guest 的用户具有正确的特权级别。
例如,以下是用户创建虚拟机所需的最低特权列表。
数据存储 > 分配空间
虚拟机 > 配置 > 添加新磁盘
虚拟机 > 配置 > 添加或删除设备
虚拟机 > 清单 > 创建新项
网络 > 分配网络
资源 > 将虚拟机分配到资源池
模块可能还需要其他特权,这些特权可能用于收集事实 - 例如,ESXi 配置。
如果要通过指定 SCSI 控制器来在线扩展磁盘,请使用 SCSI 磁盘而不是 IDE 磁盘。
将 SysPrep 用于带有 PyVmomi 的 Windows VM(取决于 ‘guest_id’ 参数匹配 ‘win’)。
为了更改虚拟机的参数(例如,CPU 数量),必须关闭虚拟机,除非启用了热添加支持,并且必须使用
state=present
来应用更改。有关更多信息,请访问 Ansible VMware 社区 Wiki - https://github.com/ansible/community/wiki/VMware。
所有模块都需要 API 写入权限,因此在免费 ESXi 许可证上不受支持。
所有变量和 VMware 对象名称都区分大小写。
示例
- name: Create a virtual machine on given ESXi hostname
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
folder: /DC1/vm/
name: test_vm_0001
state: poweredon
guest_id: centos64Guest
# This is hostname of particular ESXi server on which user wants VM to be deployed
esxi_hostname: "{{ esxi_hostname }}"
disk:
- size_gb: 10
type: thin
datastore: datastore1
hardware:
memory_mb: 512
num_cpus: 4
scsi: paravirtual
networks:
- name: VM Network
mac: aa:bb:dd:aa:00:14
ip: 10.10.10.100
netmask: 255.255.255.0
device_type: vmxnet3
wait_for_ip_address: true
wait_for_ip_address_timeout: 600
delegate_to: localhost
register: deploy_vm
- name: Create a virtual machine from a template
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
folder: /testvms
name: testvm_2
state: poweredon
template: template_el7
disk:
- size_gb: 10
type: thin
datastore: g73_datastore
# Add another disk from an existing VMDK
- filename: "[datastore1] testvms/testvm_2_1/testvm_2_1.vmdk"
hardware:
memory_mb: 512
num_cpus: 6
num_cpu_cores_per_socket: 3
scsi: paravirtual
memory_reservation_lock: true
mem_limit: 8096
mem_reservation: 4096
cpu_shares_level: "high"
mem_shares_level: "high"
cpu_limit: 8096
cpu_reservation: 4096
max_connections: 5
hotadd_cpu: true
hotremove_cpu: true
hotadd_memory: false
version: 12 # Hardware version of virtual machine
boot_firmware: "efi"
cdrom:
- controller_number: 0
unit_number: 0
state: present
type: iso
iso_path: "[datastore1] livecd.iso"
networks:
- name: VM Network
mac: aa:bb:dd:aa:00:14
wait_for_ip_address: true
delegate_to: localhost
register: deploy
- name: Clone a virtual machine from Windows template and customize
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: datacenter1
cluster: cluster
name: testvm-2
template: template_windows
networks:
- name: VM Network
ip: 192.168.1.100
netmask: 255.255.255.0
gateway: 192.168.1.1
mac: aa:bb:dd:aa:00:14
domain: my_domain
dns_servers:
- 192.168.1.1
- 192.168.1.2
- vlan: 1234
type: dhcp
customization:
autologon: true
dns_servers:
- 192.168.1.1
- 192.168.1.2
domain: my_domain
password: new_vm_password
runonce:
- powershell.exe -ExecutionPolicy Unrestricted -File C:\Windows\Temp\ConfigureRemotingForAnsible.ps1 -ForceNewSSLCert -EnableCredSSP
delegate_to: localhost
- name: Clone a virtual machine from Linux template and customize
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ datacenter }}"
state: present
folder: /DC1/vm
template: "{{ template }}"
name: "{{ vm_name }}"
cluster: DC1_C1
networks:
- name: VM Network
ip: 192.168.10.11
netmask: 255.255.255.0
wait_for_ip_address: true
customization:
domain: "{{ guest_domain }}"
dns_servers:
- 8.9.9.9
- 7.8.8.9
dns_suffix:
- example.com
- example2.com
script_text: |
#!/bin/bash
touch /tmp/touch-from-playbook
delegate_to: localhost
- name: Rename a virtual machine (requires the virtual machine's uuid)
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
uuid: "{{ vm_uuid }}"
name: new_name
state: present
delegate_to: localhost
- name: Remove a virtual machine by uuid
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
uuid: "{{ vm_uuid }}"
state: absent
delegate_to: localhost
- name: Remove a virtual machine from inventory
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
name: vm_name
delete_from_inventory: true
state: absent
delegate_to: localhost
- name: Manipulate vApp properties
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
name: vm_name
state: present
vapp_properties:
- id: remoteIP
category: Backup
label: Backup server IP
type: string
value: 10.10.10.1
- id: old_property
operation: remove
delegate_to: localhost
- name: Set powerstate of a virtual machine to poweroff by using UUID
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
uuid: "{{ vm_uuid }}"
state: poweredoff
delegate_to: localhost
- name: Deploy a virtual machine in a datastore different from the datastore of the template
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
name: "{{ vm_name }}"
state: present
template: "{{ template_name }}"
# Here datastore can be different which holds template
datastore: "{{ virtual_machine_datastore }}"
hardware:
memory_mb: 512
num_cpus: 2
scsi: paravirtual
delegate_to: localhost
- name: Create a diskless VM
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ dc1 }}"
state: poweredoff
cluster: "{{ ccr1 }}"
name: diskless_vm
folder: /Asia-Datacenter1/vm
guest_id: centos64Guest
datastore: "{{ ds1 }}"
hardware:
memory_mb: 1024
num_cpus: 2
num_cpu_cores_per_socket: 1
- name: Create a VM with multiple disks of different disk controller types
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
folder: /DC1/vm/
name: test_vm_multi_disks
state: poweredoff
guest_id: centos64Guest
datastore: datastore1
disk:
- size_gb: 10
controller_type: 'nvme'
controller_number: 0
unit_number: 0
- size_gb: 10
controller_type: 'paravirtual'
controller_number: 0
unit_number: 1
- size_gb: 10
controller_type: 'sata'
controller_number: 0
unit_number: 2
hardware:
memory_mb: 512
num_cpus: 4
version: 14
networks:
- name: VM Network
device_type: vmxnet3
delegate_to: localhost
register: deploy_vm
- name: Create a VM with NVDIMM device
community.vmware.vmware_guest:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
folder: /DC1/vm/
name: test_vm_nvdimm
state: poweredoff
guest_id: centos7_64Guest
datastore: datastore1
hardware:
memory_mb: 512
num_cpus: 4
version: 14
networks:
- name: VM Network
device_type: vmxnet3
nvdimm:
state: present
size_mb: 2048
delegate_to: localhost
register: deploy_vm
返回值
常见的返回值记录在此处,以下是此模块特有的字段
键 |
描述 |
---|---|
有关新虚拟机的元数据 返回值: 始终 示例: |