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
|
include ::designate::params
|
||||||
|
|
||||||
validate_re($database_connection,
|
validate_re($database_connection,
|
||||||
'(mysql):\/\/(\S+:\S+@\S+\/\S+)?')
|
'(mysql(\+pymysql)?):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||||
|
|
||||||
case $database_connection {
|
case $database_connection {
|
||||||
/^mysql:\/\//: {
|
/^mysql(\+pymysql)?:\/\//: {
|
||||||
$backend_package = false
|
|
||||||
require 'mysql::bindings'
|
require 'mysql::bindings'
|
||||||
require 'mysql::bindings::python'
|
require 'mysql::bindings::python'
|
||||||
|
if $database_connection =~ /^mysql\+pymysql/ {
|
||||||
|
$backend_package = $::designate::params::pymysql_package_name
|
||||||
|
} else {
|
||||||
|
$backend_package = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
fail('Unsupported backend configured')
|
fail('Unsupported backend configured')
|
||||||
|
|
|
@ -22,6 +22,7 @@ class designate::params {
|
||||||
$api_service_name = 'openstack-designate-api'
|
$api_service_name = 'openstack-designate-api'
|
||||||
$central_service_name = 'openstack-designate-central'
|
$central_service_name = 'openstack-designate-central'
|
||||||
$sink_service_name = 'openstack-designate-sink'
|
$sink_service_name = 'openstack-designate-sink'
|
||||||
|
$pymysql_package_name = undef
|
||||||
}
|
}
|
||||||
'Debian': {
|
'Debian': {
|
||||||
# package name
|
# package name
|
||||||
|
@ -35,6 +36,7 @@ class designate::params {
|
||||||
$api_service_name = 'designate-api'
|
$api_service_name = 'designate-api'
|
||||||
$central_service_name = 'designate-central'
|
$central_service_name = 'designate-central'
|
||||||
$sink_service_name = 'designate-sink'
|
$sink_service_name = 'designate-sink'
|
||||||
|
$pymysql_package_name = 'python-pymysql'
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
fail("Unsupported osfamily: ${::osfamily} operatingsystem")
|
fail("Unsupported osfamily: ${::osfamily} operatingsystem")
|
||||||
|
|
|
@ -55,7 +55,7 @@ describe 'basic designate' do
|
||||||
include ::designate::client
|
include ::designate::client
|
||||||
class { '::designate::agent': }
|
class { '::designate::agent': }
|
||||||
class { '::designate::db':
|
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
|
include ::designate::dns
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,22 @@ describe 'designate::db' do
|
||||||
it_raises 'a Puppet::Error', /validate_re/
|
it_raises 'a Puppet::Error', /validate_re/
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
context 'on Debian platforms' do
|
context 'on Debian platforms' do
|
||||||
|
@ -50,6 +66,20 @@ describe 'designate::db' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it_configures 'designate::db'
|
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
|
end
|
||||||
|
|
||||||
context 'on RedHat platforms' do
|
context 'on RedHat platforms' do
|
||||||
|
@ -58,6 +88,14 @@ describe 'designate::db' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it_configures 'designate::db'
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue