# == Class: nova::compute::libvirt # # Install and manage nova-compute guests managed # by libvirt # # === Parameters: # # [*ensure_package*] # (optional) The state of nova packages # Defaults to 'present' # # [*virt_type*] # (optional) Libvirt domain type. Options are: kvm, lxc, qemu, parallels # Defaults to 'kvm' # # [*vncserver_listen*] # (optional) IP address on which instance vncservers should listen # Defaults to '127.0.0.1' # # [*migration_support*] # (optional) Whether to support virtual machine migration # Defaults to false # # [*cpu_mode*] # (optional) The libvirt CPU mode to configure. Possible values # include custom, host-model, none, host-passthrough. # Defaults to 'host-model' if virt_type is set to qemu or kvm, # otherwise defaults to 'none'. # # [*cpu_models*] # (optional) The named libvirt CPU models (see names listed in # /usr/share/libvirt/cpu_map.xml). Only has effect if # cpu_mode="custom" and virt_type="kvm|qemu". # Defaults to [] # # [*cpu_model_extra_flags*] # (optional) This allows specifying granular CPU feature flags when # specifying CPU models. Only has effect if cpu_mode is not set # to 'none'. # Defaults to undef # # [*cpu_power_management*] # (optional) Use libvirt to manage CPU cores performance # Defaults to $::os_service_default # # [*cpu_power_management_strategy*] # (optional) Tuning strategy to reduce CPU power consumption when unused. # Defaults to $::os_service_default # # [*cpu_power_governor_low*] # (optional) Governor to use in order to reduce CPU power consumption. # Defaults to $::os_service_default # # [*cpu_power_governor_high*] # (optional) Goernor to use in order to have best CPU performance. # Defaults to $::os_service_default # # [*snapshot_image_format*] # (optional) Format to save snapshots to. Some filesystems # have a preference and only operate on raw or qcow2 # Defaults to $facts['os_service_default'] # # [*snapshots_directory*] # (optional) Location where libvirt driver will store snapshots before # uploading them to image service # Defaults to $facts['os_service_default'] # # [*disk_cachemodes*] # (optional) A list of cachemodes for different disk types, e.g. # ["file=directsync", "block=none"] # Defaults to $facts['os_service_default'] # # [*hw_disk_discard*] # (optional) Discard option for nova managed disks. Need Libvirt(1.0.6) # Qemu1.5 (raw format) Qemu1.6(qcow2 format). # Defaults to $facts['os_service_default'] # # [*hw_machine_type*] # (optional) Option to specify a default machine type per host architecture. # Defaults to $facts['os_service_default'] # # [*sysinfo_serial*] # (optional) Option to specify a serial number entry generation method. # Defaults to $facts['os_service_default'] # # [*inject_password*] # (optional) Inject the admin password at boot time, without an agent. # Defaults to $facts['os_service_default'] # # [*inject_key*] # (optional) Inject the ssh public key at boot time. # Defaults to $facts['os_service_default'] # # [*inject_partition*] # (optional) The partition to inject to : -2 => disable, -1 => inspect # (libguestfs only), 0 => not partitioned, >0 => partition # number (integer value) # Defaults to $facts['os_service_default'] # # [*enabled_perf_events*] # (optional) This is a performance event list which could be used as monitor. # A string list. For example: ``enabled_perf_events = cmt, mbml, mbmt`` # The supported events list can be found in # https://libvirt.org/html/libvirt-libvirt-domain.html , # which you may need to search key words ``VIR_PERF_PARAM_*`` # Defaults to $facts['os_service_default'] # # [*device_detach_attempts*] # (optional) Maximum number of attempts the driver tries to detach a device # in libvirt. # Defaults to $facts['os_service_default'] # # [*device_detach_timeout*] # (optional) Maximum number of seconds the driver waits for the success or # the failure event from libvirt for a given device detach attempt before # it re-trigger the detach. # Defaults to $facts['os_service_default'] # # [*libvirt_service_name*] # (optional) libvirt service name. # Defaults to $::nova::params::libvirt_service_name # # [*virtlock_service_name*] # (optional) virtlock service name. # Defaults to $::nova::params::virtlock_service_name # # [*virtlog_service_name*] # (optional) virtlog service name. # Defaults to $::nova::params::virtlog_service_name # # [*compute_driver*] # (optional) Compute driver. # Defaults to 'libvirt.LibvirtDriver' # # [*preallocate_images*] # (optional) The image preallocation mode to use. # Valid values are 'none' or 'space'. # Defaults to $facts['os_service_default'] # # [*manage_libvirt_services*] # (optional) Whether or not deploy Libvirt services. # In the case of micro-services, set it to False and use # nova::compute::libvirt::services + hiera to select what # you actually want to deploy. # Defaults to true for backward compatibility. # # [*rx_queue_size*] # (optional) virtio-net rx queue size # Valid values are 256, 512, 1024 # Defaults to $facts['os_service_default'] # # [*tx_queue_size*] # (optional) virtio-net tx queue size # Valid values are 256, 512, 1024 # Defaults to $facts['os_service_default'] # # [*file_backed_memory*] # (optional) Available capacity in MiB for file-backed memory. # Defaults to $facts['os_service_default'] # # [*images_type*] # (optional) VM Images format. # Valid Values are raw, flat, qcow2, lvm, rbd, ploop, default # Defaults to $facts['os_service_default'] # # [*volume_use_multipath*] # (optional) Use multipath connection of the # iSCSI or FC volume. Volumes can be connected in the # LibVirt as multipath devices. # Defaults to $facts['os_service_default'] # # [*num_volume_scan_tries*] # (optional) Number of times to scan given storage protocol to find volume. # Defaults to $facts['os_service_default'] # # [*nfs_mount_options*] # (optional) Mount options passed to the NFS client. See section of the # nfs man page for details. # Defaults to $facts['os_service_default'] # # [*num_pcie_ports*] # (optional) The number of PCIe ports an instance will get. # Libvirt allows a custom number of PCIe ports (pcie-root-port controllers) a # target instance will get. Some will be used by default, rest will be available # for hotplug use. # Defaults to $facts['os_service_default'] # # [*mem_stats_period_seconds*] # (optional) A number of seconds to memory usage statistics period, # zero or negative value mean to disable memory usage statistics. # Defaults to $facts['os_service_default'] # # [*pmem_namespaces*] # (optional) Configure persistent memory(pmem) namespaces. These namespaces # must have been already created on the host. This config option is in the # following format: "$LABEL:$NSNAME[|$NSNAME][,$LABEL:$NSNAME[|$NSNAME]]" # $NSNAME is the name of the pmem namespace. $LABEL represents one resource # class, this is used to generate the resource class name as # CUSTOM_PMEM_NAMESPACE_$LABEL. # Defaults to $facts['os_service_default'] # # [*swtpm_enabled*] # (optional) Enable emulated Trusted Platform Module (TPM) for guests. # Defaults to $facts['os_service_default'] # # [*swtpm_user*] # (optional) Configure the user that the swtpm binary, used for emulated # Trusted Platform Module (TPM) functionality, runs as. # Defaults to $facts['os_service_default'] # # [*swtpm_group*] # (optional) Configure the group that the swtpm binary, used for emulated # Trusted Platform Module (TPM) functionality, runs as. # Defaults to $facts['os_service_default'] # # [*max_queues*] # (optional) The maximum number of virtio queue pairs that can be enabled # when creating a multiqueue guest. The number of virtio queues allocated # will be the lesser of the CPUs requested by the guest and the max value # defined. By default, this value is set to none meaning the legacy limits # based on the reported kernel major version will be used. # Defaults to $facts['os_service_default'] # # [*num_memory_encrypted_guests*] # (optional) The maximum number of guests with encrypted memory which can # run concurrently on this compute host. # Defaults to $facts['os_service_default'] # # [*wait_soft_reboot_seconds*] # (optional) Number of seconds to wait for instance to shut down after soft # reboot request is made. # Defaults to $facts['os_service_default'] # # [*tb_cache_size*] # (optional) The tb-cache size (in MiB) of each guest VM. # Defaults to $facts['os_service_default'] # class nova::compute::libvirt ( $ensure_package = 'present', $virt_type = 'kvm', $vncserver_listen = '127.0.0.1', Boolean $migration_support = false, $cpu_mode = undef, Array[String[1]] $cpu_models = [], $cpu_model_extra_flags = undef, $cpu_power_management = $facts['os_service_default'], $cpu_power_management_strategy = $facts['os_service_default'], $cpu_power_governor_low = $facts['os_service_default'], $cpu_power_governor_high = $facts['os_service_default'], $snapshot_image_format = $facts['os_service_default'], $snapshots_directory = $facts['os_service_default'], $disk_cachemodes = $facts['os_service_default'], $hw_disk_discard = $facts['os_service_default'], $hw_machine_type = $facts['os_service_default'], $sysinfo_serial = $facts['os_service_default'], $inject_password = $facts['os_service_default'], $inject_key = $facts['os_service_default'], $inject_partition = $facts['os_service_default'], $enabled_perf_events = $facts['os_service_default'], $device_detach_attempts = $facts['os_service_default'], $device_detach_timeout = $facts['os_service_default'], $libvirt_service_name = $::nova::params::libvirt_service_name, $virtlock_service_name = $::nova::params::virtlock_service_name, $virtlog_service_name = $::nova::params::virtlog_service_name, $compute_driver = 'libvirt.LibvirtDriver', $preallocate_images = $facts['os_service_default'], Boolean $manage_libvirt_services = true, $rx_queue_size = $facts['os_service_default'], $tx_queue_size = $facts['os_service_default'], $file_backed_memory = $facts['os_service_default'], $images_type = $facts['os_service_default'], $volume_use_multipath = $facts['os_service_default'], $num_volume_scan_tries = $facts['os_service_default'], $nfs_mount_options = $facts['os_service_default'], $num_pcie_ports = $facts['os_service_default'], $mem_stats_period_seconds = $facts['os_service_default'], $pmem_namespaces = $facts['os_service_default'], $swtpm_enabled = $facts['os_service_default'], $swtpm_user = $facts['os_service_default'], $swtpm_group = $facts['os_service_default'], $max_queues = $facts['os_service_default'], $num_memory_encrypted_guests = $facts['os_service_default'], $wait_soft_reboot_seconds = $facts['os_service_default'], $tb_cache_size = $facts['os_service_default'], ) inherits nova::params { include nova::deps include nova::params # cpu_mode has different defaults depending on hypervisor. if !$cpu_mode { case $virt_type { 'qemu', 'kvm': { $cpu_mode_real = 'host-model' } default: { $cpu_mode_real = 'none' } } } else { $cpu_mode_real = $cpu_mode } if($facts['os']['family'] == 'Debian') { package { "nova-compute-${virt_type}": ensure => $ensure_package, tag => ['openstack', 'nova-package'], } } if $migration_support { include nova::migration::libvirt } unless $rx_queue_size == $facts['os_service_default'] or $rx_queue_size in [256, 512, 1024] { fail("Invalid rx_queue_size parameter: ${rx_queue_size}") } unless $tx_queue_size == $facts['os_service_default'] or $tx_queue_size in [256, 512, 1024] { fail("Invalid_tx_queue_size parameter: ${tx_queue_size}") } # manage_libvirt_services is here for backward compatibility to support # deployments that do not include nova::compute::libvirt::services # # If you're using hiera: # - set nova::compute::libvirt::manage_libvirt_services to false # - include nova::compute::libvirt::services in your composition layer # - select which services you want to deploy with # ::nova::compute::libvirt::services:* parameters. # # If you're not using hiera: # - set nova::compute::libvirt::manage_libvirt_services to true (default). # - select which services you want to deploy with # ::nova::compute::libvirt::*_service_name parameters. if $manage_libvirt_services { class { 'nova::compute::libvirt::services': libvirt_service_name => $libvirt_service_name, virtlock_service_name => $virtlock_service_name, virtlog_service_name => $virtlog_service_name, libvirt_virt_type => $virt_type, } } if defined('Class[nova::compute::rbd]') { if $::nova::compute::rbd::ephemeral_storage and $images_type != 'rbd' { fail('nova::compute::libvirt::images_type should be rbd if rbd ephemeral storage is used.') } } $disk_cachemodes_real = $disk_cachemodes ? { Hash => join(join_keys_to_values($disk_cachemodes, '='), ','), default => join(any2array($disk_cachemodes), ','), } $hw_machine_type_real = $hw_machine_type ? { Hash => join(join_keys_to_values($hw_machine_type, '='), ','), default => join(any2array($hw_machine_type), ','), } nova_config { 'DEFAULT/compute_driver': value => $compute_driver; 'DEFAULT/preallocate_images': value => $preallocate_images; 'vnc/server_listen': value => $vncserver_listen; 'libvirt/virt_type': value => $virt_type; 'libvirt/cpu_mode': value => $cpu_mode_real; 'libvirt/cpu_power_management': value => $cpu_power_management; 'libvirt/cpu_power_management_strategy': value => $cpu_power_management_strategy; 'libvirt/cpu_power_governor_low': value => $cpu_power_governor_low; 'libvirt/cpu_power_governor_high': value => $cpu_power_governor_high; 'libvirt/snapshot_image_format': value => $snapshot_image_format; 'libvirt/snapshots_directory': value => $snapshots_directory; 'libvirt/disk_cachemodes': value => $disk_cachemodes_real; 'libvirt/inject_password': value => $inject_password; 'libvirt/inject_key': value => $inject_key; 'libvirt/inject_partition': value => $inject_partition; 'libvirt/hw_disk_discard': value => $hw_disk_discard; 'libvirt/hw_machine_type': value => $hw_machine_type_real; 'libvirt/sysinfo_serial': value => $sysinfo_serial; 'libvirt/enabled_perf_events': value => join(any2array($enabled_perf_events), ','); 'libvirt/device_detach_attempts': value => $device_detach_attempts; 'libvirt/device_detach_timeout': value => $device_detach_timeout; 'libvirt/rx_queue_size': value => $rx_queue_size; 'libvirt/tx_queue_size': value => $tx_queue_size; 'libvirt/file_backed_memory': value => $file_backed_memory; 'libvirt/images_type': value => $images_type; 'libvirt/volume_use_multipath': value => $volume_use_multipath; 'libvirt/num_volume_scan_tries': value => $num_volume_scan_tries; 'libvirt/nfs_mount_options': value => $nfs_mount_options; 'libvirt/num_pcie_ports': value => $num_pcie_ports; 'libvirt/mem_stats_period_seconds': value => $mem_stats_period_seconds; 'libvirt/pmem_namespaces': value => join(any2array($pmem_namespaces), ','); 'libvirt/swtpm_enabled': value => $swtpm_enabled; 'libvirt/swtpm_user' : value => $swtpm_user; 'libvirt/swtpm_group': value => $swtpm_group; 'libvirt/max_queues': value => $max_queues; 'libvirt/num_memory_encrypted_guests': value => $num_memory_encrypted_guests; 'libvirt/wait_soft_reboot_seconds': value => $wait_soft_reboot_seconds; 'libvirt/tb_cache_size': value => $tb_cache_size; } # cpu_model param is only valid if cpu_mode=custom # otherwise it should be commented out if $cpu_mode_real == 'custom' and !empty($cpu_models){ $cpu_models_real = join($cpu_models, ',') } else { if !empty($cpu_models) { warning('$cpu_models requires that $cpu_mode => "custom" and will be ignored') } $cpu_models_real = $facts['os_service_default'] } nova_config { 'libvirt/cpu_models': value => $cpu_models_real; } # cpu_model_extra_flags is only valid if cpu_mode!=none # otherwise it should be commented out if $cpu_mode_real != 'none' and $cpu_model_extra_flags { $cpu_model_extra_flags_real = join(any2array($cpu_model_extra_flags), ',') } else { if $cpu_model_extra_flags { warning('$cpu_model_extra_flags requires that $cpu_mode is not set to "none" and will be ignored') } $cpu_model_extra_flags_real = $facts['os_service_default'] } nova_config { 'libvirt/cpu_model_extra_flags': value => $cpu_model_extra_flags_real; } }