--- /dev/null
+# == Class: nova::compute::libvirt
+#
+# Install and manage nova-compute guests managed
+# by libvirt
+#
+# === Parameters:
+#
+# [*libvirt_virt_type*]
+# (optional) Libvirt domain type. Options are: kvm, lxc, qemu, uml, xen
+# Replaces libvirt_type
+# 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
+#
+# [*libvirt_cpu_mode*]
+# (optional) The libvirt CPU mode to configure. Possible values
+# include custom, host-model, none, host-passthrough.
+# Defaults to 'host-model' if libvirt_virt_type is set to either
+# kvm or qemu, otherwise defaults to 'none'.
+#
+# [*libvirt_disk_cachemodes*]
+# (optional) A list of cachemodes for different disk types, e.g.
+# ["file=directsync", "block=none"]
+# If an empty list is specified, the disk_cachemodes directive
+# will be removed from nova.conf completely.
+# Defaults to an empty list
+#
+# [*libvirt_inject_password*]
+# (optional) Inject the admin password at boot time, without an agent.
+# Defaults to false
+#
+# [*libvirt_inject_key*]
+# (optional) Inject the ssh public key at boot time.
+# Defaults to false
+#
+# [*libvirt_inject_partition*]
+# (optional) The partition to inject to : -2 => disable, -1 => inspect
+# (libguestfs only), 0 => not partitioned, >0 => partition
+# number (integer value)
+# Defaults to -2
+#
+# [*remove_unused_base_images*]
+# (optional) Should unused base images be removed?
+# If undef is specified, remove the line in nova.conf
+# otherwise, use a boolean to remove or not the base images.
+# Defaults to undef
+#
+# [*remove_unused_kernels*]
+# (optional) Should unused kernel images be removed?
+# This is only safe to enable if all compute nodes
+# have been updated to support this option.
+# If undef is specified, remove the line in nova.conf
+# otherwise, use a boolean to remove or not the kernels.
+# Defaults to undef
+#
+# [*remove_unused_resized_minimum_age_seconds*]
+# (optional) Unused resized base images younger
+# than this will not be removed
+# If undef is specified, remove the line in nova.conf
+# otherwise, use a integer or a string to define after
+# how many seconds it will be removed.
+# Defaults to undef
+#
+# [*remove_unused_original_minimum_age_seconds*]
+# (optional) Unused unresized base images younger
+# than this will not be removed
+# If undef is specified, remove the line in nova.conf
+# otherwise, use a integer or a string to define after
+# how many seconds it will be removed.
+# Defaults to undef
+#
+# [*libvirt_service_name*]
+# (optional) libvirt service name.
+# Defaults to $::nova::params::libvirt_service_name
+#
+class nova::compute::libvirt (
+ $libvirt_virt_type = 'kvm',
+ $vncserver_listen = '127.0.0.1',
+ $migration_support = false,
+ $libvirt_cpu_mode = false,
+ $libvirt_disk_cachemodes = [],
+ $libvirt_inject_password = false,
+ $libvirt_inject_key = false,
+ $libvirt_inject_partition = -2,
+ $remove_unused_base_images = undef,
+ $remove_unused_kernels = undef,
+ $remove_unused_resized_minimum_age_seconds = undef,
+ $remove_unused_original_minimum_age_seconds = undef,
+ $libvirt_service_name = $::nova::params::libvirt_service_name,
+ # DEPRECATED PARAMETER
+ $libvirt_type = false
+) inherits nova::params {
+
+ include nova::params
+
+ Service['libvirt'] -> Service['nova-compute']
+
+ if $libvirt_type {
+ warning ('The libvirt_type parameter is deprecated, use libvirt_virt_type instead.')
+ $libvirt_virt_type_real = $libvirt_type
+ } else {
+ $libvirt_virt_type_real = $libvirt_virt_type
+ }
+
+ # libvirt_cpu_mode has different defaults depending on hypervisor.
+ if !$libvirt_cpu_mode {
+ case $libvirt_virt_type_real {
+ 'kvm','qemu': {
+ $libvirt_cpu_mode_real = 'host-model'
+ }
+ default: {
+ $libvirt_cpu_mode_real = 'none'
+ }
+ }
+ } else {
+ $libvirt_cpu_mode_real = $libvirt_cpu_mode
+ }
+
+ if($::osfamily == 'Debian') {
+ package { "nova-compute-${libvirt_virt_type_real}":
+ ensure => present,
+ before => Package['nova-compute'],
+ require => Package['nova-common'],
+ tag => ['openstack', 'nova'],
+ }
+ }
+
+ if($::osfamily == 'RedHat' and $::operatingsystem != 'Fedora') {
+ service { 'messagebus':
+ ensure => running,
+ enable => true,
+ provider => $::nova::params::special_service_provider,
+ }
+ Package['libvirt'] -> Service['messagebus'] -> Service['libvirt']
+
+ }
+
+ if $migration_support {
+ if $vncserver_listen != '0.0.0.0' and $vncserver_listen != '::0' {
+ fail('For migration support to work, you MUST set vncserver_listen to \'0.0.0.0\' or \'::0\'')
+ } else {
+ class { 'nova::migration::libvirt': }
+ }
+ }
+
+ package { 'libvirt':
+ ensure => present,
+ name => $::nova::params::libvirt_package_name,
+ }
+
+ service { 'libvirt' :
+ ensure => running,
+ enable => true,
+ name => $libvirt_service_name,
+ provider => $::nova::params::special_service_provider,
+ require => Package['libvirt'],
+ }
+
+ nova_config {
+ 'DEFAULT/compute_driver': value => 'libvirt.LibvirtDriver';
+ 'DEFAULT/vncserver_listen': value => $vncserver_listen;
+ 'libvirt/virt_type': value => $libvirt_virt_type_real;
+ 'libvirt/cpu_mode': value => $libvirt_cpu_mode_real;
+ 'libvirt/inject_password': value => $libvirt_inject_password;
+ 'libvirt/inject_key': value => $libvirt_inject_key;
+ 'libvirt/inject_partition': value => $libvirt_inject_partition;
+ }
+
+ if size($libvirt_disk_cachemodes) > 0 {
+ nova_config {
+ 'libvirt/disk_cachemodes': value => join($libvirt_disk_cachemodes, ',');
+ }
+ } else {
+ nova_config {
+ 'libvirt/disk_cachemodes': ensure => absent;
+ }
+ }
+
+ if $remove_unused_kernels != undef {
+ nova_config {
+ 'libvirt/remove_unused_kernels': value => $remove_unused_kernels;
+ }
+ } else {
+ nova_config {
+ 'libvirt/remove_unused_kernels': ensure => absent;
+ }
+ }
+
+ if $remove_unused_resized_minimum_age_seconds != undef {
+ nova_config {
+ 'libvirt/remove_unused_resized_minimum_age_seconds': value => $remove_unused_resized_minimum_age_seconds;
+ }
+ } else {
+ nova_config {
+ 'libvirt/remove_unused_resized_minimum_age_seconds': ensure => absent;
+ }
+ }
+
+ if $remove_unused_base_images != undef {
+ nova_config {
+ 'DEFAULT/remove_unused_base_images': value => $remove_unused_base_images;
+ }
+ } else {
+ nova_config {
+ 'DEFAULT/remove_unused_base_images': ensure => absent;
+ }
+ }
+
+ if $remove_unused_original_minimum_age_seconds != undef {
+ nova_config {
+ 'DEFAULT/remove_unused_original_minimum_age_seconds': value => $remove_unused_original_minimum_age_seconds;
+ }
+ } else {
+ nova_config {
+ 'DEFAULT/remove_unused_original_minimum_age_seconds': ensure => absent;
+ }
+ }
+}