From addaf5179d228fa571fdcb0e5017c99a4727bb2a Mon Sep 17 00:00:00 2001 From: Michael Chapman Date: Fri, 28 Feb 2014 20:08:29 +1100 Subject: [PATCH] Add support for puppetlabs-mysql 2.2 This patch adds support for the new version of puppetlabs-mysql via a parameter that will change which types and classes to depend on from the mysql module. No spec tests are included since any tests relying on the new module will fail until the fixtures are updated. Change-Id: I3f76cc600ef8d6e0c88c988f96aadbf18d81f7f1 --- README | 5 +++ manifests/db.pp | 15 +++++++-- manifests/db/mysql.pp | 40 ++++++++++++++++++------ manifests/db/mysql/host_access.pp | 37 +++++++++++++++------- spec/classes/ceilometer_db_mysql_spec.rb | 12 ++++--- 5 files changed, 82 insertions(+), 27 deletions(-) diff --git a/README b/README index 2a81834..4dcb005 100644 --- a/README +++ b/README @@ -2,6 +2,11 @@ puppet-ceilometer This is the ceilometer module. +Limitations +-------------------------- + +The Ceilometer Openstack service depends on a sqlalchemy database. If you are using puppetlabs-mysql to achieve this, there is a parameter called mysql_module that can be used to swap between the two supported versions: 0.9 and 2.2. This is needed because the puppetlabs-mysql module was rewritten and the custom type names have changed between versions. + License ------- diff --git a/manifests/db.pp b/manifests/db.pp index 15822d8..f2f841e 100644 --- a/manifests/db.pp +++ b/manifests/db.pp @@ -9,9 +9,15 @@ # [*sync_db*] # enable dbsync. # +# [*mysql_module*] +# (optional) Mysql puppet module version to use. Tested versions +# are 0.9 and 2.2 +# Defaults to '0.9 +# class ceilometer::db ( $database_connection = 'mysql://ceilometer:ceilometer@localhost/ceilometer', - $sync_db = true + $sync_db = true, + $mysql_module = '0.9', ) { include ceilometer::params @@ -24,7 +30,12 @@ class ceilometer::db ( case $database_connection { /^mysql:\/\//: { $backend_package = false - include mysql::python + + if ($mysql_module >= 2.2) { + include mysql::bindings::python + } else { + include mysql::python + } } /^postgres:\/\//: { $backend_package = $::ceilometer::params::psycopg_package_name diff --git a/manifests/db/mysql.pp b/manifests/db/mysql.pp index 3b045a9..937d641 100644 --- a/manifests/db/mysql.pp +++ b/manifests/db/mysql.pp @@ -23,6 +23,14 @@ # [*charset*] # the database charset. Optional. Defaults to 'latin1' # +# [*collate*] +# the database collation. Optional. Defaults to 'latin1_swedish_ci' +# +# [*mysql_module*] +# (optional) Mysql module version to use. Tested versions +# are 0.9 and 2.2 +# Defaults to '0.9' +# class ceilometer::db::mysql( $password = false, $dbname = 'ceilometer', @@ -30,6 +38,8 @@ class ceilometer::db::mysql( $host = 'localhost', $allowed_hosts = undef, $charset = 'latin1', + $collate = 'latin1_swedish_ci', + $mysql_module = '0.9', ) { validate_string($password) @@ -38,12 +48,23 @@ class ceilometer::db::mysql( Class['ceilometer::db::mysql'] -> Exec<| title == 'ceilometer-dbsync' |> Mysql::Db[$dbname] ~> Exec<| title == 'ceilometer-dbsync' |> - mysql::db { $dbname: - user => $user, - password => $password, - host => $host, - charset => $charset, - require => Class['mysql::config'], + if $mysql_module >= 2.2 { + mysql::db { $dbname: + user => $user, + password => $password, + host => $host, + charset => $charset, + collate => $collate, + require => Class['mysql::server'], + } + } else { + mysql::db { $dbname: + user => $user, + password => $password, + host => $host, + charset => $charset, + require => Class['mysql::config'], + } } # Check allowed_hosts to avoid duplicate resource declarations @@ -55,9 +76,10 @@ class ceilometer::db::mysql( if $real_allowed_hosts { ceilometer::db::mysql::host_access { $real_allowed_hosts: - user => $user, - password => $password, - database => $dbname, + user => $user, + password => $password, + database => $dbname, + mysql_module => $mysql_module, } } } diff --git a/manifests/db/mysql/host_access.pp b/manifests/db/mysql/host_access.pp index e9a802d..cabf2de 100644 --- a/manifests/db/mysql/host_access.pp +++ b/manifests/db/mysql/host_access.pp @@ -13,18 +13,33 @@ # [*database*] # the database name # -define ceilometer::db::mysql::host_access ($user, $password, $database) { +define ceilometer::db::mysql::host_access ($user, $password, $database, $mysql_module='0.9') { + # New types for mysql module v2.0+ + if ($mysql_module >= 2.2) { + mysql_user { "${user}@${name}": + password_hash => mysql_password($password), + provider => 'mysql', + require => Mysql_database[$database], + } - database_user { "${user}@${name}": - password_hash => mysql_password($password), - provider => 'mysql', - require => Database[$database], - } + mysql_grant { "${user}@${name}/${database}": + privileges => 'all', + provider => 'mysql', + require => Mysql_user["${user}@${name}"] + } + + } else { + database_user { "${user}@${name}": + password_hash => mysql_password($password), + provider => 'mysql', + require => Database[$database], + } - database_grant { "${user}@${name}/${database}": - # TODO figure out which privileges to grant. - privileges => 'all', - provider => 'mysql', - require => Database_user["${user}@${name}"] + database_grant { "${user}@${name}/${database}": + # TODO figure out which privileges to grant. + privileges => 'all', + provider => 'mysql', + require => Database_user["${user}@${name}"] + } } } diff --git a/spec/classes/ceilometer_db_mysql_spec.rb b/spec/classes/ceilometer_db_mysql_spec.rb index 0424198..94f383b 100644 --- a/spec/classes/ceilometer_db_mysql_spec.rb +++ b/spec/classes/ceilometer_db_mysql_spec.rb @@ -7,11 +7,13 @@ describe 'ceilometer::db::mysql' do end let :params do - { :password => 's3cr3t', - :dbname => 'ceilometer', - :user => 'ceilometer', - :host => 'localhost', - :charset => 'latin1' + { :password => 's3cr3t', + :dbname => 'ceilometer', + :user => 'ceilometer', + :host => 'localhost', + :charset => 'latin1', + :collate => 'latin1_swedish_ci', + :mysql_module => '0.9', } end -- 2.45.2