From 6ca03a90c40f1851923189dbf95d3e358c97be63 Mon Sep 17 00:00:00 2001 From: Benedikt Trefzer Date: Tue, 13 Jun 2023 09:12:35 +0200 Subject: [PATCH] remove legacy db connection check with proper types - includes new type check for slave type Change-Id: I170e46d65abe3399e69a33dabbe59b44adc90337 --- manifests/db.pp | 59 ++++++++++------------- spec/type_aliases/dbconn_mysql_spec.rb | 31 ++++++++++++ spec/type_aliases/dbconn_postgres_spec.rb | 31 ++++++++++++ spec/type_aliases/dbconn_spec.rb | 2 + spec/type_aliases/dbconn_sqlite_spec.rb | 31 ++++++++++++ types/dbconn.pp | 7 ++- types/dbconn/mysql.pp | 1 + types/dbconn/postgres.pp | 1 + types/dbconn/sqlite.pp | 1 + 9 files changed, 130 insertions(+), 34 deletions(-) create mode 100644 spec/type_aliases/dbconn_mysql_spec.rb create mode 100644 spec/type_aliases/dbconn_postgres_spec.rb create mode 100644 spec/type_aliases/dbconn_sqlite_spec.rb create mode 100644 types/dbconn/mysql.pp create mode 100644 types/dbconn/postgres.pp create mode 100644 types/dbconn/sqlite.pp diff --git a/manifests/db.pp b/manifests/db.pp index ae12be3..3875a35 100644 --- a/manifests/db.pp +++ b/manifests/db.pp @@ -109,13 +109,13 @@ # define oslo::db( $config = $name, - $config_group = 'database', + String[1] $config_group = 'database', $sqlite_synchronous = $facts['os_service_default'], $backend = $facts['os_service_default'], Boolean $manage_backend_package = true, $backend_package_ensure = present, - $connection = $facts['os_service_default'], - $slave_connection = $facts['os_service_default'], + Oslo::Dbconn $connection = $facts['os_service_default'], + Oslo::Dbconn $slave_connection = $facts['os_service_default'], $mysql_sql_mode = $facts['os_service_default'], $connection_recycle_time = $facts['os_service_default'], $max_pool_size = $facts['os_service_default'], @@ -134,40 +134,33 @@ define oslo::db( ) { include oslo::params - if !is_service_default($connection) { - validate_legacy(Oslo::Dbconn, 'validate_re', $connection, - ['^(sqlite|mysql(\+pymysql)?|postgresql(\+psycopg2)?):\/\/(\S+:\S+@\S+\/\S+)?']) - - if $manage_backend_package { - case $connection { - /^mysql(\+pymysql)?:\/\//: { - require 'mysql::bindings' - require 'mysql::bindings::python' - if $connection =~ /^mysql\+pymysql/ { - $backend_package = $::oslo::params::pymysql_package_name - } else { - $backend_package = false - } - } - /^postgresql(\+psycopg2)?:\/\//: { - $backend_package = false - require 'postgresql::lib::python' - } - /^sqlite:\/\//: { - $backend_package = $::oslo::params::sqlite_package_name - } - default: { - fail('Unsupported backend configured') + if $manage_backend_package { + case $connection { + Oslo::Dbconn::Mysql: { + require 'mysql::bindings' + require 'mysql::bindings::python' + if $connection =~ /^mysql\+pymysql/ { + $backend_package = $::oslo::params::pymysql_package_name + } else { + $backend_package = undef } } + Oslo::Dbconn::Postgres: { + $backend_package = undef + require 'postgresql::lib::python' + } + Oslo::Dbconn::Sqlite: { + $backend_package = $::oslo::params::sqlite_package_name + } + default: {} + } - if $backend_package and !defined(Package[$backend_package]) { - package { $backend_package: - ensure => $backend_package_ensure, - name => $backend_package, - tag => 'openstack', - } + if $backend_package and !defined(Package[$backend_package]) { + package { $backend_package: + ensure => $backend_package_ensure, + name => $backend_package, + tag => 'openstack', } } } diff --git a/spec/type_aliases/dbconn_mysql_spec.rb b/spec/type_aliases/dbconn_mysql_spec.rb new file mode 100644 index 0000000..f3765de --- /dev/null +++ b/spec/type_aliases/dbconn_mysql_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe 'Oslo::Dbconn::Mysql' do + describe 'valid types' do + context 'with valid types' do + [ + 'mysql+pymysql://db:db@localhost/db', + ].each do |value| + describe value.inspect do + it { is_expected.to allow_value(value) } + end + end + end + end + + describe 'invalid types' do + context 'with garbage inputs' do + [ + 'postgresql://db:db@localhost/db', + 'postgresql+psycopg2://db:db@localhost/db', + 'sqlite:///var/lib/db.db', + 'mongodb://db:db@localhost/db', + ].each do |value| + describe value.inspect do + it { is_expected.not_to allow_value(value) } + end + end + end + end +end + diff --git a/spec/type_aliases/dbconn_postgres_spec.rb b/spec/type_aliases/dbconn_postgres_spec.rb new file mode 100644 index 0000000..725d78a --- /dev/null +++ b/spec/type_aliases/dbconn_postgres_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe 'Oslo::Dbconn::Postgres' do + describe 'valid types' do + context 'with valid types' do + [ + 'postgresql://db:db@localhost/db', + 'postgresql+psycopg2://db:db@localhost/db', + ].each do |value| + describe value.inspect do + it { is_expected.to allow_value(value) } + end + end + end + end + + describe 'invalid types' do + context 'with garbage inputs' do + [ + 'mysql+pymysql://db:db@localhost/db', + 'sqlite:///var/lib/db.db', + 'mongodb://db:db@localhost/db', + ].each do |value| + describe value.inspect do + it { is_expected.not_to allow_value(value) } + end + end + end + end +end + diff --git a/spec/type_aliases/dbconn_spec.rb b/spec/type_aliases/dbconn_spec.rb index 7a981c6..c308f29 100644 --- a/spec/type_aliases/dbconn_spec.rb +++ b/spec/type_aliases/dbconn_spec.rb @@ -8,6 +8,7 @@ describe 'Oslo::Dbconn' do 'postgresql://db:db@localhost/db', 'postgresql+psycopg2://db:db@localhost/db', 'sqlite:///var/lib/db.db', + '', ].each do |value| describe value.inspect do it { is_expected.to allow_value(value) } @@ -21,6 +22,7 @@ describe 'Oslo::Dbconn' do [ 'foo://db:db@localhost/db', 'foo+pymysql://db:db@localhost/db', + 'mongodb://db:db@localhost/db', true, false, nil, diff --git a/spec/type_aliases/dbconn_sqlite_spec.rb b/spec/type_aliases/dbconn_sqlite_spec.rb new file mode 100644 index 0000000..8da7f58 --- /dev/null +++ b/spec/type_aliases/dbconn_sqlite_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe 'Oslo::Dbconn::Sqlite' do + describe 'valid types' do + context 'with valid types' do + [ + 'sqlite:///var/lib/db.db', + ].each do |value| + describe value.inspect do + it { is_expected.to allow_value(value) } + end + end + end + end + + describe 'invalid types' do + context 'with garbage inputs' do + [ + 'mysql+pymysql://db:db@localhost/db', + 'postgresql://db:db@localhost/db', + 'postgresql+psycopg2://db:db@localhost/db', + 'mongodb://db:db@localhost/db', + ].each do |value| + describe value.inspect do + it { is_expected.not_to allow_value(value) } + end + end + end + end +end + diff --git a/types/dbconn.pp b/types/dbconn.pp index b301aab..349f468 100644 --- a/types/dbconn.pp +++ b/types/dbconn.pp @@ -1 +1,6 @@ -type Oslo::Dbconn = Pattern[/^(sqlite|mysql(\+pymysql)?|postgresql(\+psycopg2)?):\/\/(\S+:\S+@\S+\/\S+)?/] +type Oslo::Dbconn = Variant[ + Oslo::Dbconn::Sqlite, + Oslo::Dbconn::Mysql, + Oslo::Dbconn::Postgres, + Openstacklib::Servicedefault, +] diff --git a/types/dbconn/mysql.pp b/types/dbconn/mysql.pp new file mode 100644 index 0000000..55e0006 --- /dev/null +++ b/types/dbconn/mysql.pp @@ -0,0 +1 @@ +type Oslo::Dbconn::Mysql = Pattern[/^mysql(\+pymysql)?:\/\/(\S+:\S+@\S+\/\S+)?/] diff --git a/types/dbconn/postgres.pp b/types/dbconn/postgres.pp new file mode 100644 index 0000000..dc9c5fe --- /dev/null +++ b/types/dbconn/postgres.pp @@ -0,0 +1 @@ +type Oslo::Dbconn::Postgres = Pattern[/^postgresql(\+psycopg2)?:\/\/(\S+:\S+@\S+\/\S+)?/] diff --git a/types/dbconn/sqlite.pp b/types/dbconn/sqlite.pp new file mode 100644 index 0000000..47fd9bb --- /dev/null +++ b/types/dbconn/sqlite.pp @@ -0,0 +1 @@ +type Oslo::Dbconn::Sqlite = Pattern[/^sqlite:\/\//]