Merge "Support of PyMySQL driver for MySQL backend"

This commit is contained in:
Jenkins 2015-12-01 01:10:28 +00:00 committed by Gerrit Code Review
commit ef10d04a95
4 changed files with 38 additions and 8 deletions

View File

@ -81,13 +81,17 @@ class nova::db (
if $database_connection_real {
validate_re($database_connection_real,
'(sqlite|mysql|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')
'^(sqlite|mysql(\+pymysql)?|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')
case $database_connection_real {
/^mysql:\/\//: {
$backend_package = false
/^mysql(\+pymysql)?:\/\//: {
require 'mysql::bindings'
require 'mysql::bindings::python'
if $database_connection_real =~ /^mysql\+pymysql/ {
$backend_package = $::nova::params::pymysql_package_name
} else {
$backend_package = false
}
}
/^postgresql:\/\//: {
$backend_package = false

View File

@ -27,6 +27,7 @@ class nova::params {
$serialproxy_package_name = 'openstack-nova-serialproxy'
$spicehtml5proxy_package_name = 'openstack-nova-console'
$sqlite_package_name = undef
$pymysql_package_name = 'python2-PyMySQL'
# service names
$api_service_name = 'openstack-nova-api'
$cells_service_name = 'openstack-nova-cells'
@ -82,6 +83,7 @@ class nova::params {
$tgt_package_name = 'tgt'
$serialproxy_package_name = 'nova-serialproxy'
$sqlite_package_name = 'python-pysqlite2'
$pymysql_package_name = 'python-pymysql'
# service names
$api_service_name = 'nova-api'
$cells_service_name = 'nova-cells'

View File

@ -29,7 +29,7 @@ describe 'basic nova' do
# Nova resources
class { '::nova':
database_connection => 'mysql://nova:a_big_secret@127.0.0.1/nova?charset=utf8',
database_connection => 'mysql+pymysql://nova:a_big_secret@127.0.0.1/nova?charset=utf8',
rabbit_userid => 'nova',
rabbit_password => 'an_even_bigger_secret',
image_service => 'nova.image.glance.GlanceImageService',

View File

@ -20,17 +20,18 @@ describe 'nova::db' do
context 'with overriden parameters' do
before :each do
params.merge!(
:database_connection => 'mysql://user:pass@db/db',
:slave_connection => 'mysql://user:pass@slave/db',
:database_connection => 'mysql+pymysql://user:pass@db/db',
:slave_connection => 'mysql+pymysql://user:pass@slave/db',
)
end
it { is_expected.to contain_nova_config('database/connection').with_value('mysql://user:pass@db/db').with_secret(true) }
it { is_expected.to contain_nova_config('database/slave_connection').with_value('mysql://user:pass@slave/db').with_secret(true) }
it { is_expected.to contain_nova_config('database/connection').with_value('mysql+pymysql://user:pass@db/db').with_secret(true) }
it { is_expected.to contain_nova_config('database/slave_connection').with_value('mysql+pymysql://user:pass@slave/db').with_secret(true) }
it { is_expected.to contain_nova_config('database/idle_timeout').with_value('3600') }
it { is_expected.to contain_nova_config('database/min_pool_size').with_value('1') }
it { is_expected.to contain_nova_config('database/max_retries').with_value('10') }
it { is_expected.to contain_nova_config('database/retry_interval').with_value('10') }
it { is_expected.to contain_package('nova-backend-package').with({ :ensure => 'present', :name => platform_params[:pymysql_package_name] }) }
end
@ -45,6 +46,14 @@ describe 'nova::db' do
end
context 'with MySQL-python library as backend package' do
let :params do
{ :database_connection => 'mysql://user:pass@db/db', }
end
it { is_expected.to contain_package('python-mysqldb').with(:ensure => 'present') }
end
context 'with incorrect database_connection string' do
let :params do
{ :database_connection => 'redis://nova:nova@localhost/nova', }
@ -53,6 +62,13 @@ describe 'nova::db' do
it_raises 'a Puppet::Error', /validate_re/
end
context 'with incorrect pymysql database_connection string' do
let :params do
{ :database_connection => 'foo+pymysql://user:pass@db/db', }
end
it_raises 'a Puppet::Error', /validate_re/
end
end
context 'on Debian platforms' do
@ -63,6 +79,10 @@ describe 'nova::db' do
}
end
let :platform_params do
{ :pymysql_package_name => 'python-pymysql' }
end
it_configures 'nova::db'
context 'with sqlite backend' do
@ -88,6 +108,10 @@ describe 'nova::db' do
}
end
let :platform_params do
{ :pymysql_package_name => 'python2-PyMySQL' }
end
it_configures 'nova::db'
end