152 lines
6.5 KiB
Puppet
152 lines
6.5 KiB
Puppet
#
|
|
class neutron::server (
|
|
$neutron_config = {},
|
|
$primary_controller = false,
|
|
$nova_admin_tenant_id_mask = 'XXX_service_tenant_id_XXX',
|
|
$nova_admin_tenant_name = 'services',
|
|
) {
|
|
include 'neutron::params'
|
|
|
|
require 'keystone::python'
|
|
|
|
Anchor['neutron-init-done'] ->
|
|
Anchor['neutron-server']
|
|
|
|
anchor {'neutron-server':}
|
|
|
|
if $::neutron::params::server_package {
|
|
$server_package = 'neutron-server'
|
|
package {"$server_package":
|
|
name => $::neutron::params::server_package,
|
|
ensure => $package_ensure
|
|
}
|
|
} else {
|
|
$server_package = 'neutron'
|
|
}
|
|
if $::operatingsystem == 'Ubuntu' {
|
|
# Package['neutron-server'] provides two services:
|
|
# * neutron-server
|
|
# * neutron-metadata-agent
|
|
# because we need STOP neutron-metadata-agent here
|
|
#
|
|
file { '/etc/init/neutron-metadata-agent.override':
|
|
replace => 'no',
|
|
ensure => 'present',
|
|
content => 'manual',
|
|
mode => '0644',
|
|
} -> Package["$server_package"]
|
|
file { '/etc/init/neutron-server.override':
|
|
replace => 'no',
|
|
ensure => 'present',
|
|
content => 'manual',
|
|
mode => '0644',
|
|
} -> Package["$server_package"]
|
|
Package["$server_package"] ->
|
|
exec { 'rm-neutron-server-override':
|
|
path => '/sbin:/bin:/usr/bin:/usr/sbin',
|
|
command => "rm -f /etc/init/neutron-server.override",
|
|
}
|
|
if $service_provider != 'pacemaker' {
|
|
Package["$server_package"] ->
|
|
exec { 'rm-neutron-metadata-override':
|
|
path => '/sbin:/bin:/usr/bin:/usr/sbin',
|
|
command => "rm -f /etc/init/neutron-metadata-agent.override",
|
|
}
|
|
}
|
|
}
|
|
Package[$server_package] -> Neutron_config<||>
|
|
Package[$server_package] -> Neutron_api_config<||>
|
|
|
|
if defined(Anchor['neutron-plugin-ovs']) {
|
|
Package["$server_package"] -> Anchor['neutron-plugin-ovs']
|
|
}
|
|
|
|
Neutron_config<||> ~> Service['neutron-server']
|
|
Neutron_api_config<||> ~> Service['neutron-server']
|
|
Service <| title == 'mysql' |> -> Service['neutron-server']
|
|
Service <| title == 'haproxy' |> -> Service['neutron-server']
|
|
|
|
neutron_config {
|
|
'DEFAULT/notify_nova_on_port_status_changes': value => $neutron_config['server']['notify_nova_on_port_status_changes'];
|
|
'DEFAULT/notify_nova_on_port_data_changes': value => $neutron_config['server']['notify_nova_on_port_data_changes'];
|
|
'DEFAULT/nova_url': value => $neutron_config['server']['notify_nova_api_url'];
|
|
'DEFAULT/nova_region_name': value => $neutron_config['keystone']['auth_region'];
|
|
'DEFAULT/nova_admin_username': value => $neutron_config['server']['notify_nova_admin_username'];
|
|
'DEFAULT/nova_admin_tenant_id': value => $nova_admin_tenant_id_mask;
|
|
'DEFAULT/nova_admin_password': value => $neutron_config['server']['notify_nova_admin_password'];
|
|
'DEFAULT/nova_admin_auth_url': value => $neutron_config['server']['notify_nova_admin_auth_url'];
|
|
'DEFAULT/send_events_interval': value => $neutron_config['server']['notify_nova_send_events_interval'];
|
|
'database/connection': value => $neutron_config['database']['url'];
|
|
'database/max_retries': value => $neutron_config['database']['reconnects'];
|
|
'database/reconnect_interval': value => $neutron_config['database']['reconnect_interval'];
|
|
'database/max_pool_size': value => $neutron_config['database']['max_pool_size'];
|
|
'database/max_overflow': value => $neutron_config['database']['max_overflow'];
|
|
'database/idle_timeout': value => $neutron_config['database']['idle_timeout'];
|
|
}
|
|
|
|
neutron_api_config {
|
|
'filter:authtoken/auth_url': value => $neutron_config['keystone']['auth_url'];
|
|
'filter:authtoken/auth_host': value => $neutron_config['keystone']['auth_host'];
|
|
'filter:authtoken/auth_port': value => $neutron_config['keystone']['auth_port'];
|
|
'filter:authtoken/auth_protocol': value => $neutron_config['keystone']['auth_protocol'];
|
|
'filter:authtoken/admin_tenant_name': value => $neutron_config['keystone']['admin_tenant_name'];
|
|
'filter:authtoken/admin_user': value => $neutron_config['keystone']['admin_user'];
|
|
'filter:authtoken/admin_password': value => $neutron_config['keystone']['admin_password'];
|
|
}
|
|
|
|
Neutron_config<||> -> Exec['get_service_tenant_ID']
|
|
File['/root/openrc'] -> Exec['get_service_tenant_ID']
|
|
Keystone_tenant["${nova_admin_tenant_name}"] -> Exec['get_service_tenant_ID']
|
|
Openstack::Ha::Haproxy_service<| title == 'keystone-1' |> -> Exec['get_service_tenant_ID']
|
|
Openstack::Ha::Haproxy_service<| title == 'keystone-2' |> -> Exec['get_service_tenant_ID']
|
|
exec {'get_service_tenant_ID': # Imitate tries & try_sleep for 'onlyif'
|
|
tries => 10, # by using couple of execs
|
|
try_sleep => 3, # WITHOUT refreshonly option
|
|
command => "bash -c \"source /root/openrc ; keystone tenant-list\" | grep \"${nova_admin_tenant_name}\" > /tmp/services",
|
|
path => '/usr/sbin:/usr/bin:/sbin:/bin'
|
|
}
|
|
# do not use refreshonly and notify here -- it leads to double execution 'onlyif' command
|
|
exec {'insert_service_tenant_ID':
|
|
onlyif => "head -n1 /tmp/services | awk -F'|' '{print \$2}' | grep -xEe '\\s*[[:xdigit:]]+\\s*' > /tmp/serviceid",
|
|
command => "sed -e \"s/${nova_admin_tenant_id_mask}/`head -n1 /tmp/serviceid`/g\" -i /etc/neutron/neutron.conf",
|
|
path => '/usr/sbin:/usr/bin:/sbin:/bin'
|
|
}
|
|
Exec['get_service_tenant_ID'] -> Exec['insert_service_tenant_ID'] -> Service<| title == 'neutron-server' |>
|
|
|
|
anchor {'neutron-server-config-done':}
|
|
|
|
service {'neutron-server':
|
|
name => $::neutron::params::server_service,
|
|
ensure => running,
|
|
enable => true,
|
|
hasstatus => true,
|
|
hasrestart => true,
|
|
provider => $::neutron::params::service_provider,
|
|
}
|
|
|
|
anchor {'neutron-api-up':}
|
|
|
|
Anchor['neutron-server'] ->
|
|
Neutron_config<||> ->
|
|
Neutron_api_config<||> ->
|
|
Anchor['neutron-server-config-done'] ->
|
|
Service['neutron-server'] ->
|
|
Anchor['neutron-api-up'] ->
|
|
Anchor['neutron-server-done']
|
|
|
|
Package[$server_package] -> class { 'neutron::quota': } -> Anchor['neutron-server-config-done']
|
|
|
|
if $primary_controller {
|
|
Anchor['neutron-api-up'] ->
|
|
class { 'neutron::network::predefined_networks':
|
|
neutron_config => $neutron_config,
|
|
} -> Anchor['neutron-server-done']
|
|
}
|
|
|
|
anchor {'neutron-server-done':}
|
|
Package<| title == $server_package|> ~> Service<| title == 'neutron-server'|>
|
|
if !defined(Service['neutron-server']) {
|
|
notify{ "Module ${module_name} cannot notify service neutron-server on package update": }
|
|
}
|
|
}
|