Support of PyMySQL driver for MySQL backend
This change adds the ability to use the python-pymysql library as a backend for MySQL connections. This change also updates the acceptance test to leverage the pymysql driver. Change-Id: I9730266163166a9f75f68e25a26c6dcbf38fcea8
This commit is contained in:
parent
2187d1ba1b
commit
af9f5be5e6
|
@ -57,13 +57,17 @@ class designate::db (
|
|||
include ::designate::params
|
||||
|
||||
validate_re($database_connection,
|
||||
'(mysql):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||
'(mysql(\+pymysql)?):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||
|
||||
case $database_connection {
|
||||
/^mysql:\/\//: {
|
||||
$backend_package = false
|
||||
/^mysql(\+pymysql)?:\/\//: {
|
||||
require 'mysql::bindings'
|
||||
require 'mysql::bindings::python'
|
||||
if $database_connection =~ /^mysql\+pymysql/ {
|
||||
$backend_package = $::designate::params::pymysql_package_name
|
||||
} else {
|
||||
$backend_package = false
|
||||
}
|
||||
}
|
||||
default: {
|
||||
fail('Unsupported backend configured')
|
||||
|
|
|
@ -22,6 +22,7 @@ class designate::params {
|
|||
$api_service_name = 'openstack-designate-api'
|
||||
$central_service_name = 'openstack-designate-central'
|
||||
$sink_service_name = 'openstack-designate-sink'
|
||||
$pymysql_package_name = undef
|
||||
}
|
||||
'Debian': {
|
||||
# package name
|
||||
|
@ -35,6 +36,7 @@ class designate::params {
|
|||
$api_service_name = 'designate-api'
|
||||
$central_service_name = 'designate-central'
|
||||
$sink_service_name = 'designate-sink'
|
||||
$pymysql_package_name = 'python-pymysql'
|
||||
}
|
||||
default: {
|
||||
fail("Unsupported osfamily: ${::osfamily} operatingsystem")
|
||||
|
|
|
@ -55,7 +55,7 @@ describe 'basic designate' do
|
|||
include ::designate::client
|
||||
class { '::designate::agent': }
|
||||
class { '::designate::db':
|
||||
database_connection => 'mysql://designate:a_big_secret@127.0.0.1/designate?charset=utf8',
|
||||
database_connection => 'mysql+pymysql://designate:a_big_secret@127.0.0.1/designate?charset=utf8',
|
||||
}
|
||||
include ::designate::dns
|
||||
}
|
||||
|
|
|
@ -42,6 +42,22 @@ describe 'designate::db' do
|
|||
it_raises 'a Puppet::Error', /validate_re/
|
||||
end
|
||||
|
||||
context 'with specific parameters' do
|
||||
let :params do
|
||||
{ :database_connection => 'mysql+pymysql://designate:designate@localhost/designate',
|
||||
}
|
||||
end
|
||||
|
||||
it { is_expected.to contain_designate_config('storage:sqlalchemy/connection').with_value('mysql+pymysql://designate:designate@localhost/designate').with_secret(true) }
|
||||
end
|
||||
|
||||
context 'with MySQL-python library as backend package' do
|
||||
let :params do
|
||||
{ :database_connection => 'mysql://designate:designate@localhost/designate', }
|
||||
end
|
||||
|
||||
it { is_expected.to contain_package('python-mysqldb').with(:ensure => 'present') }
|
||||
end
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
|
@ -50,6 +66,20 @@ describe 'designate::db' do
|
|||
end
|
||||
|
||||
it_configures 'designate::db'
|
||||
|
||||
context 'using pymysql driver' do
|
||||
let :params do
|
||||
{ :database_connection => 'mysql+pymysql://designate:designate@localhost/designate', }
|
||||
end
|
||||
|
||||
it 'install the proper backend package' do
|
||||
is_expected.to contain_package('designate-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-pymysql',
|
||||
:tag => 'openstack'
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
|
@ -58,6 +88,14 @@ describe 'designate::db' do
|
|||
end
|
||||
|
||||
it_configures 'designate::db'
|
||||
|
||||
context 'using pymysql driver' do
|
||||
let :params do
|
||||
{ :database_connection => 'mysql+pymysql://designate:designate@localhost/designate', }
|
||||
end
|
||||
|
||||
it { is_expected.not_to contain_package('designate-backend-package') }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue