t2d.ansible_role_libvirt_vm
Libvirt 虚拟机
该角色在 KVM 虚拟机监控器上配置和创建(或销毁)虚拟机。
要求
主机应启用虚拟化技术(VT),并应预先配置 libvirt/KVM。
角色变量
libvirt_vm_default_console_log_dir
:存储虚拟机控制台日志的默认目录,如果未指定虚拟机特定的日志文件路径。默认值为 "/var/log/libvirt/qemu/"。libvirt_vm_image_cache_path
:缓存下载图像的目录。默认值为 "/tmp/"。libvirt_volume_default_images_path
:存储实例图像的目录。默认值为 '/var/lib/libvirt/images'。libvirt_volume_default_type
:实例使用的后备卷的类型。默认值为volume
。libvirt_volume_default_format
:角色创建的卷的格式,默认值为qcow2
。libvirt_volume_default_device
:控制设备在客户操作系统中的显示方式。默认值为disk
。libvirt_vm_engine
:虚拟化引擎。如果未设置,角色将尝试自动检测要使用的最佳引擎。libvirt_vm_emulator
:模拟器二进制文件的路径。如果未设置,角色将尝试自动检测要使用的正确模拟器。libvirt_cpu_mode_default
:如果libvirt_cpu_mode
或vm.cpu_mode
未定义,则为默认 CPU 模式。libvirt_vm_arch
:CPU架构,默认值为x86_64
。libvirt_vm_uri
:覆盖 libvirt 连接 URI。有关更多细节,请参见 libvirt 文档。libvirt_vm_virsh_default_env
:包含在此字典中的变量会在执行 virsh 命令时添加到环境中。libvirt_vm_clock_offset
:如果定义,实例的时钟偏移设置为提供的值。当未定义时,同步设置为localtime
。libvirt_vms
:要创建/销毁的虚拟机列表。每台虚拟机可以有以下属性:state
:设置为present
以创建或absent
以销毁虚拟机。默认值为present
。name
:要分配给虚拟机的名称。memory_mb
:分配给虚拟机的内存,以兆字节为单位。vcpus
:分配给虚拟机的虚拟 CPU 核心数量。machine
:虚拟机类型。如果libvirt_vm_engine
为kvm
,默认值为None
,否则为pc-1.0
。cpu_mode
:虚拟机 CPU 模式。如果libvirt_vm_engine
为kvm
,默认值为host-passthrough
,否则为host-model
。可以设置为 none 不配置 CPU 模式。clock_offset
:覆盖在libvirt_vm_clock_offset
中设置的默认值。enable_vnc
:如果为 true,则在本地主机上启用 VNC 监听,以便与 VirtManager 和类似工具配合使用。volumes
:附加到虚拟机的卷列表。每个卷通过以下字典定义:pool
:应分配卷的存储池的名称或 UUID。name
:与要创建的卷关联的名称;对于file
类型的卷,如果希望创建的卷有扩展名,请包含扩展名。file_path
:file
类型卷的图像应放置的位置;默认为libvirt_volume_default_images_path
。device
:disk
或cdrom
。capacity
:卷容量(可以以 M,G,T 或 MB,GB,TB 等为后缀)(当类型为disk
时必需)。format
:选项包括raw
、qcow2
、vmdk
。有关完整范围,请参见man virsh
。默认值为qcow2
。image
:(可选)用于初始化卷的图像的 URL(完整拷贝)。backing_image
:(可选)假定已经在同一池中的后备卷的名称(写时复制)。image
和backing_image
是互斥选项。target
:(可选)手动影响卷的类型和顺序。
interfaces
:附加到虚拟机的网络接口列表。每个网络接口通过以下字典定义:type
:接口类型。可能的值:network
:将接口连接到命名的 Libvirt 虚拟网络。这是默认值。direct
:将接口直接连接到主机的一个物理接口,使用macvtap
驱动程序。
network
:接口应连接到的网络名称。如果和仅当接口type
为network
时,必须指定。mac
:虚拟实例的“硬件”地址,如果缺失,则创建一个。source
:定义此虚拟机接口应连接到的主机接口的字典。如果和仅当接口type
为direct
时,必须指定。包括以下属性:dev
:此虚拟机接口应连接到的主机接口的名称。mode
:选项包括vepa
、bridge
、private
和passthrough
。有关更多细节,请参见man virsh
。默认值为vepa
。
console_log_enabled
:如果为true
,则将控制台输出记录到console_log_path
指定的文件,而不是记录到 PTY。如果为false
,则将终端输出定向到串行端口 0 上的 PTY。默认值为false
。console_log_path
:控制台日志文件的路径。默认值为{{ libvirt_vm_default_console_log_dir }}/{{ name }}-console.log
。start
:定义后是否立即启动虚拟机。默认值为true
。autostart
:主机启动时是否启动虚拟机。默认值为true
。xml_file
:可选提供修改的 XML 模板。基于默认的vm.xml.j2
模板进行定制,以包括角色使用的预期 jinja 表达式。
注意:以下变量已弃用:libvirt_vm_state
、libvirt_vm_name
、libvirt_vm_memory_mb
、libvirt_vm_vcpus
、libvirt_vm_engine
、libvirt_vm_machine
、libvirt_vm_cpu_mode
、libvirt_vm_volumes
、libvirt_vm_interfaces
和 libvirt_vm_console_log_path
。如果变量 libvirt_vms
未设置,其默认值将是一个包含使用这些弃用变量的虚拟机规范的单例列表。
依赖关系
如果使用 qcow2 格式的驱动程序,必需使用 qemu-img(在 qemu-utils 包中)。
示例剧本
---
- name: 创建虚拟机
hosts: hypervisor
roles:
- role: stackhpc.libvirt-vm
libvirt_vms:
- state: present
name: 'vm1'
memory_mb: 512
vcpus: 2
volumes:
- name: 'data1'
device: 'disk'
format: 'qcow2'
capacity: '400GB'
pool: 'my-pool'
- name: 'debian-10.2.0-amd64-netinst.iso'
type: 'file'
device: 'cdrom'
format: 'raw'
target: 'hda' # ide总线上的第一个设备
interfaces:
- network: 'br-datacentre'
- state: present
name: 'vm2'
memory_mb: 1024
vcpus: 1
volumes:
- name: 'data2'
device: 'disk'
format: 'qcow2'
capacity: '200GB'
pool: 'my-pool'
- name: 'filestore'
type: 'file'
file_path: '/srv/cloud/images'
capacity: '900GB'
interfaces:
- type: 'direct'
source:
dev: 'eth123'
mode: 'private'
- type: 'bridge'
source:
dev: 'br-datacentre'
作者信息
- Mark Goddard (mark@stackhpc.com)