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
,包含这两个虚拟机 - myvm1
和 myvm2
。该角色还会创建清单组 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-infra
、oVirt.vm-infra
和 ovirt-vm-infra
。
您可以使用任何这些名称。本文件及该仓库中的示例使用名称 ovirt.vm-infra
。
oVirt.vm-infra
和 ovirt-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 地址之间的等待时间(秒)。 |
vms
和 profile
变量可以包含以下属性,请注意,如果在 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_init 或 sysprep 字典中的 host_name 之前优先。 |
lease | UNDEF | 此虚拟机租约所在的存储域名称。 |
root_password | UNDEF | 虚拟机的根密码。此参数用于向后兼容,并在 cloud_init 或 sysprep 字典中的 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 | 应用于启动的引导设备列表。有效项为 cdrom 、hd 、network 。 |
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 | 指定磁盘的格式。
|
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 |
|
host_rule | UNDEF |
|
hosts | UNDEF | 指定给此组的主机名称列表。 |
name | UNDEF (必需) | 亲和组的名称。 |
state | UNDEF | 该组是否应存在或不存在。 |
vm_enforcing | false |
|
vm_rule | UNDEF |
|
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
许可证
Apache 许可证 2.0