diff --git a/manifests/db.pp b/manifests/db.pp index 69d22057..9fb010d0 100644 --- a/manifests/db.pp +++ b/manifests/db.pp @@ -49,25 +49,17 @@ class octavia::db ( $database_db_max_retries = $::os_service_default, ) { - $database_connection_real = pick($::octavia::database_connection, $database_connection) - $database_idle_timeout_real = pick($::octavia::database_idle_timeout, $database_idle_timeout) - $database_min_pool_size_real = pick($::octavia::database_min_pool_size, $database_min_pool_size) - $database_max_pool_size_real = pick($::octavia::database_max_pool_size, $database_max_pool_size) - $database_max_retries_real = pick($::octavia::database_max_retries, $database_max_retries) - $database_retry_interval_real = pick($::octavia::database_retry_interval, $database_retry_interval) - $database_max_overflow_real = pick($::octavia::database_max_overflow, $database_max_overflow) - - validate_re($database_connection_real, + validate_re($database_connection, '^(sqlite|mysql(\+pymysql)?|postgresql):\/\/(\S+:\S+@\S+\/\S+)?') oslo::db { 'octavia_config': - connection => $database_connection_real, - idle_timeout => $database_idle_timeout_real, - min_pool_size => $database_min_pool_size_real, - max_pool_size => $database_max_pool_size_real, - max_retries => $database_max_retries_real, - retry_interval => $database_retry_interval_real, - max_overflow => $database_max_overflow_real, + connection => $database_connection, + idle_timeout => $database_idle_timeout, + min_pool_size => $database_min_pool_size, + max_pool_size => $database_max_pool_size, + max_retries => $database_max_retries, + retry_interval => $database_retry_interval, + max_overflow => $database_max_overflow, db_max_retries => $database_db_max_retries, } diff --git a/manifests/init.pp b/manifests/init.pp index 81b88ef0..5ba98a19 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -4,11 +4,283 @@ # # === Parameters # -# [*sample_parameter*] -# Explanation of what this parameter affects and what it defaults to. +# [*ensure_package*] +# (optional) The state of aodh packages +# Defaults to 'present' # -class octavia { +# [*default_transport_url*] +# (optional) A URL representing the messaging driver to use and its full +# configuration. Transport URLs take the form: +# transport://user:pass@host1:port[,hostN:portN]/virtual_host +# Defaults to $::os_service_default +# +# [*rpc_backend*] +# (optional) The rpc backend implementation to use, can be: +# amqp (for AMQP 1.0 protocol) +# rabbit (for rabbitmq) +# zmq (for zeromq) +# Defaults to 'rabbit' +# +# [*rabbit_host*] +# (optional) Location of rabbitmq installation. +# Defaults to $::os_service_default +# +# [*rabbit_hosts*] +# (optional) List of clustered rabbit servers. +# Defaults to $::os_service_default +# +# [*rabbit_port*] +# (optional) Port for rabbitmq instance. +# Defaults to $::os_service_default +# +# [*rabbit_password*] +# (optional) Password used to connect to rabbitmq. +# Defaults to $::os_service_default +# +# [*rabbit_userid*] +# (optional) User used to connect to rabbitmq. +# Defaults to $::os_service_default +# +# [*rabbit_virtual_host*] +# (optional) The RabbitMQ virtual host. +# Defaults to $::os_service_default +# +# [*rabbit_use_ssl*] +# (optional) Connect over SSL for RabbitMQ +# Defaults to $::os_service_default +# +# [*rabbit_ha_queues*] +# (optional) Use HA queues in RabbitMQ. +# Defaults to $::os_service_default +# +# [*rabbit_heartbeat_timeout_threshold*] +# (optional) Number of seconds after which the RabbitMQ broker is considered +# down if the heartbeat keepalive fails. Any value >0 enables heartbeats. +# Heartbeating helps to ensure the TCP connection to RabbitMQ isn't silently +# closed, resulting in missed or lost messages from the queue. +# (Requires kombu >= 3.0.7 and amqp >= 1.4.0) +# Defaults to $::os_service_default +# +# [*rabbit_heartbeat_rate*] +# (optional) How often during the rabbit_heartbeat_timeout_threshold period to +# check the heartbeat on RabbitMQ connection. (i.e. rabbit_heartbeat_rate=2 +# when rabbit_heartbeat_timeout_threshold=60, the heartbeat will be checked +# every 30 seconds. +# Defaults to $::os_service_default +# +# [*kombu_ssl_ca_certs*] +# (optional) SSL certification authority file (valid only if SSL enabled). +# Defaults to $::os_service_default +# +# [*kombu_ssl_certfile*] +# (optional) SSL cert file (valid only if SSL enabled). +# Defaults to $::os_service_default +# +# [*kombu_ssl_keyfile*] +# (optional) SSL key file (valid only if SSL enabled). +# Defaults to $::os_service_default +# +# [*kombu_ssl_version*] +# (optional) SSL version to use (valid only if SSL enabled). +# Valid values are TLSv1, SSLv23 and SSLv3. SSLv2 may be +# available on some distributions. +# Defaults to $::os_service_default +# +# [*kombu_reconnect_delay*] +# (optional) How long to wait before reconnecting in response to an AMQP +# consumer cancel notification. +# Defaults to '$::os_service_default +# +# [*kombu_compression*] +# (optional) Possible values are: gzip, bz2. If not set compression will not +# be used. This option may notbe available in future versions. EXPERIMENTAL. +# (string value) +# Defaults to $::os_service_default +# +# [*amqp_durable_queues*] +# (optional) Define queues as "durable" to rabbitmq. +# Defaults to $::os_service_default +# +# [*amqp_server_request_prefix*] +# (Optional) Address prefix used when sending to a specific server +# Defaults to $::os_service_default. +# +# [*amqp_broadcast_prefix*] +# (Optional) address prefix used when broadcasting to all servers +# Defaults to $::os_service_default. +# +# [*amqp_group_request_prefix*] +# (Optional) address prefix when sending to any server in group +# Defaults to $::os_service_default. +# +# [*amqp_container_name*] +# (Optional) Name for the AMQP container +# Defaults to $::os_service_default. +# +# [*amqp_idle_timeout*] +# (Optional) Timeout for inactive connections +# Defaults to $::os_service_default. +# +# [*amqp_trace*] +# (Optional) Debug: dump AMQP frames to stdout +# Defaults to $::os_service_default. +# +# [*amqp_ssl_ca_file*] +# (Optional) CA certificate PEM file to verify server certificate +# Defaults to $::os_service_default. +# +# [*amqp_ssl_cert_file*] +# (Optional) Identifying certificate PEM file to present to clients +# Defaults to $::os_service_default. +# +# [*amqp_ssl_key_file*] +# (Optional) Private key PEM file used to sign cert_file certificate +# Defaults to $::os_service_default. +# +# [*amqp_ssl_key_password*] +# (Optional) Password for decrypting ssl_key_file (if encrypted) +# Defaults to $::os_service_default. +# +# [*amqp_allow_insecure_clients*] +# (Optional) Accept clients using either SSL or plain TCP +# Defaults to $::os_service_default. +# +# [*amqp_sasl_mechanisms*] +# (Optional) Space separated list of acceptable SASL mechanisms +# Defaults to $::os_service_default. +# +# [*amqp_sasl_config_dir*] +# (Optional) Path to directory that contains the SASL configuration +# Defaults to $::os_service_default. +# +# [*amqp_sasl_config_name*] +# (Optional) Name of configuration file (without .conf suffix) +# Defaults to $::os_service_default. +# +# [*amqp_username*] +# (Optional) User name for message broker authentication +# Defaults to $::os_service_default. +# +# [*amqp_password*] +# (Optional) Password for message broker authentication +# Defaults to $::os_service_default. +# +# [*notification_transport_url*] +# (optional) A URL representing the messaging driver to use for notifications +# and its full configuration. Transport URLs take the form: +# transport://user:pass@host1:port[,hostN:portN]/virtual_host +# Defaults to $::os_service_default +# +# [*notification_driver*] +# (optional) Driver or drivers to handle sending notifications. +# Value can be a string or a list. +# Defaults to $::os_service_default +# +# [*notification_topics*] +# (optional) AMQP topic used for OpenStack notifications +# Defaults to $::os_service_default +# +class octavia ( + $ensure_package = 'present', + $default_transport_url = $::os_service_default, + $rpc_backend = 'rabbit', + $rabbit_host = $::os_service_default, + $rabbit_hosts = $::os_service_default, + $rabbit_password = $::os_service_default, + $rabbit_port = $::os_service_default, + $rabbit_userid = $::os_service_default, + $rabbit_virtual_host = $::os_service_default, + $rabbit_use_ssl = $::os_service_default, + $rabbit_heartbeat_timeout_threshold = $::os_service_default, + $rabbit_heartbeat_rate = $::os_service_default, + $rabbit_ha_queues = $::os_service_default, + $kombu_ssl_ca_certs = $::os_service_default, + $kombu_ssl_certfile = $::os_service_default, + $kombu_ssl_keyfile = $::os_service_default, + $kombu_ssl_version = $::os_service_default, + $kombu_reconnect_delay = $::os_service_default, + $kombu_compression = $::os_service_default, + $amqp_durable_queues = $::os_service_default, + $amqp_server_request_prefix = $::os_service_default, + $amqp_broadcast_prefix = $::os_service_default, + $amqp_group_request_prefix = $::os_service_default, + $amqp_container_name = $::os_service_default, + $amqp_idle_timeout = $::os_service_default, + $amqp_trace = $::os_service_default, + $amqp_ssl_ca_file = $::os_service_default, + $amqp_ssl_cert_file = $::os_service_default, + $amqp_ssl_key_file = $::os_service_default, + $amqp_ssl_key_password = $::os_service_default, + $amqp_allow_insecure_clients = $::os_service_default, + $amqp_sasl_mechanisms = $::os_service_default, + $amqp_sasl_config_dir = $::os_service_default, + $amqp_sasl_config_name = $::os_service_default, + $amqp_username = $::os_service_default, + $amqp_password = $::os_service_default, + $notification_transport_url = $::os_service_default, + $notification_driver = $::os_service_default, + $notification_topics = $::os_service_default, +) inherits octavia::params { - include ::octavia::params + include ::octavia::logging + include ::octavia::db + + package { 'octavia': + ensure => $ensure_package, + name => $::octavia::params::common_package_name, + tag => ['openstack', 'octavia-package'], + } + + if $rpc_backend == 'rabbit' { + oslo::messaging::rabbit { 'octavia_config': + rabbit_userid => $rabbit_userid, + rabbit_password => $rabbit_password, + rabbit_virtual_host => $rabbit_virtual_host, + rabbit_host => $rabbit_host, + rabbit_port => $rabbit_port, + rabbit_hosts => $rabbit_hosts, + rabbit_ha_queues => $rabbit_ha_queues, + heartbeat_timeout_threshold => $rabbit_heartbeat_timeout_threshold, + heartbeat_rate => $rabbit_heartbeat_rate, + rabbit_use_ssl => $rabbit_use_ssl, + kombu_reconnect_delay => $kombu_reconnect_delay, + kombu_ssl_version => $kombu_ssl_version, + kombu_ssl_keyfile => $kombu_ssl_keyfile, + kombu_ssl_certfile => $kombu_ssl_certfile, + kombu_ssl_ca_certs => $kombu_ssl_ca_certs, + kombu_compression => $kombu_compression, + amqp_durable_queues => $amqp_durable_queues, + } + } + elsif $rpc_backend == 'amqp' { + oslo::messaging::amqp { 'octavia_config': + server_request_prefix => $amqp_server_request_prefix, + broadcast_prefix => $amqp_broadcast_prefix, + group_request_prefix => $amqp_group_request_prefix, + container_name => $amqp_container_name, + idle_timeout => $amqp_idle_timeout, + trace => $amqp_trace, + ssl_ca_file => $amqp_ssl_ca_file, + ssl_cert_file => $amqp_ssl_cert_file, + ssl_key_file => $amqp_ssl_key_file, + ssl_key_password => $amqp_ssl_key_password, + allow_insecure_clients => $amqp_allow_insecure_clients, + sasl_mechanisms => $amqp_sasl_mechanisms, + sasl_config_dir => $amqp_sasl_config_dir, + sasl_config_name => $amqp_sasl_config_name, + username => $amqp_username, + password => $amqp_password, + } + } + + oslo::messaging::default { 'octavia_config': + transport_url => $default_transport_url, + } + + oslo::messaging::notifications { 'octavia_config': + transport_url => $notification_transport_url, + driver => $notification_driver, + topics => $notification_topics, + } } diff --git a/manifests/params.pp b/manifests/params.pp index 1322fa06..cb205494 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -4,8 +4,10 @@ class octavia::params { case $::osfamily { 'RedHat': { + $common_package_name = 'openstack-octavia-common' } 'Debian': { + $common_package_name = 'octavia-common' } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem") diff --git a/spec/acceptance/octavia_spec.rb b/spec/acceptance/octavia_spec.rb new file mode 100644 index 00000000..a1721c59 --- /dev/null +++ b/spec/acceptance/octavia_spec.rb @@ -0,0 +1,59 @@ +require 'spec_helper_acceptance' + +describe 'basic octavia' do + + context 'default parameters' do + + it 'should work with no errors' do + pp= <<-EOS + include ::openstack_integration + include ::openstack_integration::repos + include ::openstack_integration::rabbitmq + include ::openstack_integration::mysql + include ::openstack_integration::keystone + + rabbitmq_user { 'octavia': + admin => true, + password => 'an_even_bigger_secret', + provider => 'rabbitmqctl', + require => Class['rabbitmq'], + } + + rabbitmq_user_permissions { 'octavia@/': + configure_permission => '.*', + write_permission => '.*', + read_permission => '.*', + provider => 'rabbitmqctl', + require => Class['rabbitmq'], + } + + class { '::octavia::db::mysql': + password => 'a_big_secret', + } + class { '::octavia::keystone::auth': + password => 'a_big_secret', + } + + # Octavia is not packaged on Ubuntu platform. + if $::osfamily == 'RedHat' { + class { '::octavia::db': + database_connection => 'mysql+pymysql://octavia:a_big_secret@127.0.0.1/octavia?charset=utf8', + } + class { '::octavia::logging': + debug => true, + } + class { '::octavia': + rabbit_userid => 'octavia', + rabbit_password => 'an_even_bigger_secret', + rabbit_host => '127.0.0.1', + } + } + EOS + + # Run it twice and test for idempotency + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_changes => true) + end + end + +end diff --git a/spec/classes/octavia_init_spec.rb b/spec/classes/octavia_init_spec.rb new file mode 100644 index 00000000..868fe62d --- /dev/null +++ b/spec/classes/octavia_init_spec.rb @@ -0,0 +1,278 @@ +require 'spec_helper' + +describe 'octavia' do + + shared_examples 'octavia' do + + context 'with default parameters' do + it 'contains the logging class' do + is_expected.to contain_class('octavia::logging') + end + + it 'contains the db class' do + is_expected.to contain_class('octavia::db') + end + + it 'installs packages' do + is_expected.to contain_package('octavia').with( + :name => platform_params[:octavia_common_package], + :ensure => 'present', + :tag => ['openstack', 'octavia-package'] + ) + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('DEFAULT/rpc_backend').with_value('rabbit') + is_expected.to contain_octavia_config('DEFAULT/transport_url').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_password').with_value('').with_secret(true) + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_port').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_userid').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_virtual_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/heartbeat_rate').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_compression').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_notifications/transport_url').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_notifications/driver').with_value('') + end + end + + context 'with overridden parameters' do + let :params do + { + :default_transport_url => 'rabbit://rabbit_user:password@localhost:5673', + :rabbit_host => 'rabbit', + :rabbit_userid => 'rabbit_user', + :rabbit_port => '5673', + :rabbit_password => 'password', + :rabbit_ha_queues => 'undef', + :rabbit_heartbeat_timeout_threshold => '60', + :rabbit_heartbeat_rate => '10', + :kombu_compression => 'gzip', + :ensure_package => '2012.1.1-15.el6', + :notification_transport_url => 'rabbit://rabbit_user:password@localhost:5673', + :notification_driver => 'ceilometer.compute.octavia_notifier', + :notification_topics => 'openstack', + } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('DEFAULT/rpc_backend').with_value('rabbit') + is_expected.to contain_octavia_config('DEFAULT/transport_url').with_value('rabbit://rabbit_user:password@localhost:5673') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_host').with_value('rabbit') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_password').with_value('password').with_secret(true) + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_port').with_value('5673') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_userid').with_value('rabbit_user') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_virtual_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('60') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/heartbeat_rate').with_value('10') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_compression').with_value('gzip') + end + + it 'configures various things' do + is_expected.to contain_octavia_config('oslo_messaging_notifications/transport_url').with_value('rabbit://rabbit_user:password@localhost:5673') + is_expected.to contain_octavia_config('oslo_messaging_notifications/driver').with_value('ceilometer.compute.octavia_notifier') + is_expected.to contain_octavia_config('oslo_messaging_notifications/topics').with_value('openstack') + end + + context 'with multiple notification_driver' do + before { params.merge!( :notification_driver => ['ceilometer.compute.octavia_notifier', 'octavia.openstack.common.notifier.rpc_notifier']) } + + it { is_expected.to contain_octavia_config('oslo_messaging_notifications/driver').with_value( + 'ceilometer.compute.octavia_notifier,octavia.openstack.common.notifier.rpc_notifier' + ) } + end + + end + + context 'with rabbit_hosts parameter' do + let :params do + { :rabbit_hosts => ['rabbit:5673', 'rabbit2:5674'] } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_port').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673,rabbit2:5674') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(true) + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('') + end + end + + context 'with rabbit_hosts parameter (one server)' do + let :params do + { :rabbit_hosts => ['rabbit:5673'] } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_port').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('') + end + end + + context 'with kombu_reconnect_delay set to 5.0' do + let :params do + { :kombu_reconnect_delay => '5.0' } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('5.0') + end + end + + context 'with rabbit_ha_queues set to true' do + let :params do + { :rabbit_ha_queues => 'true' } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(true) + end + end + + context 'with rabbit_ha_queues set to false and with rabbit_hosts' do + let :params do + { :rabbit_ha_queues => 'false', + :rabbit_hosts => ['rabbit:5673'] } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(false) + end + end + + context 'with amqp_durable_queues parameter' do + let :params do + { :rabbit_hosts => ['rabbit:5673'], + :amqp_durable_queues => 'true' } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_host').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_port').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/amqp_durable_queues').with_value(true) + end + end + + context 'with rabbit ssl enabled with kombu' do + let :params do + { :rabbit_hosts => ['rabbit:5673'], + :rabbit_use_ssl => true, + :kombu_ssl_ca_certs => '/etc/ca.cert', + :kombu_ssl_certfile => '/etc/certfile', + :kombu_ssl_keyfile => '/etc/key', + :kombu_ssl_version => 'TLSv1', } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value(true) + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('/etc/ca.cert') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('/etc/certfile') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('/etc/key') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('TLSv1') + end + end + + context 'with rabbit ssl enabled without kombu' do + let :params do + { :rabbit_hosts => ['rabbit:5673'], + :rabbit_use_ssl => true, } + end + + it 'configures rabbit' do + is_expected.to contain_octavia_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value(true) + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('') + end + end + + context 'with amqp rpc_backend' do + let :params do + { :rpc_backend => 'amqp' } + end + + context 'with default parameters' do + it 'configures amqp' do + is_expected.to contain_octavia_config('DEFAULT/rpc_backend').with_value('amqp') + is_expected.to contain_octavia_config('oslo_messaging_amqp/server_request_prefix').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/broadcast_prefix').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/group_request_prefix').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/container_name').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/idle_timeout').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/trace').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_ca_file').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_cert_file').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_key_file').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_key_password').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/allow_insecure_clients').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/sasl_mechanisms').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/sasl_config_dir').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/sasl_config_name').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/username').with_value('') + is_expected.to contain_octavia_config('oslo_messaging_amqp/password').with_value('') + end + end + end + + context 'with overriden amqp parameters' do + let :params do + { :rpc_backend => 'amqp', + :default_transport_url => 'amqp://amqp_user:password@localhost:5672', + :amqp_idle_timeout => '60', + :amqp_trace => true, + :amqp_ssl_ca_file => '/etc/ca.cert', + :amqp_ssl_cert_file => '/etc/certfile', + :amqp_ssl_key_file => '/etc/key', + :amqp_username => 'amqp_user', + :amqp_password => 'password', + } + end + + it 'configures amqp' do + is_expected.to contain_octavia_config('DEFAULT/rpc_backend').with_value('amqp') + is_expected.to contain_octavia_config('DEFAULT/transport_url').with_value('amqp://amqp_user:password@localhost:5672') + is_expected.to contain_octavia_config('oslo_messaging_amqp/idle_timeout').with_value('60') + is_expected.to contain_octavia_config('oslo_messaging_amqp/trace').with_value('true') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_ca_file').with_value('/etc/ca.cert') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_cert_file').with_value('/etc/certfile') + is_expected.to contain_octavia_config('oslo_messaging_amqp/ssl_key_file').with_value('/etc/key') + is_expected.to contain_octavia_config('oslo_messaging_amqp/username').with_value('amqp_user') + is_expected.to contain_octavia_config('oslo_messaging_amqp/password').with_value('password') + end + end + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + + let(:platform_params) do + case facts[:osfamily] + when 'Debian' + { :octavia_common_package => 'octavia-common' } + when 'RedHat' + { :octavia_common_package => 'openstack-octavia-common' } + end + end + it_behaves_like 'octavia' + end + end + + +end