ovirt.vm-infra

oVirt虚拟机基础设施

此角色已迁移至 oVirt Ansible Collection,请使用那里的最新版本。该仓库现在是只读的,不再用于活跃开发。

ovirt.vm-infra 角色管理 oVirt 中的虚拟机基础设施。 该角色还会创建已创建虚拟机的清单,如果将wait_for_ip设置为true且虚拟机的状态为running,则会包含虚拟机。 所有定义的虚拟机都是 ovirt_vm 清单组的一部分。 如果虚拟机分配了任何标签,该角色还会创建 ovirt_tag_{tag_name} 组,并将所有带该标签的虚拟机放入该清单组。

请考虑以下变量结构:

vms:
  - name: myvm1
    tag: mytag1
    profile: myprofile

  - name: myvm2
    tag: mytag2
    profile: myprofile

该角色将创建清单组 ovirt_vm,包含这两个虚拟机 - myvm1myvm2。该角色还会创建清单组 ovirt_tag_mytag1,其中包含虚拟机 myvm1,以及清单组 ovirt_tag_mytag2,其中包含虚拟机 myvm2

注意

请注意,从 Ansible Galaxy 安装此角色时,您需要运行以下命令:

$ ansible-galaxy install ovirt.vm-infra

这将下载该角色到您在命令行中指定的同名目录,在本例中为 ovirt.vm-infra。但请注意,它是区分大小写的,因此如果您指定例如 OVIRT.vm-infra,它将下载相同的角色,但会将其添加到名为 OVIRT.vm-infra 的目录中。在这种情况下,您将来需要以大写前缀引用该角色。因此,请小心您在命令行中指定的角色名称。

至于 RPM 安装,我们支持三个旧名称 - ovirt.vm-infraoVirt.vm-infraovirt-vm-infra。 您可以使用任何这些名称。本文件及该仓库中的示例使用名称 ovirt.vm-infraoVirt.vm-infraovirt-vm-infra 角色名称已被弃用。

要求

  • Ansible 版本 2.9 或更高
  • Python SDK 版本 4.3 或更高
  • python3-jmespath 或 python2-jmespath

限制

  • 不支持 Ansible 检查模式(干运行)。

角色变量

名称 默认值
vms UNDEF 虚拟机规格的字典列表。
affinity_groups UNDEF 亲和组规格的字典列表。
wait_for_ip false 如果为 true,playbook 将等待虚拟机报告的 IP 地址。
wait_for_ip_version v4 指定应等待的 IP 版本。可以是 v4 或 v6。
wait_for_ip_range 0.0.0.0/0 指定虚拟机 IP 的 CIDR 范围。只适用于 IPv4。
debug_vm_create false 如果为 true,记录正在创建的虚拟机的任务。日志可能包含密码。
vm_infra_create_single_timeout 180 等待虚拟机创建和启动的秒数(如果状态为运行)。
vm_infra_create_poll_interval 15 轮询间隔。检查虚拟机状态之间的等待时间(秒)。
vm_infra_create_all_timeout vm_infra_create_single_timeout * (vms.length) 等待所有虚拟机被创建/启动的总时间。
vm_infra_wait_for_ip_retries 5 检查虚拟机是否报告其 IP 地址的重试次数。
vm_infra_wait_for_ip_delay 5 IP 地址的轮询间隔。检查虚拟机报告 IP 地址之间的等待时间(秒)。

vmsprofile 变量可以包含以下属性,请注意,如果在 vms 中定义了相同的变量,则 vms 中的值具有优先权:

名称 默认值
name UNDEF 要创建的虚拟机名称。
tag UNDEF 要分配给虚拟机的标签名称。只有管理员用户可以使用此属性。
cloud_init UNDEF 使用 cloud-init 进行类 Unix 虚拟机初始化的字典。请参见下面的 cloud_init 部分了解更详细的描述。
cloud_init_nics UNDEF 代表要由 cloud-init 设置的网络接口的字典列表。请参见下面的 cloud_init_nics 部分了解更详细的描述。
sysprep UNDEF 使用 sysprep 进行 Windows 虚拟机初始化的字典。请参见下面的 sysprep 部分了解更详细的描述。
profile UNDEF 指定虚拟机硬件的字典。请参见下表。
state present 虚拟机应该停止、存在还是运行。此值优先于 profile 中的状态值。
nics UNDEF 指定虚拟机 NIC 的字典列表。请参见下文了解更详细的描述。
cluster UNDEF 将创建虚拟机的集群名称。
clone No 如果是,则创建的虚拟机的磁盘将被克隆,并与模板独立。 只有在状态为运行或存在且虚拟机之前不存在时此参数才会使用。
template 虚拟机应基于的模板名称。
template_version UNDEF 将用于 VM 的模板版本号。默认情况下将使用最新可用的模板版本。
memory UNDEF 虚拟机的内存大小。
memory_max UNDEF 虚拟机的内存上限,可以进行内存热插拔。
memory_guaranteed UNDEF 虚拟机的最低保证内存大小。前缀使用 IEC 60027-2 标准(例如 1GiB,1024MiB)。memory_guaranteed 参数不能低于 memory 参数。
cores UNDEF 虚拟机使用的 CPU 核心数量。
sockets UNDEF 虚拟机的虚拟 CPU 插槽数量。
cpu_shares UNDEF 为此虚拟机设置 CPU 共享。
cpu_threads UNDEF 为此虚拟机设置 CPU 线程。
disks UNDEF 指定额外虚拟机磁盘的字典列表。请参见下文以获取更详细的描述。
nics UNDEF 指定虚拟机 NIC 的字典列表。请参见下文以获取更详细的描述。
custom_properties UNDEF 发送到 VDSM 用于配置各种钩子的属性。
自定义属性是一系列字典,可以包含以下值:
name - 自定义属性的名称。例如:hugepages,vhost,sap_agent 等。
regexp - 要为自定义属性设置的正则表达式。
value - 要为自定义属性设置的值。
high_availability UNDEF 节点是否应设置为高可用。
high_availability_priority UNDEF 表示虚拟机在运行和迁移队列中的优先级。优先级较高的虚拟机会在优先级较低的虚拟机之前启动和迁移。值为0到100之间的整数。值越高,优先级越高。如果不传递值,默认值由 oVirt/RHV 引擎设置。
io_threads UNDEF 虚拟机使用的 IO 线程数量。0 表示禁用 IO 线程。
description UNDEF 虚拟机的描述。
operating_system UNDEF 虚拟机的操作系统。例如:rhel_7x64
type UNDEF 虚拟机的类型。可能值:desktop、server 或 high_performance
graphical_console UNDEF 将图形控制台分配给虚拟机。
图形控制台是一个字典,可以包含以下值:
headless_mode - 如果为 true,则禁用该虚拟机的图形控制台。
protocol - 'VNC','Spice' 或两者。
storage_domain UNDEF 所有虚拟机磁盘应创建的存储域名称。仅在提供模板时考虑。
state present 虚拟机应停止、存在还是运行。
ssh_key UNDEF 要部署到虚拟机的 SSH 密钥。此参数用于向后兼容,并在 cloud_init 字典中优先于 authorized_ssh_keys
domain UNDEF 虚拟机的域。此参数用于向后兼容,并在 cloud_initsysprep 字典中的 host_name 之前优先。
lease UNDEF 此虚拟机租约所在的存储域名称。
root_password UNDEF 虚拟机的根密码。此参数用于向后兼容,并在 cloud_initsysprep 字典中的 root_password 之前优先。
host UNDEF 如果需要将 cpu_mode 设置为 host_passthrough,则需要使用此参数定义要使用的主机,同时将 placement_policy 设置为 pinned。
cpu_mode UNDEF 虚拟机的 CPU 模式。可以是以下之一:host_passthrough、host_model 或 custom。
placement_policy UNDEF 虚拟机的放置策略配置。
boot_devices UNDEF 应用于启动的引导设备列表。有效项为 cdromhdnetwork
serial_console UNDEF 如果为 true 启用 VirtIO 串行控制台,false 则禁用。默认由 oVirt/RHV 引擎选择。
serial_policy UNDEF 为虚拟机指定串行号策略。支持以下选项。
vm - 设置虚拟机的 UUID 作为其序列号。
host - 设置主机的 UUID 作为虚拟机的序列号。
custom - 允许您在 serial_policy_value 中指定自定义序列号。
serial_policy_value UNDEF 允许您指定自定义序列号。此参数仅在 serial_policy 为 custom 时使用。
comment UNDEF 虚拟机的注释。

profile 字典中的 disks 列表中的项可以包含以下属性:

名称 默认值
size UNDEF 附加磁盘的大小。
name UNDEF 附加磁盘的名称。
id UNDEF 磁盘的 ID。如果您传递磁盘的 ID 和名称,则磁盘将根据 ID 查找,并在名称与传递的名称不同的情况下更新名称。
storage_domain UNDEF 磁盘应创建的存储域名称。
interface UNDEF 磁盘的接口。
name_prefix True 如果为 true,虚拟机的名称将用作磁盘名称的前缀。如果为 false,则仅使用磁盘的名称作为磁盘名称 - 在从模板创建具有自定义磁盘大小的虚拟机时可能很有用。
format UNDEF 指定磁盘的格式。
  • cow - 如果设置,磁盘将以稀疏磁盘创建,因此空间将在需要时为该卷分配。这种格式也称为薄配置磁盘。
  • raw - 如果设置,则会立即分配磁盘空间。这种格式也称为预分配磁盘。
bootable UNDEF 如果磁盘应可启动,则为 True。
activate UNDEF 如果磁盘应被激活,则为 True。

profile 字典中的 nics 列表中的项可以包含以下属性:

名称 默认值
name UNDEF 网络接口的名称。
interface UNDEF 网络接口的类型。
mac_address UNDEF 网络接口的自定义 MAC 地址,默认为从 MAC 池获取。
network UNDEF 虚拟机网络接口应使用的逻辑网络。如果未指定网络,则使用空网络。
profile UNDEF 附加到虚拟机网络接口的虚拟网络接口配置文件。

affinity_groups 列表可以包含以下属性:

名称 默认值
cluster UNDEF (必需) 亲和组的集群名称。
description UNDEF 人类可读的描述。
host_enforcing false
  • true - 如果主机不满足 host_rule,则虚拟机无法启动。
  • false - 虚拟机将跟随 host_rule 软强制。
host_rule UNDEF
  • positive - 此组中的虚拟机必须在此主机上运行。
  • negative - 此组中的虚拟机不得在此主机上运行
hosts UNDEF 指定给此组的主机名称列表。
name UNDEF (必需) 亲和组的名称。
state UNDEF 该组是否应存在或不存在。
vm_enforcing false
  • true - 如果虚拟机无法满足 vm_rule,则无法启动。
  • false - 虚拟机将跟随 vm_rule 软强制。
vm_rule UNDEF
  • positive - 该组中的所有虚拟机尝试在同一主机上运行。
  • negative - 该组中的所有虚拟机尝试在不同主机上运行。
  • disabled - 此亲和组无效。
vms UNDEF 要分配给此亲和组的虚拟机列表。
wait true 如果为 true,该模块将等待所需状态。

affinity_labels 列表可以包含以下属性:

名称 默认值
cluster UNDEF (必需) 亲和标签组的集群名称。
hosts UNDEF 指定给此标签的主机名称列表。
name UNDEF (必需) 亲和标签的名称。
state UNDEF 该标签是否应存在或不存在。
vms UNDEF 要分配给此亲和标签的虚拟机列表。

cloud_init 字典可以包含以下属性:

名称 描述
host_name 部署时设置到虚拟机的主机名。
timezone 部署时设置到虚拟机的时区。
user_name 部署时用于设置虚拟机密码的用户名。
root_password 为 user_name 参数指定的用户设置的密码。默认设置为 root 用户。
authorized_ssh_keys 使用此 SSH 密钥登录虚拟机。
regenerate_ssh_keys 如果为 True,虚拟机上的 SSH 密钥将被重新生成。
custom_script 在虚拟机部署时将执行的 Cloud-init 脚本。此脚本将附加到由其他选项生成的 Cloud-init 脚本结尾。
dns_servers 要配置到虚拟机的 DNS 服务器。
dns_search 要配置到虚拟机的 DNS 搜索域。
nic_boot_protocol 设置虚拟机网络接口的启动协议。可以是 none、dhcp 或 static。
nic_ip_address 如果启动协议为静态,则将此 IP 地址设置到虚拟机的网络接口。
nic_netmask 如果启动协议为静态,则将此网络掩码设置到虚拟机的网络接口。
nic_gateway 如果启动协议为静态,则将此网关设置到虚拟机的网络接口。
nic_name 设置虚拟机的网络接口名称。
nic_on_boot 如果为 True,网络接口将在启动时设置为启用。

sysprep 字典可以包含以下属性:

名称 描述
host_name 部署时设置到虚拟机的主机名。
active_directory_ou 用于用户登录的活动目录组织单位。
org_name 要设置到 Windows 虚拟机的组织名称。
user_name 用于设置 Windows 虚拟机密码的用户名。
root_password 为 user_name 参数指定的用户设置的密码。默认设置为 root 用户。
windows_license_key 要设置到 Windows 虚拟机的许可证密钥。
input_locale Windows 虚拟机的输入本地化。
system_locale Windows 虚拟机的系统本地化。
ui_language Windows 虚拟机的界面语言。
domain 要设置到 Windows 虚拟机的域。
timezone 要设置到 Windows 虚拟机的时区。

cloud_init_nics 是代表由 cloud-init 设置的网络接口的字典列表。当用户需要通过 cloud-init 设置更多网络接口时使用。如果一个网络接口就足够,用户应使用 cloud_init nic_* 参数。cloud_init nic_* 参数与 cloud_init_nics 参数合并。字典可以包含以下值。

名称 描述
nic_boot_protocol 设置虚拟机网络接口的启动协议。可以是 none、dhcp 或 static。
nic_ip_address 如果启动协议为静态,则将此 IP 地址设置到虚拟机的网络接口。
nic_netmask 如果启动协议为静态,则将此网络掩码设置到虚拟机的网络接口。
nic_gateway 如果启动协议为静态,则将此网关设置到虚拟机的网络接口。
nic_name 设置虚拟机的网络接口名称。
nic_on_boot 如果为 True,网络接口将在启动时设置为启用。

依赖

无。

示例 Playbook

---
- name: oVirt 基础设施
  hosts: localhost
  connection: local
  gather_facts: false

  vars_files:
    # 包含使用 ansible-vault 加密的 `engine_password` 变量
    - passwords.yml

  vars:
    engine_fqdn: ovirt-engine.example.com
    engine_user: admin@internal
    engine_cafile: /etc/pki/ovirt-engine/ca.pem

    httpd_vm:
      cluster: production
      domain: example.com
      template: rhel7
      memory: 2GiB
      cores: 2
      ssh_key: ssh-rsa AAA...LGx user@fqdn
      disks:
        - size: 10GiB
          name: data
          storage_domain: mynfsstorage
          interface: virtio

    db_vm:
      cluster: production
      domain: example.com
      template: rhel7
      memory: 4GiB
      cores: 1
      ssh_key: ssh-rsa AAA...LGx user@fqdn
      disks:
        - size: 50GiB
          name: data
          storage_domain: mynfsstorage
          interface: virtio
      nics:
        - name: ovirtmgmt
          network: ovirtmgmt
          profile: ovirtmgmt

    vms:
      - name: postgresql-vm-0
        tag: postgresql_vm
        profile: "{{ db_vm }}"
      - name: postgresql-vm-1
        tag: postgresql_vm
        profile: "{{ db_vm }}"
      - name: apache-vm
        tag: httpd_vm
        profile: "{{ httpd_vm }}"

    affinity_groups:
      - name: db-ag
        cluster: production
        vm_enforcing: true
        vm_rule: negative
        vms:
          - postgresql-vm-0
          - postgresql-vm-1

  roles:
    - ovirt.vm-infra

下面的示例显示了如何在后续的 play 中使用 ovirt.vm-infra 角色创建的清单。

---
- name: 部署 apache 虚拟机
  hosts: localhost
  connection: local
  gather_facts: false

  vars_files:
    # 包含使用 ansible-vault 加密的 `engine_password` 变量
    - passwords.yml

  vars:
    wait_for_ip: true

    httpd_vm:
      cluster: production
      state: running
      domain: example.com
      template: rhel7
      memory: 2GiB
      cores: 2
      ssh_key: ssh-rsa AAA...LGx user@fqdn
      disks:
        - size: 10GiB
          name: data
          storage_domain: mynfsstorage
          interface: virtio

    vms:
      - name: apache-vm
        tag: apache
        profile: "{{ httpd_vm }}"

  roles:
    - ovirt.vm-infra

- name: 在虚拟机上部署 apache
  hosts: ovirt_tag_apache

  vars_files:
    - apache_vars.yml

  roles:
    - geerlingguy.apache

asciicast

许可证

Apache 许可证 2.0

关于项目

Role to manage virtual machine infrastructure in oVirt.

安装
ansible-galaxy install ovirt.vm-infra
许可证
apache-2.0
下载
65.4k
拥有者
Open Virtual Datacenter