Puppet Class: nova::compute::libvirt_guests

Defined in:
manifests/compute/libvirt_guests.pp

Overview

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

Parameters:

  • enabled (Boolean) (defaults to: false)
  • package_ensure (Any) (defaults to: 'present')
  • on_boot (Enum['start', 'ignore']) (defaults to: 'ignore')
  • on_shutdown (Enum['suspend', 'shutdown']) (defaults to: 'shutdown')
  • start_delay (Optional[Integer[0]]) (defaults to: undef)
  • parallel_shutdown (Optional[Integer[0]]) (defaults to: undef)
  • shutdown_timeout (Optional[Integer[0]]) (defaults to: undef)
  • bypass_cache (Boolean) (defaults to: false)
  • sync_time (Boolean) (defaults to: false)
  • manage_service (Boolean) (defaults to: false)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# File 'manifests/compute/libvirt_guests.pp', line 70

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']
    }
  }
}