Implement openstacklib::messaging::rabbitmq
* Add puppetlabs-rabbitmq 4.x as a dependency in fixtures & metadata.json * Implement openstacklib::messaging::rabbitmq to manage user, permissions and vhost in RabbitMQ (+ unit tests) * Documentation Change-Id: I65190035b51f3d72e4302dae7fad92a280d63cff
This commit is contained in:
@@ -3,5 +3,8 @@ fixtures:
|
|||||||
aviator: git://github.com/aimonb/puppet_aviator.git
|
aviator: git://github.com/aimonb/puppet_aviator.git
|
||||||
mysql: git://github.com/puppetlabs/puppetlabs-mysql.git
|
mysql: git://github.com/puppetlabs/puppetlabs-mysql.git
|
||||||
stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git
|
stdlib: git://github.com/puppetlabs/puppetlabs-stdlib.git
|
||||||
|
rabbitmq:
|
||||||
|
repo: 'git://github.com/puppetlabs/puppetlabs-rabbitmq'
|
||||||
|
ref: 'origin/4.x'
|
||||||
symlinks:
|
symlinks:
|
||||||
'openstacklib': "#{source_dir}"
|
'openstacklib': "#{source_dir}"
|
||||||
|
|||||||
105
manifests/messaging/rabbitmq.pp
Normal file
105
manifests/messaging/rabbitmq.pp
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
||||||
|
#
|
||||||
|
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||||
|
#
|
||||||
|
# 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',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
"dependencies": [
|
"dependencies": [
|
||||||
{ "name": "aimonb/aviator", "version_requirement": ">=0.4.2 <1.0.0" },
|
{ "name": "aimonb/aviator", "version_requirement": ">=0.4.2 <1.0.0" },
|
||||||
{ "name": "puppetlabs/mysql", "version_requirement": ">=2.2.0 <3.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" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
101
spec/defines/openstacklib_messaging_rabbitmq_spec.rb
Normal file
101
spec/defines/openstacklib_messaging_rabbitmq_spec.rb
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
||||||
|
#
|
||||||
|
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||||
|
#
|
||||||
|
# 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
|
||||||
Reference in New Issue
Block a user