]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Add support for puppetlabs-mysql 2.2
authorMichael Chapman <woppin@gmail.com>
Fri, 28 Feb 2014 09:08:29 +0000 (20:08 +1100)
committerMichael Chapman <woppin@gmail.com>
Sun, 16 Mar 2014 10:24:10 +0000 (21:24 +1100)
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
manifests/db.pp
manifests/db/mysql.pp
manifests/db/mysql/host_access.pp
spec/classes/ceilometer_db_mysql_spec.rb

diff --git a/README b/README
index 2a81834e294db82be9df1bb3c9da0501e85cbf47..4dcb0058f78d18d41ecb3880f21f0d7547c8d179 100644 (file)
--- 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
 -------
 
index 15822d8ce95f218ee805b3e7ed4df3f023506ef9..f2f841eccf78bbda445995ecb35d1f96d3651478 100644 (file)
@@ -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
index 3b045a9b6119c3ccdbb5368bb277960a6d3d058e..937d6417a652e4f5f6e17e72ca6d5254ad0bae9f 100644 (file)
 #  [*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,
     }
   }
 }
index e9a802d77d3208909517a3305ef2136b56c2692e..cabf2deb03b19a8902a0b106db80a5fcbad6d5a9 100644 (file)
 #  [*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}"]
+    }
   }
 }
index 04241986b1c5e2f292530ef8b2c070750a916fb2..94f383b72437a9df38f19e085db6910ad1f6620a 100644 (file)
@@ -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