diff --git a/.fixtures.yml b/.fixtures.yml index 4ae8866e..af30f27a 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -3,5 +3,8 @@ fixtures: aviator: git://github.com/aimonb/puppet_aviator.git mysql: git://github.com/puppetlabs/puppetlabs-mysql.git stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git + rabbitmq: + repo: 'git://github.com/puppetlabs/puppetlabs-rabbitmq' + ref: 'origin/4.x' symlinks: 'openstacklib': "#{source_dir}" diff --git a/manifests/messaging/rabbitmq.pp b/manifests/messaging/rabbitmq.pp new file mode 100644 index 00000000..16f6c62a --- /dev/null +++ b/manifests/messaging/rabbitmq.pp @@ -0,0 +1,105 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Author: Emilien Macchi +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# == Definition: openstacklib::messaging::rabbitmq +# +# This resource creates RabbitMQ resources for an OpenStack service. +# +# == Parameters: +# +# [*userid*] +# (optional) The username to use when connecting to Rabbit +# Defaults to 'guest' +# +# [*password*] +# (optional) The password to use when connecting to Rabbit +# Defaults to 'guest' +# +# [*virtual_host*] +# (optional) The virtual host to use when connecting to Rabbit +# Defaults to '/' +# +# [*is_admin*] +# (optional) If the user should be admin or not +# Defaults to false +# +# [*configure_permission*] +# (optional) Define configure permission +# Defaults to '.*' +# +# [*write_permission*] +# (optional) Define write permission +# Defaults to '.*' +# +# [*read_permission*] +# (optional) Define read permission +# Defaults to '.*' +# +# [*manage_user*] +# (optional) Manage or not the user +# Defaults to true +# +# [*manage_user_permissions*] +# (optional) Manage or not user permissions +# Defaults to true +# +# [*manage_vhost*] +# (optional) Manage or not the vhost +# Defaults to true +# +define openstacklib::messaging::rabbitmq( + $userid = 'guest', + $password = 'guest', + $virtual_host = '/', + $is_admin = false, + $configure_permission = '.*', + $write_permission = '.*', + $read_permission = '.*', + $manage_user = true, + $manage_user_permissions = true, + $manage_vhost = true, +) { + + if $manage_user { + if $userid == 'guest' { + $is_admin_real = false + } else { + $is_admin_real = $is_admin + } + ensure_resource('rabbitmq_user', $userid, { + 'admin' => $is_admin_real, + 'password' => $password, + 'provider' => 'rabbitmqctl', + }) + } + + if $manage_user_permissions { + ensure_resource('rabbitmq_user_permissions', "${userid}@${virtual_host}", { + 'configure_permission' => $configure_permission, + 'write_permission' => $write_permission, + 'read_permission' => $read_permission, + 'provider' => 'rabbitmqctl', + }) + } + + if $manage_vhost { + ensure_resource('rabbitmq_vhost', $virtual_host, { + 'provider' => 'rabbitmqctl', + }) + } + +} diff --git a/metadata.json b/metadata.json index 42b743e6..b82842ce 100644 --- a/metadata.json +++ b/metadata.json @@ -33,6 +33,7 @@ "dependencies": [ { "name": "aimonb/aviator", "version_requirement": ">=0.4.2 <1.0.0" }, { "name": "puppetlabs/mysql", "version_requirement": ">=2.2.0 <3.0.0" }, - { "name": "puppetlabs/stdlib", "version_requirement": ">=4.0.0 <5.0.0" } + { "name": "puppetlabs/stdlib", "version_requirement": ">=4.0.0 <5.0.0" }, + { "name": "puppetlabs/rabbitmq", "version_requirement": ">=4.0.0 <5.0.0" } ] } diff --git a/spec/defines/openstacklib_messaging_rabbitmq_spec.rb b/spec/defines/openstacklib_messaging_rabbitmq_spec.rb new file mode 100644 index 00000000..953c53be --- /dev/null +++ b/spec/defines/openstacklib_messaging_rabbitmq_spec.rb @@ -0,0 +1,101 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Author: Emilien Macchi +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +require 'spec_helper' + +describe 'openstacklib::messaging::rabbitmq' do + + let (:title) { 'nova' } + + shared_examples 'openstacklib::messaging::rabbitmq examples' do + + let :params do + {} + end + + context 'with default parameters' do + it { should contain_rabbitmq_user('guest').with( + :admin => false, + :password => 'guest', + :provider => 'rabbitmqctl', + )} + it { should contain_rabbitmq_user_permissions('guest@/').with( + :configure_permission => '.*', + :write_permission => '.*', + :read_permission => '.*', + :provider => 'rabbitmqctl', + )} + it { should contain_rabbitmq_vhost('/').with( + :provider => 'rabbitmqctl', + )} + end + + context 'with custom parameters' do + before :each do + params.merge!( + :userid => 'nova', + :password => 'secrete', + :virtual_host => '/nova', + :is_admin => true, + :configure_permission => '.nova', + :write_permission => '.nova', + :read_permission => '.nova' + ) + end + + it { should contain_rabbitmq_user('nova').with( + :admin => true, + :password => 'secrete', + :provider => 'rabbitmqctl', + )} + it { should contain_rabbitmq_user_permissions('nova@/nova').with( + :configure_permission => '.nova', + :write_permission => '.nova', + :read_permission => '.nova', + :provider => 'rabbitmqctl', + )} + it { should contain_rabbitmq_vhost('/nova').with( + :provider => 'rabbitmqctl', + )} + end + + context 'when disabling vhost management' do + before :each do + params.merge!( :manage_vhost => false ) + end + + it { should_not contain_rabbitmq_vhost } + end + + end + + context 'on a Debian osfamily' do + let :facts do + { :osfamily => "Debian" } + end + + include_examples 'openstacklib::messaging::rabbitmq examples' + end + + context 'on a RedHat osfamily' do + let :facts do + { :osfamily => 'RedHat' } + end + + include_examples 'openstacklib::messaging::rabbitmq examples' + end +end