221 lines
7.8 KiB
Puppet
221 lines
7.8 KiB
Puppet
# == Class: nova::compute::libvirt_guests
|
|
#
|
|
# manages configuration for starting running instances when compute node
|
|
# gets rebooted.
|
|
#
|
|
# === Parameters:
|
|
#
|
|
# [*enabled*]
|
|
# (optional) Whether the libvirt-guests service will be run
|
|
# Defaults to false
|
|
#
|
|
# [*package_ensure*]
|
|
# (optional) The state of libvirt packages
|
|
# Defaults to 'present'
|
|
#
|
|
# [*on_boot*]
|
|
# (optional) libvirt-guests parameter - action taken on host boot
|
|
# - start all guests which were running on shutdown are started on boot
|
|
# regardless on their autostart settings
|
|
# - ignore libvirt-guests init script won't start any guest on boot, however,
|
|
# guests marked as autostart will still be automatically started by
|
|
# libvirtd
|
|
# Defaults to 'ignore'
|
|
#
|
|
# [*on_shutdown*]
|
|
# (optional) libvirt-guests parameter - action taken on host shutdown
|
|
# - suspend all running guests are suspended using virsh managedsave
|
|
# - shutdown all running guests are asked to shutdown. Please be careful with
|
|
# this settings since there is no way to distinguish between a
|
|
# guest which is stuck or ignores shutdown requests and a guest
|
|
# which just needs a long time to shutdown. When setting
|
|
# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
|
|
# value suitable for your guests.
|
|
# Defaults to 'shutdown'
|
|
#
|
|
# [*start_delay*]
|
|
# (optional) Number of seconds to wait between each guest start. Set 0 to
|
|
# allow parallel startup.
|
|
# Defaults to undef
|
|
#
|
|
# [*parallel_shutdown*]
|
|
# (optional) Number of guests will be shutdown concurrently, taking effect
|
|
# when "ON_SHUTDOWN" is set to "shutdown". If set to 0, guests will be
|
|
# shutdown one after another. Number of guests on shutdown at any time will
|
|
# not exceed number set in this variable.
|
|
# Defaults to undef
|
|
#
|
|
# [*shutdown_timeout*]
|
|
# (optional) Number of seconds we're willing to wait for a guest to shut
|
|
# down. If parallel shutdown is enabled, this timeout applies as a timeout
|
|
# for shutting down all guests on a single URI defined in the variable URIS.
|
|
# If this is 0, then there is no time out (use with caution, as guests might
|
|
# not respond to a shutdown request).
|
|
# Defaults to undef
|
|
#
|
|
# [*bypass_cache*]
|
|
# (optional) Try to bypass the file system cache when saving and restoring
|
|
# guests, even though this may give slower operation for some file systems.
|
|
# Defaults to false
|
|
#
|
|
# [*sync_time*]
|
|
# (optional) Try to sync guest time on domain resume. Be aware, that this
|
|
# requires guest agent support for time synchronization running in the guest.
|
|
# Defaults to false
|
|
#
|
|
# [*manage_service*]
|
|
# (optional) Whether to start/stop the service
|
|
# Defaults to false
|
|
#
|
|
class nova::compute::libvirt_guests (
|
|
Boolean $enabled = false,
|
|
$package_ensure = 'present',
|
|
Enum['start', 'ignore'] $on_boot = 'ignore',
|
|
Enum['suspend', 'shutdown'] $on_shutdown = 'shutdown',
|
|
Optional[Integer[0]] $start_delay = undef,
|
|
Optional[Integer[0]] $parallel_shutdown = undef,
|
|
Optional[Integer[0]] $shutdown_timeout = undef,
|
|
Boolean $bypass_cache = false,
|
|
Boolean $sync_time = false,
|
|
Boolean $manage_service = false,
|
|
) {
|
|
include nova::params
|
|
include nova::deps
|
|
|
|
Anchor['nova::config::begin']
|
|
-> File<| tag =='libvirt-guests-file' |>
|
|
-> File_line<| tag == 'libvirt-guests-file_line'|>
|
|
-> Anchor['nova::config::end']
|
|
|
|
# NOTE(tkajinam): The environment file is not present in CentOS/RHEL
|
|
file { $::nova::params::libvirt_guests_environment_file:
|
|
ensure => present,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
tag => 'libvirt-guests-file',
|
|
}
|
|
|
|
file_line { 'libvirt-guests ON_BOOT':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => "ON_BOOT=${on_boot}",
|
|
match => '^ON_BOOT=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
file_line { 'libvirt-guests ON_SHUTDOWN':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => "ON_SHUTDOWN=${on_shutdown}",
|
|
match => '^ON_SHUTDOWN=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
|
|
if $start_delay {
|
|
file_line { 'libvirt-guests START_DELAY':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => "START_DELAY=${start_delay}",
|
|
match => '^START_DELAY=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
} else {
|
|
file_line { 'libvirt-guests START_DELAY':
|
|
ensure => absent,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
match => '^START_DELAY=.*',
|
|
match_for_absence => true,
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
}
|
|
|
|
if $parallel_shutdown {
|
|
file_line { 'libvirt-guests PARALLEL_SHUTDOWN':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => "PARALLEL_SHUTDOWN=${parallel_shutdown}",
|
|
match => '^PARALLEL_SHUTDOWN=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
} else {
|
|
file_line { 'libvirt-guests PARALLEL_SHUTDOWN':
|
|
ensure => absent,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
match => '^PARALLEL_SHUTDOWN=.*',
|
|
match_for_absence => true,
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
}
|
|
|
|
if $shutdown_timeout {
|
|
file_line { 'libvirt-guests SHUTDOWN_TIMEOUT':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => "SHUTDOWN_TIMEOUT=${shutdown_timeout}",
|
|
match => '^SHUTDOWN_TIMEOUT=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
} else {
|
|
file_line { 'libvirt-guests SHUTDOWN_TIMEOUT':
|
|
ensure => absent,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
match => '^SHUTDOWN_TIMEOUT=.*',
|
|
match_for_absence => true,
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
}
|
|
|
|
if $bypass_cache {
|
|
file_line { 'libvirt-guests BYPASS_CACHE':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => 'BYPASS_CACHE=1',
|
|
match => '^BYPASS_CACHE=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
} else {
|
|
file_line { 'libvirt-guests BYPASS_CACHE':
|
|
ensure => absent,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
match => '^BYPASS_CACHE=.*',
|
|
match_for_absence => true,
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
}
|
|
|
|
if $sync_time {
|
|
file_line { 'libvirt-guests SYNC_TIME':
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
line => 'SYNC_TIME=1',
|
|
match => '^SYNC_TIME=.*',
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
} else {
|
|
file_line { 'libvirt-guests SYNC_TIME':
|
|
ensure => absent,
|
|
path => $::nova::params::libvirt_guests_environment_file,
|
|
match => '^SYNC_TIME=.*',
|
|
match_for_absence => true,
|
|
tag => 'libvirt-guests-file_line',
|
|
}
|
|
}
|
|
|
|
package { 'libvirt-client':
|
|
ensure => $package_ensure,
|
|
name => $::nova::params::libvirt_client_package_name,
|
|
tag => ['openstack', 'nova-support-package'],
|
|
}
|
|
|
|
if $manage_service {
|
|
if $enabled {
|
|
$service_ensure = 'running'
|
|
} else {
|
|
$service_ensure = 'stopped'
|
|
}
|
|
|
|
# NOTE(tkajinam): libvirt-service tag should NOT be added here, because
|
|
# any update in libvirt config files does not require
|
|
# restarting the libvirt-service. All guests running in
|
|
# this node are shut off if the service is restarted.
|
|
service { 'libvirt-guests':
|
|
ensure => $service_ensure,
|
|
name => $::nova::params::libvirt_guests_service_name,
|
|
enable => $enabled,
|
|
require => Anchor['nova::service::begin'],
|
|
notify => Anchor['nova::service::end']
|
|
}
|
|
}
|
|
}
|