community.general.xenserver_guest 模块 – 管理在 Citrix Hypervisor/XenServer 主机或池上运行的虚拟机

注意

此模块是 community.general 集合(版本 10.1.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general。您需要进一步的要求才能使用此模块,请参阅 要求 获取详细信息。

要在 playbook 中使用它,请指定:community.general.xenserver_guest

概要

  • 此模块可用于从模板或其他虚拟机创建新的虚拟机,修改各种虚拟机组件(如网络和磁盘),重命名虚拟机以及删除具有关联组件的虚拟机。

要求

以下要求需要在执行此模块的主机上满足。

  • XenAPI

参数

参数

注释

cdrom

字典

虚拟机的 CD-ROM 配置。

所有参数都区分大小写。

iso_name

字符串

来自 XenServer ISO 库之一的 ISO 映像的文件名(暗示 cdrom.type=iso)。

如果 cdrom.type 设置为 iso,则为必需。

type

字符串

CD-ROM 的类型。使用 none,CD-ROM 设备将存在但为空。

选择

  • "none"

  • "iso"

custom_params

列表 / 元素=字典

定义要在虚拟机上设置的自定义虚拟机参数列表。

对于熟悉通过 xe CLI 管理虚拟机参数的高级用户非常有用。

自定义值对象采用两个字段 custom_params[].keycustom_params[].value(请参阅下面的示例)。

key

字符串 / 必需

虚拟机参数名称。

value

任意 / 必需

虚拟机参数值。

disks

别名:disk

列表 / 元素=字典

要添加到虚拟机的磁盘列表。

所有参数都区分大小写。

不支持删除或分离虚拟机的现有磁盘。

新磁盘需要指定 disks[].sizedisks[].size_[tb,gb,mb,kb,b] 参数之一。

需要关闭虚拟机才能重新配置磁盘大小。

name

别名:name_label

字符串

磁盘名称。

name_desc

字符串

磁盘描述。

size

字符串

带有单位的磁盘大小。单位必须是:bkbmbgbtb。需要关闭虚拟机才能重新配置此参数。

如果未指定单位,则假定大小以字节为单位。

size_b

字符串

磁盘大小(以字节为单位)。

size_gb

字符串

磁盘大小(以千兆字节为单位)。

size_kb

字符串

磁盘大小(以千字节为单位)。

size_mb

字符串

磁盘大小(以兆字节为单位)。

size_tb

字符串

磁盘大小(以太字节为单位)。

sr

字符串

在其上创建磁盘的存储库。如果未指定,将使用默认 SR。不能用于将磁盘移动到其他 SR。

sr_uuid

字符串

在其上创建磁盘的 SR 的 UUID。如果 SR 名称不唯一,则使用此参数。

folder

字符串

虚拟机的目标文件夹。

此参数区分大小写。

示例

folder: /folder1/folder2

force

布尔值

忽略警告并完成操作。

此参数对于在运行状态下删除虚拟机或重新配置需要关闭虚拟机的虚拟机参数非常有用。

选择

  • false ← (默认)

  • true

hardware

字典

管理虚拟机的硬件参数。需要关闭虚拟机才能重新配置这些参数。

memory_mb

整数

内存量(以 MB 为单位)。

num_cpu_cores_per_socket

整数

每个插槽的核心数。 hardware.num_cpus 必须是 hardware.num_cpu_cores_per_socket 的倍数。

num_cpus

整数

CPU 的数量。

home_server

字符串

将作为虚拟机主服务器的 XenServer 主机的名称。

此参数区分大小写。

hostname

别名: host, pool

字符串

XenServer 主机或 XenServer 池主机的的主机名或 IP 地址。

如果在任务中未指定该值,则将改为使用环境变量 XENSERVER_HOST 的值。

默认值: "localhost"

is_template

布尔值

将虚拟机转换为模板。

选择

  • false ← (默认)

  • true

linked_clone

布尔值

是否从模板、现有虚拟机或快照创建链接克隆。 如果否,将创建完整副本。

这等效于 XenCenter 中的 使用存储级快速磁盘克隆 选项。

选择

  • false ← (默认)

  • true

name

别名:name_label

字符串

要操作的虚拟机的名称。

在 XenServer 上运行的虚拟机不一定具有唯一名称。 如果找到多个同名虚拟机,该模块将失败。

如果存在多个同名虚拟机,请使用 uuid 来唯一指定要管理的虚拟机。

此参数区分大小写。

name_desc

字符串

虚拟机描述。

networks

别名: network

列表 / 元素=字典

网络列表(按网卡顺序排列)。

所有参数都区分大小写。

对于新的网卡,名称是必需的。在所有情况下,其他参数都是可选的。

gateway

字符串

静态 IPv4 网关。

gateway6

字符串

静态 IPv6 网关。

ip

字符串

静态 IPv4 地址(意味着 networks[].type=static)。 可以使用格式 <IPv4 地址>/<前缀>,而不用 netmask,从而包含前缀。

ip6

字符串

静态 IPv6 地址(意味着 networks[].type6=static),格式为 <IPv6 地址>/<前缀>

mac

字符串

自定义接口的 MAC 地址。

name

别名:name_label

字符串

要将网络接口附加到的 XenServer 网络的名称。

netmask

字符串

如果未指定前缀,则 networks[].ip 所需的静态 IPv4 子网掩码。

type

字符串

IPv4 分配类型。值 none 表示操作系统默认的任何类型。

在某些操作系统上,它可能是 DHCP 配置(例如 Windows)或未配置的接口(例如 Linux)。

选择

  • "none"

  • "dhcp"

  • "static"

type6

字符串

IPv6 分配类型。值 none 表示操作系统默认的任何类型。

选择

  • "none"

  • "dhcp"

  • "static"

password

别名: pass, pwd

字符串

用于连接 XenServer 的密码。

如果在任务中未指定该值,则将改为使用环境变量 XENSERVER_PASSWORD 的值。

state

字符串

指定虚拟机应处于的状态。

如果 state 设置为 present 并且虚拟机存在,请确保虚拟机配置符合给定的参数。

如果 state 设置为 present 并且虚拟机不存在,则使用给定的参数部署虚拟机。

如果 state 设置为 absent 并且虚拟机存在,则将删除虚拟机及其关联的组件。

如果 state 设置为 poweredon 并且虚拟机不存在,则将使用给定的参数部署虚拟机并自动启动。

选择

  • "present" ← (默认)

  • "absent"

  • "poweredon"

state_change_timeout

整数

默认情况下,如果 wait_for_ip_address=true,模块将无限期等待虚拟机获取 IP 地址。

如果此参数设置为正值,则模块将等待指定秒数以进行状态更改。

如果超时,模块将生成错误消息。

默认值: 0

template

别名: template_src

字符串

应使用其创建虚拟机的模板、现有虚拟机(必须关闭)或快照的名称。

XenServer 上的模板/虚拟机/快照不一定具有唯一名称。如果找到多个同名模板,该模块将失败。

如果存在多个同名模板/虚拟机/快照,请使用 template_uuid 来唯一指定源模板。

如果虚拟机已存在,将忽略此设置。

此参数区分大小写。

template_uuid

字符串

应使用其创建虚拟机的模板、现有虚拟机或快照的 UUID。

如果模板名称不唯一,则它是必需的。

username

别名: admin, user

字符串

用于连接 XenServer 的用户名。

如果在任务中未指定该值,则将改为使用环境变量 XENSERVER_USER 的值。

默认值: "root"

uuid

字符串

如果已知,要管理的虚拟机的 UUID。 这是 XenServer 的唯一标识符。

如果名称不唯一,则它是必需的。

请注意,在创建虚拟机时,将忽略提供的 UUID,因为 XenServer 在内部创建 UUID。

validate_certs

布尔值

当 SSL 证书无效时允许连接。 当证书不受信任时,设置为 false

如果在任务中未指定该值,则将改为使用环境变量 XENSERVER_VALIDATE_CERTS 的值。

选择

  • false

  • true ← (默认)

wait_for_ip_address

布尔值

等待 XenServer 检测到虚拟机的 IP 地址。 如果 state 设置为 absent,则忽略此参数。

这需要预先在虚拟机上安装 XenServer 工具才能正常工作。

选择

  • false ← (默认)

  • true

属性

属性

支持

描述

check_mode

支持: 完全

可以在 check_mode 下运行,并在不修改目标的情况下返回更改的状态预测。

diff_mode

支持:

当处于 diff 模式时,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息。

备注

注意

  • XenServer 的最低支持版本是 5.6。

  • 该模块已在 XenServer 6.5、7.1、7.2、7.6、Citrix Hypervisor 8.0、XCP-ng 7.6 和 8.0 上进行了测试。

  • 要获取 XenAPI Python 库,只需在您的 Ansible 控制节点上运行 pip install XenAPI。该库也可以在 Citrix Hypervisor/XenServer SDK(可从 Citrix 网站下载)中找到。将 SDK 中的 XenAPI.py 文件复制到 Ansible 控制节点上的 Python site-packages 中即可使用。最新版本的库也可以从 GitHub 获取:https://raw.githubusercontent.com/xapi-project/xen-api/master/scripts/examples/python/XenAPI/XenAPI.py

  • 如果在 hostname 中未指定 scheme,模块默认使用 http://,因为 https:// 在大多数设置中存在问题。请确保在受信任的环境中访问 XenServer 主机,或显式使用 https:// scheme。

  • 要为 hostname 使用 https:// scheme,您必须将主机证书导入到您的操作系统证书存储中,或者使用 validate_certs=false,这需要 XenServer 7.2 SDK 或更高版本的 XenAPI 库以及 Python 2.7.9 或更高版本。

  • 在客户操作系统内部进行网络配置,通过使用 networks[].type, networks[].ip, networks[].gateway 等参数,在 XenServer 7.0 或更高版本上,对于 Windows 客户机,通过使用官方的 XenServer Guest agent 支持网络配置来实现。该模块将尝试检测是否提供此类支持并加以利用,否则它将使用通过 xenstore 进行配置的自定义方法。由于 XenServer Guest agent 仅支持 None 和 Static 类型的网络配置,其中 None 表示 DHCP 配置的接口,networks[].typenetworks[].type6 的值 nonedhcp 具有相同的效果。更多信息请参考:https://www.citrix.com/community/citrix-developer/citrix-hypervisor-developer/citrix-hypervisor-developing-products/citrix-hypervisor-staticip.html

  • 在没有官方支持在客户操作系统内部进行网络配置的平台上,网络参数将被写入 xenstore vm-data/networks/<vif_device> 键。可以使用 \*nix 客户机上的 xenstore lsxenstore read 工具或通过 Windows 客户机上的 WMI 接口来检查这些参数。它们也可以在模块返回的 VM facts instance.xenstore_data 键中找到。用户需要自行实现启动时脚本或自定义代理,以便从 xenstore 读取参数并使用给定的参数配置网络。请注意,为了使 xenstore 数据在客户机内部可用,需要重新启动 VM,因此如果任何参数发生更改,模块将需要重新启动 VM。这是 XenAPI 和 xenstore 的限制。考虑到这些限制,通过 xenstore 进行网络配置对于引导新部署的 VM 最有用,而对于重新配置现有 VM 的作用要小得多。更多信息请参考:https://support.citrix.com/article/CTX226713

示例

- name: Create a VM from a template
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    folder: /testvms
    name: testvm_2
    state: poweredon
    template: CentOS 7
    disks:
    - size_gb: 10
      sr: my_sr
    hardware:
      num_cpus: 6
      num_cpu_cores_per_socket: 3
      memory_mb: 512
    cdrom:
      type: iso
      iso_name: guest-tools.iso
    networks:
    - name: VM Network
      mac: aa:bb:dd:aa:00:14
    wait_for_ip_address: true
  delegate_to: localhost
  register: deploy

- name: Create a VM template
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    folder: /testvms
    name: testvm_6
    is_template: true
    disk:
    - size_gb: 10
      sr: my_sr
    hardware:
      memory_mb: 512
      num_cpus: 1
  delegate_to: localhost
  register: deploy

- name: Rename a VM (requires the VM's UUID)
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    uuid: 421e4592-c069-924d-ce20-7e7533fab926
    name: new_name
    state: present
  delegate_to: localhost

- name: Remove a VM by UUID
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    uuid: 421e4592-c069-924d-ce20-7e7533fab926
    state: absent
  delegate_to: localhost

- name: Modify custom params (boot order)
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    name: testvm_8
    state: present
    custom_params:
    - key: HVM_boot_params
      value: { "order": "ndc" }
  delegate_to: localhost

- name: Customize network parameters
  community.general.xenserver_guest:
    hostname: "{{ xenserver_hostname }}"
    username: "{{ xenserver_username }}"
    password: "{{ xenserver_password }}"
    name: testvm_10
    networks:
    - name: VM Network
      ip: 192.168.1.100/24
      gateway: 192.168.1.1
    - type: dhcp
  delegate_to: localhost

返回值

常见的返回值记录在这里,以下是此模块独有的字段

描述

changes

列表 / 元素=字符串

检测到或对 VM 所做的更改

返回: 总是

示例: [{"hardware": ["num_cpus"]}, {"disks_changed": [[], ["size"]]}, {"disks_new": [{"name": "new-disk", "name_desc": "", "position": 2, "size_gb": "4", "vbd_userdevice": "2"}]}, {"cdrom": ["type", "iso_name"]}, {"networks_changed": [["mac"]]}, {"networks_new": [{"name": "Pool-wide network associated with eth2", "position": 1, "vif_device": "1"}]}, "need_poweredoff"]

instance

字典

关于 VM 的元数据

返回: 总是

示例: {"cdrom": {"type": "none"}, "customization_agent": "native", "disks": [{"name": "testvm_11-0", "name_desc": "", "os_device": "xvda", "size": 42949672960, "sr": "Local storage", "sr_uuid": "0af1245e-bdb0-ba33-1446-57a962ec4075", "vbd_userdevice": "0"}, {"name": "testvm_11-1", "name_desc": "", "os_device": "xvdb", "size": 42949672960, "sr": "Local storage", "sr_uuid": "0af1245e-bdb0-ba33-1446-57a962ec4075", "vbd_userdevice": "1"}], "domid": "56", "folder": "", "hardware": {"memory_mb": 8192, "num_cpu_cores_per_socket": 2, "num_cpus": 4}, "home_server": "", "is_template": false, "name": "testvm_11", "name_desc": "", "networks": [{"gateway": "192.168.0.254", "gateway6": "fc00::fffe", "ip": "192.168.0.200", "ip6": ["fe80:0000:0000:0000:e9cb:625a:32c5:c291", "fc00:0000:0000:0000:0000:0000:0000:0001"], "mac": "ba:91:3a:48:20:76", "mtu": "1500", "name": "Pool-wide network associated with eth1", "netmask": "255.255.255.128", "prefix": "25", "prefix6": "64", "vif_device": "0"}], "other_config": {"base_template_name": "Windows Server 2016 (64-bit)", "import_task": "OpaqueRef:e43eb71c-45d6-5351-09ff-96e4fb7d0fa5", "install-methods": "cdrom", "instant": "true", "mac_seed": "f83e8d8a-cfdc-b105-b054-ef5cb416b77e"}, "platform": {"acpi": "1", "apic": "true", "cores-per-socket": "2", "device_id": "0002", "hpet": "true", "nx": "true", "pae": "true", "timeoffset": "-25200", "vga": "std", "videoram": "8", "viridian": "true", "viridian_reference_tsc": "true", "viridian_time_ref_count": "true"}, "state": "poweredon", "uuid": "e3c0b2d5-5f05-424e-479c-d3df8b3e7cda", "xenstore_data": {"vm-data": ""}}

作者

  • Bojan Vitnik (@bvitnik)