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:
Alex Schultz 2016-01-04 16:30:18 -07:00
parent 2187d1ba1b
commit af9f5be5e6
4 changed files with 48 additions and 4 deletions

View File

@ -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')

View File

@ -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")

View File

@ -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
}

View File

@ -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