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 自定义。 |
|
标识所请求的自定义规范的唯一名称。 如果设置,则会覆盖 |
|
定义要在虚拟机上设置的自定义值列表。 自定义值对象采用两个字段 不正确的键和值将被忽略。 默认值: |
|
部署操作的目标数据中心。 默认值: |
|
指定用于配置虚拟机的数据存储或数据存储群集。 此参数优先于 此参数可用于在从模板部署虚拟机时覆盖虚拟机的数据存储或数据存储群集设置。 请参阅示例以了解更多用法。 |
|
是从清单中删除虚拟机还是从磁盘中删除。 选择
|
|
要添加的磁盘列表。 不支持收缩磁盘。 不支持删除虚拟机的现有磁盘。 属性 默认值: |
|
选择使用较少的数据存储。 如果 选择
|
|
磁盘控制器总线编号。 每个 VM 的相同类型控制器的最大数量为 4。 选择
|
|
磁盘控制器的类型。在不支持的 ESXi 或 VM 硬件版本上设置此类型将导致部署失败。 如果设置为 如果设置为 选择
|
|
将用于磁盘的数据存储的名称。 如果 |
|
磁盘模式的类型。 如果指定 如果指定 如果指定 选择
|
|
要使用的现有磁盘映像。 文件名必须已存在于数据存储中。 以 |
|
磁盘存储大小。 请指定存储单位,如 [kb、mb、gb、tb]。 |
|
磁盘存储大小(以 gb 为单位)。 |
|
磁盘存储大小(以 kb 为单位)。 |
|
磁盘存储大小(以 mb 为单位)。 |
|
磁盘存储大小(以 tb 为单位)。 |
|
磁盘的类型。 如果未指定,则磁盘类型在克隆时从源 VM 或模板继承,否则为厚磁盘,不进行急切置零。 选择
|
|
磁盘单元号。 SCSI 控制器的有效值范围为 0 到 15,但 7 除外。 NVME 控制器的有效值范围为 0 到 14。 SATA 控制器的有效值范围为 0 到 29。 使用多种类型的磁盘控制器和磁盘创建或重新配置 VM 时,需要 创建新的 VM 时, |
|
管理虚拟机加密设置 默认值: |
|
控制容错复制的加密 选择
|
|
控制使用 vmotion 进行实时迁移的加密 选择
|
|
目标文件夹,用于查找现有虚拟机或创建新虚拟机的绝对路径。 文件夹应包含数据中心。ESXi 的数据中心为 ha-datacenter。 如果找到多个同名计算机,则此参数用于标识 虚拟机的唯一性。 示例 文件夹:/ha-datacenter/vm 文件夹:ha-datacenter/vm 文件夹:/datacenter1/vm 文件夹:datacenter1/vm 文件夹:/datacenter1/vm/folder1 文件夹:datacenter1/vm/folder1 文件夹:/folder1/datacenter1/vm 文件夹:folder1/datacenter1/vm 文件夹:/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 文档以了解正确的虚拟机硬件版本。 不正确的硬件版本可能导致部署失败。如果硬件版本已等于给定的版本。 |
|
从硬件版本 14 开始,在 ESXi 6.7 及更高版本上为 Windows 启用基于虚拟化的安全功能。 支持的客户机操作系统为 Windows 10 64 位、Windows Server 2016、Windows Server 2019 及更高版本。 虚拟机的固件必须为 EFI,并且必须启用安全启动。 基于虚拟化的安全取决于嵌套虚拟化和 Intel 定向 I/O 虚拟化技术。 在不支持的 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(如果已知),这是 VMware 的唯一标识符。 如果未提供 如果虚拟机不存在,则会忽略此参数。 请注意,在虚拟机创建时,将忽略提供的 UUID,因为 VMware 会在内部创建 UUID。 |
|
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 进行 Windows VM (取决于 ‘guest_id’ 参数是否匹配 ‘win’) 以及 PyVmomi。
为了更改虚拟机的参数(例如 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
返回值
通用返回值记录在这里,以下是此模块特有的字段
键 |
描述 |
---|---|
关于新虚拟机的元数据 返回: 总是 示例: |