puppet-octavia/manifests/worker.pp
Brent Eagles 3dc8602da6 Add amp_project_name to configure flavor access list
Adds support for adding the project being used by octavia to create
amphora to the amphora flavor's access list.

Change-Id: Iba14098d571f26e15c587b82271f00fd7cdc65d5
2018-01-17 13:51:11 -03:30

222 lines
6.9 KiB
Puppet

# Installs & configure the octavia controller worker service
#
# == Parameters
#
# [*enabled*]
# (optional) Should the service be enabled.
# Defaults to true
#
# [*manage_service*]
# (optional) Whether the service should be managed by Puppet.
# Defaults to true.
#
# [*package_ensure*]
# (optional) ensure state for package.
# Defaults to 'present'
#
# [*amp_flavor_id*]
# (optional) Nova instance flavor id for the Amphora.
# Note: since we set manage_nova_flavor to True by default, we need
# to set a valid amp_flavor_id by default, 65 was picked randomly.
# Defaults to '65'.
#
# [*amp_image_tag*]
# Glance image tag for Amphora image. Allows the Amphora image to be
# referred to by a tag instead of an ID, allowing the Amphora image to
# be updated without requiring reconfiguration of Octavia.
# Defaults to $::os_service_default
#
# [*amp_secgroup_list*]
# List of security groups to use for Amphorae.
# Defaults to $::os_service_default
#
# [*amp_boot_network_list*]
# List of networks to attach to Amphorae.
# Defaults to []
#
# [*loadbalancer_topology*]
# (optional) Load balancer topology configuration
# Defaults to $::os_service_default
#
# [*manage_nova_flavor*]
# (optional) Whether or not manage Nova flavor for the Amphora.
# Defaults to true.
#
# [*nova_flavor_config*]
# (optional) Nova flavor config hash.
# Should be an hash.
# Exemple:
# $nova_flavor_config = { 'ram' => '2048' }
# Possible options are documented in puppet-nova nova_flavor type.
# Defaults to {}.
#
# [*amphora_driver*]
# (optional) Name of driver for communicating with amphorae
# Defaults to 'amphora_haproxy_rest_driver'
#
# [*compute_driver*]
# (optional) Name of driver for managing amphorae VMs
# Defaults to 'compute_nova_driver'
#
# [*network_driver*]
# (optional) Name of network driver for configuring networking
# for amphorae.
# Defaults to 'allowed_address_pairs_driver' (neutron based)
#
# [*amp_ssh_key_name*]
# (optional) Name of Openstack SSH keypair for communicating with amphora
# Defaults to 'octavia-ssh-key'
#
# [*enable_ssh_access*]
# (optional) Enable SSH key configuration for amphorae. Note that setting
# to false disables configuration of SSH key related properties.
# Defaults to true
#
# [*key_path*]
# (optional) full path to the private key for the amphora SSH key
# Defaults to '/etc/octavia/.ssh/octavia_ssh_key'
#
# [*manage_keygen*]
# (optional) Whether or not create OpenStack keypair for communicating with amphora
# Defaults to false
#
# [*amp_project_name*]
# (optional) Set the project to be used for creating load balancer instances.
# Defaults to undef
#
class octavia::worker (
$manage_service = true,
$enabled = true,
$package_ensure = 'present',
$amp_flavor_id = '65',
$amp_image_tag = $::os_service_default,
$amp_secgroup_list = $::os_service_default,
$amp_boot_network_list = [],
$loadbalancer_topology = $::os_service_default,
$manage_nova_flavor = true,
$nova_flavor_config = {},
$amphora_driver = 'amphora_haproxy_rest_driver',
$compute_driver = 'compute_nova_driver',
$network_driver = 'allowed_address_pairs_driver',
$amp_ssh_key_name = 'octavia-ssh-key',
$enable_ssh_access = true,
$key_path = '/etc/octavia/.ssh/octavia_ssh_key',
$manage_keygen = false,
$amp_project_name = undef
) inherits octavia::params {
include ::octavia::deps
validate_hash($nova_flavor_config)
if ! is_service_default($loadbalancer_topology) and ! ($loadbalancer_topology in ['SINGLE', 'ACTIVE_STANDBY']) {
fail('load balancer topology must be one of SINGLE or ACTIVE_STANDBY')
}
if ! $amp_flavor_id {
if $manage_nova_flavor {
fail('When managing Nova flavor, octavia::worker::amp_flavor_id is required.')
} else {
warning('octavia::worker::amp_flavor_id is empty, Octavia Worker might not work correctly.')
}
} else {
if $manage_nova_flavor {
$octavia_flavor = { "octavia_${amp_flavor_id}" =>
{ 'id' => $amp_flavor_id,
'project' => $amp_project_name
}
}
$octavia_flavor_defaults = {
'ensure' => 'present',
'ram' => '1024',
'disk' => '2',
'vcpus' => '1',
'is_public' => false,
'tag' => ['octavia']
}
$nova_flavor_defaults = merge($octavia_flavor_defaults, $nova_flavor_config)
create_resources('nova_flavor', $octavia_flavor, $nova_flavor_defaults)
Nova_flavor<| tag == 'octavia' |> ~> Service['octavia-worker']
}
}
package { 'octavia-worker':
ensure => $package_ensure,
name => $::octavia::params::worker_package_name,
tag => ['openstack', 'octavia-package'],
}
if $manage_service {
if $enabled {
$service_ensure = 'running'
} else {
$service_ensure = 'stopped'
}
}
service { 'octavia-worker':
ensure => $service_ensure,
name => $::octavia::params::worker_service_name,
enable => $enabled,
hasstatus => true,
hasrestart => true,
tag => ['octavia-service'],
}
if $manage_keygen and ! $enable_ssh_access {
fail('SSH key management cannot be enabled when SSH key access is disabled')
}
if $manage_keygen {
exec {'create_amp_key_dir':
path => ['/bin', '/usr/bin'],
command => "mkdir -p ${key_path}",
creates => $key_path
}
file { 'amp_key_dir':
ensure => directory,
path => $key_path,
mode => '0700',
group => 'octavia',
owner => 'octavia'
}
ssh_keygen { $amp_ssh_key_name:
user => 'octavia',
type => 'rsa',
bits => 2048,
filename => "${key_path}/${amp_ssh_key_name}",
comment => 'Used for Octavia Service VM'
}
Package<| tag == 'octavia-package' |>
-> Exec['create_amp_key_dir']
-> File['amp_key_dir']
-> Ssh_keygen[$amp_ssh_key_name]
}
if $enable_ssh_access {
$ssh_key_name_real = $amp_ssh_key_name
$key_path_real = $key_path
}
else {
$ssh_key_name_real = $::os_service_default
$key_path_real = $::os_service_default
}
octavia_config {
'controller_worker/amp_flavor_id' : value => $amp_flavor_id;
'controller_worker/amp_image_tag' : value => $amp_image_tag;
'controller_worker/amp_secgroup_list' : value => $amp_secgroup_list;
'controller_worker/amp_boot_network_list' : value => $amp_boot_network_list;
'controller_worker/loadbalancer_topology' : value => $loadbalancer_topology;
'controller_worker/amphora_driver' : value => $amphora_driver;
'controller_worker/compute_driver' : value => $compute_driver;
'controller_worker/network_driver' : value => $network_driver;
'controller_worker/amp_ssh_key_name' : value => $ssh_key_name_real;
'haproxy_amphora/key_path' : value => $key_path_real;
}
}