Adding manage_service parameter to all services
When set to false, enables puppet to configure a service without starting/stopping it on each run. This may be necessary when using an external clustering system (Corosync/Pacemaker, for example). Defaults to true. Change-Id: Iff21ee384fa857e1ddec0e15ca85df8aedad3e80
This commit is contained in:
parent
75b9fbea27
commit
c45f573882
|
@ -0,0 +1,55 @@
|
|||
# Example: managing nova compute controller services with pacemaker
|
||||
#
|
||||
# By setting enabled to false, these services will not be started at boot. By setting
|
||||
# manage_service to false, puppet will not kill these services on every run. This
|
||||
# allows the Pacemaker resource manager to dynamically determine on which node each
|
||||
# service should run.
|
||||
#
|
||||
# The puppet commands below would ideally be applied to at least three nodes.
|
||||
#
|
||||
# Note that nova-api and nova-novncproxy are associated with the virtual IP address as
|
||||
# they are called from external services. The remaining services connect to the
|
||||
# database and/or message broker independently.
|
||||
#
|
||||
# Example pacemaker resource configuration commands (configured once per cluster):
|
||||
#
|
||||
# sudo pcs resource create nova_vip ocf:heartbeat:IPaddr2 params ip=192.0.2.3 \
|
||||
# cidr_netmask=24 op monitor interval=10s
|
||||
#
|
||||
# sudo pcs resource create nova_api_service lsb:openstack-nova-api
|
||||
# sudo pcs resource create nova_conductor_service lsb:openstack-nova-conductor
|
||||
# sudo pcs resource create nova_consoleauth_service lsb:openstack-nova-consoleauth
|
||||
# sudo pcs resource create nova_novncproxy_service lsb:openstack-nova-novncproxy
|
||||
# sudo pcs resource create nova_scheduler_service lsb:openstack-nova-scheduler
|
||||
#
|
||||
# sudo pcs constraint colocation add nova_api_service with nova_vip
|
||||
# sudo pcs constraint colocation add nova_novncproxy_service with nova_vip
|
||||
|
||||
class { 'nova': }
|
||||
|
||||
class { 'nova::api':
|
||||
enabled => false,
|
||||
manage_service => false,
|
||||
admin_password => 'PASSWORD',
|
||||
}
|
||||
|
||||
class { 'nova::conductor':
|
||||
enabled => false,
|
||||
manage_service => false,
|
||||
}
|
||||
|
||||
class { 'nova::consoleauth':
|
||||
enabled => false,
|
||||
manage_service => false,
|
||||
}
|
||||
|
||||
class { 'nova::scheduler':
|
||||
enabled => false,
|
||||
manage_service => false,
|
||||
}
|
||||
|
||||
class { 'nova::vncproxy':
|
||||
enabled => false,
|
||||
manage_service => false,
|
||||
}
|
||||
|
|
@ -11,6 +11,10 @@
|
|||
# (optional) Whether the nova api service will be run
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) Whether the nova api package will be installed
|
||||
# Defaults to 'present'
|
||||
|
@ -93,6 +97,7 @@
|
|||
class nova::api(
|
||||
$admin_password,
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present',
|
||||
$auth_strategy = undef,
|
||||
$auth_host = '127.0.0.1',
|
||||
|
@ -124,6 +129,7 @@ class nova::api(
|
|||
Package<| title == 'nova-common' |> -> Class['nova::api']
|
||||
|
||||
Nova_paste_api_ini<| |> ~> Exec['post-nova_config']
|
||||
|
||||
Nova_paste_api_ini<| |> ~> Service['nova-api']
|
||||
|
||||
if $auth_strategy {
|
||||
|
@ -132,6 +138,7 @@ class nova::api(
|
|||
|
||||
nova::generic_service { 'api':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
ensure_package => $ensure_package,
|
||||
package_name => $::nova::params::api_package_name,
|
||||
service_name => $::nova::params::api_service_name,
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
# Use Nova Cells or not
|
||||
# Defaults to 'False'
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*create_cells*]
|
||||
# Create cells with nova-manage
|
||||
# Defaults to 'True'
|
||||
|
@ -144,6 +148,7 @@ class nova::cells (
|
|||
$ensure_package = 'present',
|
||||
$instance_updated_at_threshold = '3600',
|
||||
$instance_update_num_instances = '1',
|
||||
$manage_service = true,
|
||||
$manager = 'nova.cells.manager.CellsManager',
|
||||
$max_hop_count = '10',
|
||||
$mute_child_interval = '300',
|
||||
|
@ -202,6 +207,7 @@ class nova::cells (
|
|||
|
||||
nova::generic_service { 'cells':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::cells_package_name,
|
||||
service_name => $::nova::params::cells_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -8,12 +8,17 @@
|
|||
# (optional) Whether or not to enable the nova cert service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) The state to set for the nova-cert package
|
||||
# Defaults to 'present'
|
||||
#
|
||||
class nova::cert(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
|
@ -21,6 +26,7 @@ class nova::cert(
|
|||
|
||||
nova::generic_service { 'cert':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::cert_package_name,
|
||||
service_name => $::nova::params::cert_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
# (optional) Whether to enable the nova-compute service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) The state for the nova-compute package
|
||||
# Defaults to 'present'
|
||||
|
@ -54,6 +58,7 @@
|
|||
#
|
||||
class nova::compute (
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present',
|
||||
$vnc_enabled = true,
|
||||
$vncserver_proxyclient_address = '127.0.0.1',
|
||||
|
@ -94,6 +99,7 @@ class nova::compute (
|
|||
|
||||
nova::generic_service { 'compute':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::compute_package_name,
|
||||
service_name => $::nova::params::compute_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -8,12 +8,17 @@
|
|||
# (optional) Whether to enable the nova-conductor service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) The state of the nova conductor package
|
||||
# Defaults to 'present'
|
||||
#
|
||||
class nova::conductor(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
|
@ -21,6 +26,7 @@ class nova::conductor(
|
|||
|
||||
nova::generic_service { 'conductor':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::conductor_package_name,
|
||||
service_name => $::nova::params::conductor_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -1,11 +1,27 @@
|
|||
# == Class: nova::consoleauth
|
||||
#
|
||||
# Installs and configures consoleauth service
|
||||
#
|
||||
# The consoleauth service is required for vncproxy auth
|
||||
# for Horizon
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*enabled*]
|
||||
# (optional) Whether the nova consoleauth service will be run
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) Whether the nova consoleauth package will be installed
|
||||
# Defaults to 'present'
|
||||
#
|
||||
class nova::consoleauth(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
|
@ -13,6 +29,7 @@ class nova::consoleauth(
|
|||
|
||||
nova::generic_service { 'consoleauth':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::consoleauth_package_name,
|
||||
service_name => $::nova::params::consoleauth_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -14,17 +14,12 @@ define nova::generic_service(
|
|||
$package_name,
|
||||
$service_name,
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
include nova::params
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
$nova_title = "nova-${name}"
|
||||
# ensure that the service is only started after
|
||||
# all nova config entries have been set
|
||||
|
@ -44,7 +39,15 @@ define nova::generic_service(
|
|||
}
|
||||
}
|
||||
|
||||
if ($service_name) {
|
||||
if $service_name {
|
||||
if $manage_service {
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
}
|
||||
|
||||
service { $nova_title:
|
||||
ensure => $service_ensure,
|
||||
name => $service_name,
|
||||
|
@ -53,5 +56,4 @@ define nova::generic_service(
|
|||
require => [Package['nova-common'], Package[$nova_title]],
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,12 +8,17 @@
|
|||
# (optional) Whether to enable the service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) The package state to set
|
||||
# Defaults to 'present'
|
||||
#
|
||||
class nova::objectstore(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
|
@ -21,6 +26,7 @@ class nova::objectstore(
|
|||
|
||||
nova::generic_service { 'objectstore':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::objectstore_package_name,
|
||||
service_name => $::nova::params::objectstore_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -8,12 +8,17 @@
|
|||
# (optional) Whether to run the scheduler service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ensure_package*]
|
||||
# (optional) The state of the scheduler package
|
||||
# Defaults to 'present'
|
||||
#
|
||||
class nova::scheduler(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$ensure_package = 'present'
|
||||
) {
|
||||
|
||||
|
@ -21,6 +26,7 @@ class nova::scheduler(
|
|||
|
||||
nova::generic_service { 'scheduler':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::scheduler_package_name,
|
||||
service_name => $::nova::params::scheduler_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -12,6 +12,10 @@
|
|||
# (optional) enable spicehtml5proxy service
|
||||
# true/false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*host*]
|
||||
# (optional) Listen address for the html5 console proxy
|
||||
# Defaults to 0.0.0.0
|
||||
|
@ -26,6 +30,7 @@
|
|||
#
|
||||
class nova::spicehtml5proxy(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$host = '0.0.0.0',
|
||||
$port = '6082',
|
||||
$ensure_package = 'present'
|
||||
|
@ -40,6 +45,7 @@ class nova::spicehtml5proxy(
|
|||
|
||||
nova::generic_service { 'spicehtml5proxy':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::spicehtml5proxy_package_name,
|
||||
service_name => $::nova::params::spicehtml5proxy_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -8,6 +8,10 @@
|
|||
# (optional) Whether to run the vncproxy service
|
||||
# Defaults to false
|
||||
#
|
||||
# [*manage_service*]
|
||||
# (optional) Whether to start/stop the service
|
||||
# Defaults to true
|
||||
#
|
||||
# [*host*]
|
||||
# (optional) Host on which to listen for incoming requests
|
||||
# Defaults to '0.0.0.0'
|
||||
|
@ -22,6 +26,7 @@
|
|||
#
|
||||
class nova::vncproxy(
|
||||
$enabled = false,
|
||||
$manage_service = true,
|
||||
$host = '0.0.0.0',
|
||||
$port = '6080',
|
||||
$ensure_package = 'present'
|
||||
|
@ -46,6 +51,7 @@ class nova::vncproxy(
|
|||
}
|
||||
nova::generic_service { 'vncproxy':
|
||||
enabled => $enabled,
|
||||
manage_service => $manage_service,
|
||||
package_name => $::nova::params::vncproxy_package_name,
|
||||
service_name => $::nova::params::vncproxy_service_name,
|
||||
ensure_package => $ensure_package,
|
||||
|
|
|
@ -148,6 +148,17 @@ describe 'nova::api' do
|
|||
raise_error(Puppet::Error, /validate_re\(\): "#{auth_admin_prefix}" does not match/) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'while not managing service state' do
|
||||
before do
|
||||
params.merge!({
|
||||
:enabled => false,
|
||||
:manage_service => false,
|
||||
})
|
||||
end
|
||||
|
||||
it { should contain_service('nova-api').without_ensure }
|
||||
end
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
|
|
|
@ -109,6 +109,19 @@ describe 'nova::cells' do
|
|||
it_configures 'nova-cells'
|
||||
end
|
||||
|
||||
shared_examples_for 'a parent cell with manage_service as false' do
|
||||
let :params do
|
||||
{ :enabled => true,
|
||||
:manage_service => false,
|
||||
:cell_type => 'parent',
|
||||
:cell_name => 'mommy' }
|
||||
end
|
||||
let :expected_params do
|
||||
default_params.merge(params)
|
||||
end
|
||||
it { should contain_service(platform_params[:cells_service_name]).without_ensure }
|
||||
end
|
||||
|
||||
shared_examples_for 'a child cell' do
|
||||
let :params do
|
||||
{ :enabled => true,
|
||||
|
@ -137,6 +150,7 @@ describe 'nova::cells' do
|
|||
end
|
||||
|
||||
it_configures 'a parent cell'
|
||||
it_configures 'a parent cell with manage_service as false'
|
||||
it_configures 'a child cell'
|
||||
end
|
||||
|
||||
|
|
|
@ -101,6 +101,16 @@ describe 'nova::compute' do
|
|||
|
||||
it { should contain_nova_config('DEFAULT/force_config_drive').with_value(true) }
|
||||
end
|
||||
|
||||
context 'while not managing service state' do
|
||||
let :params do
|
||||
{ :enabled => false,
|
||||
:manage_service => false,
|
||||
}
|
||||
end
|
||||
|
||||
it { should contain_service('nova-compute').without_ensure }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -28,6 +28,15 @@ describe 'nova::spicehtml5proxy' do
|
|||
:ensure => 'running'
|
||||
)}
|
||||
|
||||
context 'with manage_service as false' do
|
||||
let :params do
|
||||
{ :enabled => true,
|
||||
:manage_service => false
|
||||
}
|
||||
end
|
||||
it { should contain_service('nova-spicehtml5proxy').without_ensure }
|
||||
end
|
||||
|
||||
context 'with package version' do
|
||||
let :params do
|
||||
{ :ensure_package => '2012.1-2' }
|
||||
|
|
|
@ -33,6 +33,15 @@ describe 'nova::vncproxy' do
|
|||
:ensure => 'running'
|
||||
)}
|
||||
|
||||
describe 'with manage_service as false' do
|
||||
let :params do
|
||||
{ :enabled => true,
|
||||
:manage_service => false
|
||||
}
|
||||
end
|
||||
it { should contain_service('nova-vncproxy').without_ensure }
|
||||
end
|
||||
|
||||
describe 'with package version' do
|
||||
let :params do
|
||||
{:ensure_package => '2012.1-2'}
|
||||
|
|
|
@ -42,4 +42,15 @@ shared_examples 'generic nova service' do |service|
|
|||
})
|
||||
end
|
||||
end
|
||||
|
||||
context 'while not managing service state' do
|
||||
let :params do
|
||||
{ :enabled => false,
|
||||
:manage_service => false }
|
||||
end
|
||||
|
||||
it 'does not control service state' do
|
||||
should contain_service(service[:name]).without_ensure
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue