diff --git a/manifests/database/nosql.pp b/manifests/database/nosql.pp index cc68acb8..2db7dc2e 100644 --- a/manifests/database/nosql.pp +++ b/manifests/database/nosql.pp @@ -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'], } } diff --git a/manifests/storage/rbd.pp b/manifests/storage/rbd.pp index 0bc9161c..1b37e27a 100644 --- a/manifests/storage/rbd.pp +++ b/manifests/storage/rbd.pp @@ -25,6 +25,7 @@ class cloud::storage::rbd ( auth_type => 'cephx', cluster_network => $cluster_network, public_network => $public_network, + enable_service => true } Exec { diff --git a/manifests/telemetry/server.pp b/manifests/telemetry/server.pp index 99f3b21f..a9f65015 100644 --- a/manifests/telemetry/server.pp +++ b/manifests/telemetry/server.pp @@ -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 diff --git a/spec/classes/cloud_database_nosql_spec.rb b/spec/classes/cloud_database_nosql_spec.rb index 0e1827a9..0bbc3e8d 100644 --- a/spec/classes/cloud_database_nosql_spec.rb +++ b/spec/classes/cloud_database_nosql_spec.rb @@ -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 diff --git a/spec/classes/cloud_telemetry_server_spec.rb b/spec/classes/cloud_telemetry_server_spec.rb index 6ee574c2..31a3230b 100644 --- a/spec/classes/cloud_telemetry_server_spec.rb +++ b/spec/classes/cloud_telemetry_server_spec.rb @@ -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'