Improvements for oslo::db define
* Add support for mongodb backend * Add tag for db_backend_package resource * Add unit tests * Fix create_resources Change-Id: I4f59dff23e7736f8632f7fc6f3967ac5eb3fc3dc
This commit is contained in:
parent
6108afc9de
commit
a06fbf0784
|
@ -79,7 +79,7 @@
|
||||||
# [*db_inc_retry_interval*]
|
# [*db_inc_retry_interval*]
|
||||||
# (Optional) If True, increases the interval between retries of
|
# (Optional) If True, increases the interval between retries of
|
||||||
# a database operation up to db_max_retry_interval.
|
# a database operation up to db_max_retry_interval.
|
||||||
# Defaults to $::os_service_default.
|
# Defaults to $::os_service_default
|
||||||
#
|
#
|
||||||
# [*db_max_retry_interval*]
|
# [*db_max_retry_interval*]
|
||||||
# (Optional) If db_inc_retry_interval is set, the maximum seconds between
|
# (Optional) If db_inc_retry_interval is set, the maximum seconds between
|
||||||
|
@ -119,10 +119,12 @@ define oslo::db(
|
||||||
$use_tpool = $::os_service_default,
|
$use_tpool = $::os_service_default,
|
||||||
){
|
){
|
||||||
|
|
||||||
|
include ::oslo::params
|
||||||
|
|
||||||
if !is_service_default($connection) {
|
if !is_service_default($connection) {
|
||||||
|
|
||||||
validate_re($connection,
|
validate_re($connection,
|
||||||
'^(sqlite|mysql(\+pymysql)?|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')
|
'^(sqlite|mysql(\+pymysql)?|postgresql|mongodb):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||||
|
|
||||||
case $connection {
|
case $connection {
|
||||||
/^mysql(\+pymysql)?:\/\//: {
|
/^mysql(\+pymysql)?:\/\//: {
|
||||||
|
@ -138,6 +140,9 @@ define oslo::db(
|
||||||
$backend_package = false
|
$backend_package = false
|
||||||
require 'postgresql::lib::python'
|
require 'postgresql::lib::python'
|
||||||
}
|
}
|
||||||
|
/^mongodb:\/\//: {
|
||||||
|
$backend_package = $::oslo::params::pymongo_package_name
|
||||||
|
}
|
||||||
/^sqlite:\/\//: {
|
/^sqlite:\/\//: {
|
||||||
$backend_package = $::oslo::params::sqlite_package_name
|
$backend_package = $::oslo::params::sqlite_package_name
|
||||||
}
|
}
|
||||||
|
@ -150,30 +155,35 @@ define oslo::db(
|
||||||
package { 'db_backend_package':
|
package { 'db_backend_package':
|
||||||
ensure => present,
|
ensure => present,
|
||||||
name => $backend_package,
|
name => $backend_package,
|
||||||
|
tag => 'openstack',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
create_resources($name, {'database/sqlite_db' => { value => $sqlite_db }})
|
$database_options = {
|
||||||
create_resources($name, {'database/sqlite_synchronous' => { value => $sqlite_synchronous }})
|
'database/sqlite_db' => { value => $sqlite_db },
|
||||||
create_resources($name, {'database/backend' => { value => $backend }})
|
'database/sqlite_synchronous' => { value => $sqlite_synchronous },
|
||||||
create_resources($name, {'database/connection' => { value => $connection, secret => true }})
|
'database/backend' => { value => $backend },
|
||||||
create_resources($name, {'database/slave_connection' => { value => $slave_connection, secret => true }})
|
'database/connection' => { value => $connection, secret => true },
|
||||||
create_resources($name, {'database/mysql_sql_mode' => { value => $mysql_sql_mode }})
|
'database/slave_connection' => { value => $slave_connection, secret => true },
|
||||||
create_resources($name, {'database/idle_timeout' => { value => $idle_timeout }})
|
'database/mysql_sql_mode' => { value => $mysql_sql_mode },
|
||||||
create_resources($name, {'database/min_pool_size' => { value => $min_pool_size }})
|
'database/idle_timeout' => { value => $idle_timeout },
|
||||||
create_resources($name, {'database/max_pool_size' => { value => $max_pool_size }})
|
'database/min_pool_size' => { value => $min_pool_size },
|
||||||
create_resources($name, {'database/max_retries' => { value => $max_retries }})
|
'database/max_pool_size' => { value => $max_pool_size },
|
||||||
create_resources($name, {'database/retry_interval' => { value => $retry_interval }})
|
'database/max_retries' => { value => $max_retries },
|
||||||
create_resources($name, {'database/max_overflow' => { value => $max_overflow }})
|
'database/retry_interval' => { value => $retry_interval },
|
||||||
create_resources($name, {'database/connection_debug' => { value => $connection_debug }})
|
'database/max_overflow' => { value => $max_overflow },
|
||||||
create_resources($name, {'database/connection_trace' => { value => $connection_trace }})
|
'database/connection_debug' => { value => $connection_debug },
|
||||||
create_resources($name, {'database/pool_timeout' => { value => $pool_timeout }})
|
'database/connection_trace' => { value => $connection_trace },
|
||||||
create_resources($name, {'database/use_db_reconnect' => { value => $use_db_reconnect }})
|
'database/pool_timeout' => { value => $pool_timeout },
|
||||||
create_resources($name, {'database/db_retry_interval' => { value => $db_retry_interval }})
|
'database/use_db_reconnect' => { value => $use_db_reconnect },
|
||||||
create_resources($name, {'database/db_inc_retry_interval' => { value => $db_inc_retry_interval }})
|
'database/db_retry_interval' => { value => $db_retry_interval },
|
||||||
create_resources($name, {'database/db_max_retry_interval' => { value => $db_max_retry_interval }})
|
'database/db_inc_retry_interval' => { value => $db_inc_retry_interval },
|
||||||
create_resources($name, {'database/db_max_retries' => { value => $db_max_retries }})
|
'database/db_max_retry_interval' => { value => $db_max_retry_interval },
|
||||||
create_resources($name, {'database/use_tpool' => { value => $use_tpool }})
|
'database/db_max_retries' => { value => $db_max_retries },
|
||||||
|
'database/use_tpool' => { value => $use_tpool },
|
||||||
|
}
|
||||||
|
|
||||||
|
create_resources($name, $database_options)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,12 @@ class oslo::params {
|
||||||
'RedHat': {
|
'RedHat': {
|
||||||
$sqlite_package_name = undef
|
$sqlite_package_name = undef
|
||||||
$pymysql_package_name = undef
|
$pymysql_package_name = undef
|
||||||
|
$pymongo_package_name = 'python-pymongo'
|
||||||
}
|
}
|
||||||
'Debian': {
|
'Debian': {
|
||||||
$sqlite_package_name = 'python-pysqlite2'
|
$sqlite_package_name = 'python-pysqlite2'
|
||||||
$pymysql_package_name = 'python-pymysql'
|
$pymysql_package_name = 'python-pymysql'
|
||||||
|
$pymongo_package_name = 'python-pymongo'
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
fail("Unsupported osfamily: ${::osfamily} operatingsystem")
|
fail("Unsupported osfamily: ${::osfamily} operatingsystem")
|
||||||
|
|
|
@ -0,0 +1,196 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'oslo::db' do
|
||||||
|
|
||||||
|
let (:title) { 'keystone_config' }
|
||||||
|
|
||||||
|
shared_examples 'shared examples' do
|
||||||
|
|
||||||
|
context 'with default parameters' do
|
||||||
|
it 'configure oslo_db default params' do
|
||||||
|
is_expected.to contain_keystone_config('database/sqlite_db').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/sqlite_synchronous').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/backend').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/connection').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/slave_connection').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/mysql_sql_mode').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/idle_timeout').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/min_pool_size').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/max_pool_size').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/max_retries').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/retry_interval').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/max_overflow').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/connection_debug').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/connection_trace').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/pool_timeout').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/use_db_reconnect').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/db_retry_interval').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/db_inc_retry_interval').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/db_max_retry_interval').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/db_max_retries').with_value('<SERVICE DEFAULT>')
|
||||||
|
is_expected.to contain_keystone_config('database/use_tpool').with_value('<SERVICE DEFAULT>')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with overridden parameters' do
|
||||||
|
let :params do
|
||||||
|
{
|
||||||
|
:backend => 'sqlalchemy',
|
||||||
|
:connection => 'mysql+pymysql://db:db@localhost/db',
|
||||||
|
:mysql_sql_mode => 'TRADITIONAL',
|
||||||
|
:idle_timeout => '3601',
|
||||||
|
:min_pool_size => '2',
|
||||||
|
:max_pool_size => '100',
|
||||||
|
:max_retries => '10',
|
||||||
|
:retry_interval => '10',
|
||||||
|
:max_overflow => '50',
|
||||||
|
:connection_debug => '0',
|
||||||
|
:connection_trace => true,
|
||||||
|
:pool_timeout => '10',
|
||||||
|
:use_db_reconnect => true,
|
||||||
|
:db_retry_interval => '1',
|
||||||
|
:db_inc_retry_interval => true,
|
||||||
|
:db_max_retry_interval => '10',
|
||||||
|
:db_max_retries => '20',
|
||||||
|
:use_tpool => true,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'configures database parameters' do
|
||||||
|
is_expected.to contain_keystone_config('database/backend').with_value('sqlalchemy')
|
||||||
|
is_expected.to contain_keystone_config('database/connection').with_value('mysql+pymysql://db:db@localhost/db')
|
||||||
|
is_expected.to contain_keystone_config('database/mysql_sql_mode').with_value('TRADITIONAL')
|
||||||
|
is_expected.to contain_keystone_config('database/idle_timeout').with_value('3601')
|
||||||
|
is_expected.to contain_keystone_config('database/min_pool_size').with_value('2')
|
||||||
|
is_expected.to contain_keystone_config('database/max_pool_size').with_value('100')
|
||||||
|
is_expected.to contain_keystone_config('database/max_retries').with_value('10')
|
||||||
|
is_expected.to contain_keystone_config('database/retry_interval').with_value('10')
|
||||||
|
is_expected.to contain_keystone_config('database/max_overflow').with_value('50')
|
||||||
|
is_expected.to contain_keystone_config('database/connection_debug').with_value('0')
|
||||||
|
is_expected.to contain_keystone_config('database/connection_trace').with_value(true)
|
||||||
|
is_expected.to contain_keystone_config('database/pool_timeout').with_value('10')
|
||||||
|
is_expected.to contain_keystone_config('database/use_db_reconnect').with_value(true)
|
||||||
|
is_expected.to contain_keystone_config('database/db_retry_interval').with_value('1')
|
||||||
|
is_expected.to contain_keystone_config('database/db_inc_retry_interval').with_value(true)
|
||||||
|
is_expected.to contain_keystone_config('database/db_max_retry_interval').with_value('10')
|
||||||
|
is_expected.to contain_keystone_config('database/db_max_retries').with_value('20')
|
||||||
|
is_expected.to contain_keystone_config('database/use_tpool').with_value(true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with mongodb backend' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'mongodb://localhost:1234/db' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'install the proper backend package' do
|
||||||
|
is_expected.to contain_package('db_backend_package').with(
|
||||||
|
:ensure => 'present',
|
||||||
|
:name => 'python-pymongo',
|
||||||
|
:tag => 'openstack'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with specific mongodb connection string' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'mongodb://user:password@host1:27017,host2:27017,host3:27017/db_name?replicaSet=replica&readPreference=primaryPreferred' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to contain_keystone_config('database/connection').with_value(
|
||||||
|
'mongodb://user:password@host1:27017,host2:27017,host3:27017/db_name?replicaSet=replica&readPreference=primaryPreferred').with_secret(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with pymysql connection' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'mysql+pymysql://db:db@localhost/db' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to contain_class('oslo::params') }
|
||||||
|
it { is_expected.to contain_keystone_config('database/connection').with_value('mysql+pymysql://db:db@localhost/db').with_secret(true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with postgresql backend' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'postgresql://db:db@localhost/db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'install the proper backend package' do
|
||||||
|
is_expected.to contain_package('python-psycopg2').with(:ensure => 'present')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with incorrect database_connection string' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'foo://db:db@localhost/db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_raises 'a Puppet::Error', /validate_re/
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with incorrect pymysql database_connection string' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'foo+pymysql://db:db@localhost/db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_raises 'a Puppet::Error', /validate_re/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'on Debian platforms' do
|
||||||
|
let :facts do
|
||||||
|
@default_facts.merge({ :osfamily => 'Debian',
|
||||||
|
:operatingsystem => 'Debian',
|
||||||
|
:operatingsystemrelease => 'jessie',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'using pymysql driver' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'mysql+pymysql:///db:db@localhost/db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'install the proper backend package' do
|
||||||
|
is_expected.to contain_package('db_backend_package').with(
|
||||||
|
:ensure => 'present',
|
||||||
|
:name => 'python-pymysql',
|
||||||
|
:tag => 'openstack'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with sqlite backend' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'sqlite:///var/lib/db.db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'install the proper backend package' do
|
||||||
|
is_expected.to contain_package('db_backend_package').with(
|
||||||
|
:ensure => 'present',
|
||||||
|
:name => 'python-pysqlite2',
|
||||||
|
:tag => 'openstack'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
include_examples 'shared examples'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'on Redhat platforms' do
|
||||||
|
let :facts do
|
||||||
|
@default_facts.merge({ :osfamily => 'RedHat',
|
||||||
|
:operatingsystemrelease => '7.1',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'using pymysql driver' do
|
||||||
|
let :params do
|
||||||
|
{ :connection => 'mysql+pymysql:///db:db@localhost/db', }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.not_to contain_package('db_backend_package') }
|
||||||
|
end
|
||||||
|
|
||||||
|
include_examples 'shared examples'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue