diff --git a/manifests/database/dbaas/api.pp b/manifests/database/dbaas/api.pp new file mode 100644 index 00000000..72234c7a --- /dev/null +++ b/manifests/database/dbaas/api.pp @@ -0,0 +1,53 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# == Class: cloud::database::dbaas::api +# +# Class to install API service of OpenStack Database as a Service (Trove) +# + +class cloud::database::dbaas::api( + $ks_trove_password = 'trovepassword', + $verbose = true, + $debug = true, + $use_syslog = true, + $api_eth = '127.0.0.1', + $ks_trove_public_port = '8779', + $ks_keystone_internal_host = '127.0.0.1', + $ks_keystone_internal_port = '5000', + $ks_keystone_internal_proto = 'http', +) { + + include 'cloud::database::dbaas' + + class { 'trove::api': + verbose => $verbose, + debug => $debug, + use_syslog => $use_syslog, + bind_host => $api_eth, + bind_port => $ks_trove_public_port, + auth_url => "${ks_keystone_internal_proto}://${ks_keystone_internal_host}:${ks_keystone_internal_port}/v2.0", + keystone_password => $ks_trove_password, + } + + @@haproxy::balancermember{"${::fqdn}-trove_api": + listening_service => 'trove_api_cluster', + server_names => $::hostname, + ipaddresses => $api_eth, + ports => $ks_trove_public_port, + options => 'check inter 2000 rise 2 fall 5' + } + +} diff --git a/manifests/database/dbaas/conductor.pp b/manifests/database/dbaas/conductor.pp new file mode 100644 index 00000000..9ef0903c --- /dev/null +++ b/manifests/database/dbaas/conductor.pp @@ -0,0 +1,39 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# == Class: cloud::database::dbaas::conductor +# +# Class to install Conductor service of OpenStack Database as a Service (Trove) +# + +class cloud::database::dbaas::conductor( + $ks_keystone_internal_host = '127.0.0.1', + $ks_keystone_internal_port = '5000', + $ks_keystone_internal_proto = 'http', + $verbose = true, + $debug = true, + $use_syslog = true, +) { + + include 'cloud::database::dbaas' + + class { 'trove::conductor': + auth_url => "${ks_keystone_internal_proto}://${ks_keystone_internal_host}:${ks_keystone_internal_port}/v2.0", + debug => $debug, + verbose => $verbose, + use_syslog => $use_syslog + } + +} diff --git a/manifests/database/dbaas/taskmanager.pp b/manifests/database/dbaas/taskmanager.pp new file mode 100644 index 00000000..4a7e6b03 --- /dev/null +++ b/manifests/database/dbaas/taskmanager.pp @@ -0,0 +1,39 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# == Class: cloud::database::dbaas::taskmanager +# +# Class to install Taskmanager service of OpenStack Database as a Service (Trove) +# + +class cloud::database::dbaas::taskmanager( + $ks_keystone_internal_host = '127.0.0.1', + $ks_keystone_internal_port = '5000', + $ks_keystone_internal_proto = 'http', + $debug = true, + $verbose = true, + $use_syslog = true +) { + + include 'cloud::database::dbaas' + + class { 'trove::taskmanager': + auth_url => "${ks_keystone_internal_proto}://${ks_keystone_internal_host}:${ks_keystone_internal_port}/v2.0", + debug => $debug, + verbose => $verbose, + use_syslog => $use_syslog + } + +} diff --git a/spec/classes/cloud_database_dbaas_api_spec.rb b/spec/classes/cloud_database_dbaas_api_spec.rb new file mode 100644 index 00000000..413853bb --- /dev/null +++ b/spec/classes/cloud_database_dbaas_api_spec.rb @@ -0,0 +1,99 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# Unit tests for cloud::database::dbaas::api class +# + +require 'spec_helper' + +describe 'cloud::database::dbaas::api' do + + shared_examples_for 'openstack database dbaas api' do + + let :pre_condition do + "class { 'cloud::database::dbaas': + trove_db_host => '10.0.0.1', + trove_db_user => 'trove', + trove_db_password => 'secrete', + nova_admin_username => 'trove', + nova_admin_password => 'trovepassword', + nova_admin_tenant_name => 'services', + rabbit_hosts => ['10.0.0.1'], + rabbit_password => 'secrete' }" + end + + let :params do + { :ks_keystone_internal_host => '10.0.0.1', + :ks_keystone_internal_proto => 'https', + :ks_trove_password => 'trovepassword', + :api_eth => '10.0.0.1', + :debug => true, + :verbose => true, + :use_syslog => true, + :ks_trove_public_port => '8779' } + end + + it 'configure trove common' do + should contain_class('trove').with( + :rabbit_userid => 'trove', + :rabbit_hosts => ['10.0.0.1'], + :rabbit_password => 'secrete', + :rabbit_virtual_host => '/', + :nova_proxy_admin_pass => 'trovepassword', + :nova_proxy_admin_user => 'trove', + :nova_proxy_admin_tenant_name => 'services', + :database_connection => 'mysql://trove:secrete@10.0.0.1/trove?charset=utf8', + ) + end + + it 'configure trove api' do + should contain_class('trove::api').with( + :verbose => true, + :debug => true, + :use_syslog => true, + :bind_host => '10.0.0.1', + :bind_port => '8779', + :auth_url => 'https://10.0.0.1:5000/v2.0', + :keystone_password => 'trovepassword' + ) + end + + it 'checks if Trove DB is populated' do + should contain_exec('trove_db_sync').with( + :command => 'trove-manage db sync', + :user => 'trove', + :path => '/usr/bin', + :unless => '/usr/bin/mysql trove -h 10.0.0.1 -u trove -psecrete -e "show tables" | /bin/grep Tables' + ) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'openstack database dbaas api' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + it_configures 'openstack database dbaas api' + end + +end diff --git a/spec/classes/cloud_database_dbaas_conductor_spec.rb b/spec/classes/cloud_database_dbaas_conductor_spec.rb new file mode 100644 index 00000000..f47a1bb3 --- /dev/null +++ b/spec/classes/cloud_database_dbaas_conductor_spec.rb @@ -0,0 +1,85 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# Unit tests for cloud::database::dbaas::conductor class +# + +require 'spec_helper' + +describe 'cloud::database::dbaas::conductor' do + + shared_examples_for 'openstack database dbaas conductor' do + + let :pre_condition do + "class { 'cloud::database::dbaas': + trove_db_host => '10.0.0.1', + trove_db_user => 'trove', + trove_db_password => 'secrete', + nova_admin_username => 'trove', + nova_admin_password => 'trovepassword', + nova_admin_tenant_name => 'services', + rabbit_hosts => ['10.0.0.1'], + rabbit_password => 'secrete' }" + end + + let :params do + { :ks_keystone_internal_host => '10.0.0.1', + :ks_keystone_internal_port => '5000', + :ks_keystone_internal_proto => 'https', + :debug => true, + :verbose => true, + :use_syslog => true } + end + + it 'configure trove common' do + should contain_class('trove').with( + :rabbit_userid => 'trove', + :rabbit_hosts => ['10.0.0.1'], + :rabbit_password => 'secrete', + :rabbit_virtual_host => '/', + :nova_proxy_admin_pass => 'trovepassword', + :nova_proxy_admin_user => 'trove', + :nova_proxy_admin_tenant_name => 'services', + :database_connection => 'mysql://trove:secrete@10.0.0.1/trove?charset=utf8', + ) + end + + it 'configure trove conductor' do + should contain_class('trove::conductor').with( + :verbose => true, + :debug => true, + :use_syslog => true, + :auth_url => 'https://10.0.0.1:5000/v2.0', + ) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'openstack database dbaas conductor' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + it_configures 'openstack database dbaas conductor' + end + +end diff --git a/spec/classes/cloud_database_dbaas_taskmanager_spec.rb b/spec/classes/cloud_database_dbaas_taskmanager_spec.rb new file mode 100644 index 00000000..8f5dfc03 --- /dev/null +++ b/spec/classes/cloud_database_dbaas_taskmanager_spec.rb @@ -0,0 +1,85 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# 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. +# +# Unit tests for cloud::database::dbaas::taskmanager class +# + +require 'spec_helper' + +describe 'cloud::database::dbaas::taskmanager' do + + shared_examples_for 'openstack database dbaas taskmanager' do + + let :pre_condition do + "class { 'cloud::database::dbaas': + trove_db_host => '10.0.0.1', + trove_db_user => 'trove', + trove_db_password => 'secrete', + nova_admin_username => 'trove', + nova_admin_password => 'trovepassword', + nova_admin_tenant_name => 'services', + rabbit_hosts => ['10.0.0.1'], + rabbit_password => 'secrete' }" + end + + let :params do + { :ks_keystone_internal_host => '10.0.0.1', + :ks_keystone_internal_port => '5000', + :ks_keystone_internal_proto => 'https', + :debug => true, + :verbose => true, + :use_syslog => true } + end + + it 'configure trove common' do + should contain_class('trove').with( + :rabbit_userid => 'trove', + :rabbit_hosts => ['10.0.0.1'], + :rabbit_password => 'secrete', + :rabbit_virtual_host => '/', + :nova_proxy_admin_pass => 'trovepassword', + :nova_proxy_admin_user => 'trove', + :nova_proxy_admin_tenant_name => 'services', + :database_connection => 'mysql://trove:secrete@10.0.0.1/trove?charset=utf8', + ) + end + + it 'configure trove taskmanager' do + should contain_class('trove::taskmanager').with( + :verbose => true, + :debug => true, + :use_syslog => true, + :auth_url => 'https://10.0.0.1:5000/v2.0', + ) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it_configures 'openstack database dbaas taskmanager' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + it_configures 'openstack database dbaas taskmanager' + end + +end