From ffaf8fa3a361959157eb6d8af71603c391f82e58 Mon Sep 17 00:00:00 2001 From: Sebastien Badia Date: Tue, 20 Oct 2015 18:18:17 +0200 Subject: [PATCH] db: Use postgresql lib class for psycopg package This patch introduce the same design than mysql for postgresql by requiring dedicated lib::python class instead of declaring a new resource package within nova module. This patch also fixes the typo on s/neutron/nova/ for sqlite_package_name. Change-Id: Ie978ad5c6bc82e07f2638f6ec722e2bbcb146449 --- manifests/db.pp | 7 ++++-- manifests/params.pp | 2 -- spec/classes/nova_db_spec.rb | 44 ++++++++++++++++++++++++++++++++++-- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/manifests/db.pp b/manifests/db.pp index 0bc9ac8fb..5fb320137 100644 --- a/manifests/db.pp +++ b/manifests/db.pp @@ -65,6 +65,8 @@ class nova::db ( $database_max_overflow = 20, ) { + include ::nova::params + # NOTE(spredzy): In order to keep backward compatibility we rely on the pick function # to use nova:: first the nova::db:: $database_connection_real = pick($::nova::database_connection, $database_connection) @@ -88,10 +90,11 @@ class nova::db ( require 'mysql::bindings::python' } /^postgresql:\/\//: { - $backend_package = $::neutron::params::psycopg_package_name + $backend_package = false + require 'postgresql::lib::python' } /^sqlite:\/\//: { - $backend_package = $::neutron::params::sqlite_package_name + $backend_package = $::nova::params::sqlite_package_name } default: { fail('Unsupported backend configured') diff --git a/manifests/params.pp b/manifests/params.pp index aba26ee9b..74d0d810c 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -26,7 +26,6 @@ class nova::params { $vncproxy_package_name = 'openstack-nova-novncproxy' $serialproxy_package_name = 'openstack-nova-serialproxy' $spicehtml5proxy_package_name = 'openstack-nova-console' - $psycopg_package_name = 'python-psycopg2' $sqlite_package_name = undef # service names $api_service_name = 'openstack-nova-api' @@ -82,7 +81,6 @@ class nova::params { $scheduler_package_name = 'nova-scheduler' $tgt_package_name = 'tgt' $serialproxy_package_name = 'nova-serialproxy' - $psycopg_package_name = 'python-psycopg2' $sqlite_package_name = 'python-pysqlite2' # service names $api_service_name = 'nova-api' diff --git a/spec/classes/nova_db_spec.rb b/spec/classes/nova_db_spec.rb index 5c2e8693e..9c841cb58 100644 --- a/spec/classes/nova_db_spec.rb +++ b/spec/classes/nova_db_spec.rb @@ -33,19 +33,59 @@ describe 'nova::db' do it { is_expected.to contain_nova_config('database/retry_interval').with_value('10') } end + + context 'with postgresql backend' do + let :params do + { :database_connection => 'postgresql://nova:nova@localhost/nova', } + 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 + { :database_connection => 'redis://nova:nova@localhost/nova', } + end + + it_raises 'a Puppet::Error', /validate_re/ + end + end context 'on Debian platforms' do let :facts do - { :osfamily => 'Debian' } + { :osfamily => 'Debian', + :operatingsystem => 'Debian', + :operatingsystemrelease => 'jessie', + } end it_configures 'nova::db' + + context 'with sqlite backend' do + let :params do + { :database_connection => 'sqlite:///var/lib/nova/nova.sqlite', } + end + + it 'install the proper backend package' do + is_expected.to contain_package('nova-backend-package').with( + :ensure => 'present', + :name => 'python-pysqlite2', + :tag => 'openstack' + ) + end + + end end context 'on Redhat platforms' do let :facts do - { :osfamily => 'RedHat' } + { :osfamily => 'RedHat', + :operatingsystemrelease => '7.1', + } end it_configures 'nova::db'