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 # http://docs.mongodb.org/manual/reference/configuration-options/#nojournal
# Defaults to false # 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( class cloud::database::nosql(
$bind_ip = $os_params::internal_netif_ip, $bind_ip = $os_params::internal_netif_ip,
$nojournal = false, $nojournal = false,
$replset_members = $os_params::mongo_nodes
) { ) {
# bind_ip should be an array # bind_ip should be an array
@ -49,6 +55,24 @@ class cloud::database::nosql(
class { 'mongodb': class { 'mongodb':
bind_ip => $bind_ip_real, bind_ip => $bind_ip_real,
nojournal => $nojournal, 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', auth_type => 'cephx',
cluster_network => $cluster_network, cluster_network => $cluster_network,
public_network => $public_network, public_network => $public_network,
enable_service => true
} }
Exec { Exec {

View File

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

View File

@ -24,7 +24,8 @@ describe 'cloud::database::nosql' do
let :params do let :params do
{ :bind_ip => '10.0.0.1', { :bind_ip => '10.0.0.1',
:nojournal => false } :nojournal => false,
:replset_members => ['node1', 'node2', 'node3'] }
end end
it 'configure mongodb server' do it 'configure mongodb server' do
@ -35,6 +36,18 @@ describe 'cloud::database::nosql' do
) )
end 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 end
context 'on Debian platforms' do context 'on Debian platforms' do

View File

@ -44,7 +44,8 @@ describe 'cloud::telemetry::server' do
:ks_ceilometer_internal_port => '8777', :ks_ceilometer_internal_port => '8777',
:ks_ceilometer_password => 'secrete', :ks_ceilometer_password => 'secrete',
:api_eth => '10.0.0.1', :api_eth => '10.0.0.1',
:ceilometer_database_connection => 'mongodb://10.0.0.2/ceilometer' } :mongo_nodes => ['node1', 'node2', 'node3'],
:mongo_primary => 'node1' }
end end
it 'configure ceilometer common' do it 'configure ceilometer common' do
@ -65,18 +66,6 @@ describe 'cloud::telemetry::server' do
) )
end 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 it 'configure ceilometer collector' do
should contain_class('ceilometer::collector') should contain_class('ceilometer::collector')
end end
@ -106,11 +95,32 @@ describe 'cloud::telemetry::server' do
) )
end 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 end
context 'on Debian platforms' do context 'on Debian platforms' do
let :facts do let :facts do
{ :osfamily => 'Debian' } { :osfamily => 'Debian',
:hostname => 'node1' }
end end
it_configures 'openstack telemetry server' it_configures 'openstack telemetry server'
@ -118,7 +128,8 @@ describe 'cloud::telemetry::server' do
context 'on RedHat platforms' do context 'on RedHat platforms' do
let :facts do let :facts do
{ :osfamily => 'RedHat' } { :osfamily => 'RedHat',
:hostname => 'node1' }
end end
it_configures 'openstack telemetry server' it_configures 'openstack telemetry server'