Merge pull request #278 from enovance/bug/56/spredzy

Enable mongodb replicaset
This commit is contained in:
Emilien Macchi 2014-02-24 17:50:44 +01:00
commit ff99b29f88
5 changed files with 80 additions and 29 deletions

View File

@ -29,10 +29,16 @@
# http://docs.mongodb.org/manual/reference/configuration-options/#nojournal
# Defaults to false
#
# [*replset_members*]
# (optional) Ceilometer Replica set members hostnames
# Should be an array. Example: ['node1', 'node2', node3']
# Default value in params
#
class cloud::database::nosql(
$bind_ip = $os_params::internal_netif_ip,
$nojournal = false,
$bind_ip = $os_params::internal_netif_ip,
$nojournal = false,
$replset_members = $os_params::mongo_nodes
) {
# bind_ip should be an array
@ -49,6 +55,24 @@ class cloud::database::nosql(
class { 'mongodb':
bind_ip => $bind_ip_real,
nojournal => $nojournal,
replset => 'ceilometer',
}
exec {'check_mongodb' :
command => "/usr/bin/mongo ${bind_ip}:27017",
logoutput => false,
tries => 60,
try_sleep => 5,
require => Service['mongodb'],
}
mongodb_replset{'ceilometer':
members => $replset_members,
before => Anchor['mongodb setup done'],
}
anchor {'mongodb setup done' :
require => Exec['check_mongodb'],
}
}

View File

@ -25,6 +25,7 @@ class cloud::storage::rbd (
auth_type => 'cephx',
cluster_network => $cluster_network,
public_network => $public_network,
enable_service => true
}
Exec {

View File

@ -21,25 +21,27 @@ class cloud::telemetry::server(
$ks_keystone_internal_proto = $os_params::ks_keystone_internal_proto,
$ks_ceilometer_internal_port = $os_params::ks_ceilometer_internal_port,
$ks_ceilometer_password = $os_params::ks_ceilometer_password,
$ceilometer_database_connection = $os_params::ceilometer_database_connection,
$api_eth = $os_params::api_eth,
$mongo_nodes = $os_params::mongo_nodes,
$mongo_primary = $os_params::mongo_primary,
){
include 'cloud::telemetry'
$db_conn = regsubst($ceilometer_database_connection, 'mongodb:\/\/(\.*)', '\2')
exec {'check_mongodb' :
command => "/usr/bin/mongo ${db_conn}",
logoutput => false,
tries => 60,
try_sleep => 5,
$s_mongo_nodes = join($mongo_nodes, ',')
$db_conn = "mongodb://${s_mongo_nodes}/ceilometer?replicaSet=ceilometer"
if $::hostname == $mongo_primary {
$sync_db = true
} else {
$sync_db = false
}
Service <| title == 'mongodb' |> -> Exec['check_mongodb']
# Install MongoDB database
class { 'ceilometer::db':
database_connection => $ceilometer_database_connection,
require => Exec['check_mongodb'],
database_connection => $db_conn,
sync_db => $sync_db,
require => Anchor['mongodb setup done'],
}
# Install Ceilometer-collector

View File

@ -23,8 +23,9 @@ describe 'cloud::database::nosql' do
shared_examples_for 'openstack database nosql' do
let :params do
{ :bind_ip => '10.0.0.1',
:nojournal => false }
{ :bind_ip => '10.0.0.1',
:nojournal => false,
:replset_members => ['node1', 'node2', 'node3'] }
end
it 'configure mongodb server' do
@ -35,6 +36,18 @@ describe 'cloud::database::nosql' do
)
end
it 'configure mongodb replicasets' do
should contain_exec('check_mongodb').with(
:command => "/usr/bin/mongo 10.0.0.1:27017",
:logoutput => false,
:tries => 60,
:try_sleep => 5
)
should contain_mongodb_replset('ceilometer').with(
:members => ['node1', 'node2', 'node3']
)
should contain_anchor('mongodb setup done')
end
end
context 'on Debian platforms' do

View File

@ -44,7 +44,8 @@ describe 'cloud::telemetry::server' do
:ks_ceilometer_internal_port => '8777',
:ks_ceilometer_password => 'secrete',
:api_eth => '10.0.0.1',
:ceilometer_database_connection => 'mongodb://10.0.0.2/ceilometer' }
:mongo_nodes => ['node1', 'node2', 'node3'],
:mongo_primary => 'node1' }
end
it 'configure ceilometer common' do
@ -65,18 +66,6 @@ describe 'cloud::telemetry::server' do
)
end
it 'check mongodb is started' do
should contain_exec('check_mongodb').with({
:command => '/usr/bin/mongo 10.0.0.2/ceilometer',
})
end
it 'configure ceilometer db' do
should contain_class('ceilometer::db').with(
:database_connection => 'mongodb://10.0.0.2/ceilometer'
)
end
it 'configure ceilometer collector' do
should contain_class('ceilometer::collector')
end
@ -106,11 +95,32 @@ describe 'cloud::telemetry::server' do
)
end
context 'configure ceilometer db on primary mongodb node' do
it 'configure ceilometer db' do
should contain_class('ceilometer::db').with(
:sync_db => true,
:database_connection => 'mongodb://node1,node2,node3/ceilometer?replicaSet=ceilometer'
)
end
end
context 'configure ceilometer db on secondary mongodb node' do
before :each do
facts.merge!( :hostname => 'node2' )
end
it 'configure ceilometer db' do
should contain_class('ceilometer::db').with(
:sync_db => false,
:database_connection => 'mongodb://node1,node2,node3/ceilometer?replicaSet=ceilometer'
)
end
end
end
context 'on Debian platforms' do
let :facts do
{ :osfamily => 'Debian' }
{ :osfamily => 'Debian',
:hostname => 'node1' }
end
it_configures 'openstack telemetry server'
@ -118,7 +128,8 @@ describe 'cloud::telemetry::server' do
context 'on RedHat platforms' do
let :facts do
{ :osfamily => 'RedHat' }
{ :osfamily => 'RedHat',
:hostname => 'node1' }
end
it_configures 'openstack telemetry server'