diff --git a/README b/README index 2a81834e..4dcb0058 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 15822d8c..f2f841ec 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 3b045a9b..937d6417 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 e9a802d7..cabf2deb 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}"] + } - database_grant { "${user}@${name}/${database}": - # TODO figure out which privileges to grant. - privileges => 'all', - provider => 'mysql', - require => Database_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}"] + } } } diff --git a/spec/classes/ceilometer_db_mysql_spec.rb b/spec/classes/ceilometer_db_mysql_spec.rb index 04241986..94f383b7 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