diff --git a/manifests/init.pp b/manifests/init.pp index 10754284..ab598995 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -144,6 +144,70 @@ # (optional) Define queues as "durable" to rabbitmq. (boolean value) # 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. +# # [*use_syslog*] # (optional) Use syslog for logging # Defaults to undef. @@ -241,6 +305,22 @@ class ironic ( $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, $database_connection = undef, $database_max_retries = undef, $database_idle_timeout = undef, @@ -344,6 +424,25 @@ class ironic ( rabbit_port => $rabbit_port, rabbit_ha_queues => $rabbit_ha_queues, } + } elsif $rpc_backend == 'amqp' { + oslo::messaging::amqp { 'ironic_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, + } } else { ironic_config { 'DEFAULT/rpc_backend': value => $rpc_backend } } diff --git a/releasenotes/notes/add_oslo_messaging_amqp-27bd89e08e019a7c.yaml b/releasenotes/notes/add_oslo_messaging_amqp-27bd89e08e019a7c.yaml new file mode 100644 index 00000000..4c0b5fdc --- /dev/null +++ b/releasenotes/notes/add_oslo_messaging_amqp-27bd89e08e019a7c.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support for oslo_messaging_amqp backend via puppet-oslo resource diff --git a/spec/classes/ironic_init_spec.rb b/spec/classes/ironic_init_spec.rb index e5b21afd..2cf82d9b 100644 --- a/spec/classes/ironic_init_spec.rb +++ b/spec/classes/ironic_init_spec.rb @@ -65,6 +65,10 @@ describe 'ironic' do end end + context 'with amqp rpc_backend value' do + it_configures 'amqp support' + end + end shared_examples_for 'a ironic base installation' do @@ -228,6 +232,60 @@ describe 'ironic' do end end + shared_examples_for 'amqp support' do + context 'with default parameters' do + before { params.merge!( :rpc_backend => 'amqp' ) } + + it { is_expected.to contain_ironic_config('DEFAULT/rpc_backend').with_value('amqp') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/server_request_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/broadcast_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/group_request_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/container_name').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/idle_timeout').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/trace').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_ca_file').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_cert_file').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_key_file').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_key_password').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/allow_insecure_clients').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_mechanisms').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_config_dir').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_config_name').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/username').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/password').with_value('') } + end + + context 'with overriden amqp parameters' do + before { params.merge!( + :rpc_backend => 'amqp', + :amqp_idle_timeout => '60', + :amqp_trace => true, + :amqp_ssl_ca_file => '/path/to/ca.cert', + :amqp_ssl_cert_file => '/path/to/certfile', + :amqp_ssl_key_file => '/path/to/key', + :amqp_username => 'amqp_user', + :amqp_password => 'password', + ) } + + it { is_expected.to contain_ironic_config('DEFAULT/rpc_backend').with_value('amqp') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/server_request_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/broadcast_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/group_request_prefix').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/container_name').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/idle_timeout').with_value('60') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/trace').with_value('true') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_ca_file').with_value('/path/to/ca.cert') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_cert_file').with_value('/path/to/certfile') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/ssl_key_file').with_value('/path/to/key') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/allow_insecure_clients').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_mechanisms').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_config_dir').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/sasl_config_name').with_value('') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/username').with_value('amqp_user') } + it { is_expected.to contain_ironic_config('oslo_messaging_amqp/password').with_value('password') } + end + end + context 'on Debian platforms' do let :facts do @default_facts.merge({ :osfamily => 'Debian' })