From b731e48bf4c4fba3b80edfdd0e058a5241ee1aab Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 11 Feb 2016 19:41:55 -0500 Subject: [PATCH] Add zaqar::messaging::mongodb This class is used to enable and configure the mongodb messaging driver. Change-Id: I1843aa1506103f92dd3bb8057eca9d2120a5d7b1 --- manifests/messaging/mongodb.pp | 96 ++++++++++++++++++++ spec/classes/zaqar_messaging_mongodb_spec.rb | 63 +++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 manifests/messaging/mongodb.pp create mode 100644 spec/classes/zaqar_messaging_mongodb_spec.rb diff --git a/manifests/messaging/mongodb.pp b/manifests/messaging/mongodb.pp new file mode 100644 index 0000000..9b28400 --- /dev/null +++ b/manifests/messaging/mongodb.pp @@ -0,0 +1,96 @@ +# == class: zaqar::messaging::mongodb +# +# [*uri*] +# Mongodb Connection URI. Required. +# +# [*ssl_keyfile*] +# The private keyfile used to identify the local connection against +# mongod. Default $::os_service_default +# Defaults to $::os_service_default. +# +# [*ssl_certfile*] +# The certificate file used to identify the local connection against +# mongod. (string value) +# Defaults to $::os_service_default. +# +# [*ssl_cert_reqs*] +# Specifies whether a certificate is required from the other side of +# the connection, and whether it will be validated if provided. It +# must be one of the three values ``CERT_NONE``(certificates ignored), +# ``CERT_OPTIONAL``(not required, but validated if provided), or +# ``CERT_REQUIRED``(required and validated). +# Defaults to $::os_service_default. +# +# [*ssl_ca_certs*] +# The ca_certs file contains a set of concatenated "certification +# authority" certificates, which are used to validate certificates +# passed from the other end of the connection. +# Defaults to $::os_service_default. +# +# [*database*] +# Database name. (string value). Defaults to $::os_service_default. +# +# [*max_attempts*] +# Maximum number of times to retry a failed operation. Currently only +# used for retrying a message post. +# Defaults to $::os_service_default. +# +# [*max_retry_sleep*] +# Maximum sleep interval between retries (actual sleep time increases +# linearly according to number of attempts performed). +# Defaults to $::os_service_default. +# +# [*max_retry_jitter*] +# Maximum jitter interval, to be added to the sleep interval, in order +# to decrease probability that parallel requests will retry at the +# same instant. (floating point value) +# Defaults to $::os_service_default. +# +# [*max_reconnect_attempts*] +# Maximum number of times to retry an operation that failed due to a +# primary node failover. (integer value) +# Defaults to $::os_service_default. +# +# [*reconnect_sleep*] +# Base sleep interval between attempts to reconnect after a primary +# node failover. The actual sleep time increases exponentially (power +# of 2) each time the operation is retried. (floating point value) +# Defaults to $::os_service_default. +# +# [*partitions*] +# Number of databases across which to partition message data, in order +# to reduce writer lock %. DO NOT change this setting after initial +# deployment. It MUST remain static. +# Defaults to $::os_service_default. +class zaqar::messaging::mongodb( + $uri, + $ssl_keyfile = $::os_service_default, + $ssl_certfile = $::os_service_default, + $ssl_cert_reqs = $::os_service_default, + $ssl_ca_certs = $::os_service_default, + $database = $::os_service_default, + $max_attempts = $::os_service_default, + $max_retry_sleep = $::os_service_default, + $max_retry_jitter = $::os_service_default, + $max_reconnect_attempts = $::os_service_default, + $reconnect_sleep = $::os_service_default, + $partitions = $::os_service_default, +) { + + zaqar_config { + 'drivers/message_store': value => 'mongodb'; + 'drivers:message_store:mongodb/uri': value => $uri, secret => true; + 'drivers:message_store:mongodb/ssl_keyfile': value => $ssl_keyfile; + 'drivers:message_store:mongodb/ssl_certfile': value => $ssl_certfile; + 'drivers:message_store:mongodb/ssl_cert_reqs': value => $ssl_cert_reqs; + 'drivers:message_store:mongodb/ssl_ca_certs': value => $ssl_ca_certs; + 'drivers:message_store:mongodb/database': value => $database; + 'drivers:message_store:mongodb/max_attempts': value => $max_attempts; + 'drivers:message_store:mongodb/max_retry_sleep': value => $max_retry_sleep; + 'drivers:message_store:mongodb/max_retry_jitter': value => $max_retry_jitter; + 'drivers:message_store:mongodb/max_reconnect_attempts': value => $max_reconnect_attempts; + 'drivers:message_store:mongodb/reconnect_sleep': value => $reconnect_sleep; + 'drivers:message_store:mongodb/partitions': value => $partitions; + } + +} diff --git a/spec/classes/zaqar_messaging_mongodb_spec.rb b/spec/classes/zaqar_messaging_mongodb_spec.rb new file mode 100644 index 0000000..e068c8e --- /dev/null +++ b/spec/classes/zaqar_messaging_mongodb_spec.rb @@ -0,0 +1,63 @@ +require 'spec_helper' + +describe 'zaqar::messaging::mongodb' do + + let :req_params do + { + :uri => 'mongodb://127.0.0.1:27017', + } + end + + let :facts do + { :osfamily => 'RedHat' } + end + + describe 'with only required params' do + let :params do + req_params + end + + it 'should config mongo messaging driver' do + is_expected.to contain_zaqar_config('drivers/message_store').with( + :value => 'mongodb' + ) + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/uri').with( + :value => 'mongodb://127.0.0.1:27017' + ) + end + + end + + describe 'with custom values' do + let :params do + req_params.merge!({ + :ssl_keyfile => 'keyfile', + :ssl_certfile => 'certfile', + :ssl_cert_reqs => 'cert_reqs', + :ssl_ca_certs => 'ca_certs', + :database => 'zaqar_db', + :max_attempts => '1', + :max_retry_sleep => '2', + :max_retry_jitter => '3', + :max_reconnect_attempts => '4', + :reconnect_sleep => '5', + :partitions => '6', + }) + end + + it 'configures custom values' do + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/ssl_keyfile').with_value('keyfile') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/ssl_certfile').with_value('certfile') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/ssl_cert_reqs').with_value('cert_reqs') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/ssl_ca_certs').with_value('ca_certs') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/database').with_value('zaqar_db') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/max_attempts').with_value('1') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/max_retry_sleep').with_value('2') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/max_retry_jitter').with_value('3') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/max_reconnect_attempts').with_value('4') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/reconnect_sleep').with_value('5') + is_expected.to contain_zaqar_config('drivers:message_store:mongodb/partitions').with_value('6') + end + end + +end