Allow deployer to choose Ceilometer backend
authorYanis Guenane <yanis.guenane@enovance.com>
Wed, 29 Apr 2015 07:19:11 +0000 (09:19 +0200)
committerYanis Guenane <yanis.guenane@enovance.com>
Wed, 29 Apr 2015 08:49:05 +0000 (10:49 +0200)
Ceilometer can use different backends. A recent change moved backend
support for Ceilometer from MySQL to MongoDB. This commit introduce a
greater flexibility, letting the deployer choose wheter MySQL or MongoDB
should be used as a backend for Ceilometer.

Change-Id: I0d5bfb0763cbcee234df7ab13574d866743d5ddf

controller.yaml
overcloud-without-mergepy.yaml
puppet/controller-puppet.yaml
puppet/manifests/overcloud_controller.pp

index b578a25..80f9124 100644 (file)
@@ -14,6 +14,10 @@ parameters:
     description: The keystone auth secret.
     type: string
     hidden: true
+  CeilometerBackend:
+    default: 'mongodb'
+    description: The ceilometer backend type.
+    type: string
   CeilometerMeteringSecret:
     default: unset
     description: Secret shared by the ceilometer services.
index 142e502..fce322c 100644 (file)
@@ -15,6 +15,10 @@ parameters:
     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
     type: string
     hidden: true
+  CeilometerBackend:
+    default: 'mongodb'
+    description: The ceilometer backend type.
+    type: string
   CeilometerMeteringSecret:
     default: unset
     description: Secret shared by the ceilometer services.
@@ -543,6 +547,7 @@ resources:
         properties:
           AdminPassword: {get_param: AdminPassword}
           AdminToken: {get_param: AdminToken}
+          CeilometerBackend: {get_param: CeilometerBackend}
           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
           CeilometerPassword: {get_param: CeilometerPassword}
           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
index 4e04eb0..2cb6ead 100644 (file)
@@ -14,6 +14,10 @@ parameters:
     description: The keystone auth secret.
     type: string
     hidden: true
+  CeilometerBackend:
+    default: 'mongodb'
+    description: The ceilometer backend type.
+    type: string
   CeilometerMeteringSecret:
     default: unset
     description: Secret shared by the ceilometer services.
@@ -577,8 +581,15 @@ resources:
             - - 'http://'
               - {get_param: VirtualIP}
               - ':35357/v2.0'
+        ceilometer_backend: {get_param: CeilometerBackend}
         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
         ceilometer_password: {get_param: CeilometerPassword}
+        ceilometer_dsn:
+          list_join:
+            - ''
+            - - 'mysql://ceilometer:unset@'
+              - {get_param: VirtualIP}
+              - '/ceilometer'
         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
         nova_password: {get_param: NovaPassword}
@@ -787,6 +798,8 @@ resources:
                 neutron_dsn: {get_input: neutron_dsn}
 
                 # Ceilometer
+                ceilometer_backend: {get_input: ceilometer_backend}
+                ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
                 ceilometer::rabbit_hosts: {get_input: rabbit_hosts}
                 ceilometer::rabbit_userid: {get_input: rabbit_username}
index 7d36bb3..eca6a9d 100644 (file)
@@ -79,17 +79,19 @@ if hiera('step') >= 2 {
   }
 
   # MongoDB
-  include ::mongodb::globals
-  include ::mongodb::server
-  $mongo_node_ips = split(hiera('mongo_node_ips'), ',')
-  $mongo_node_ips_with_port = suffix($mongo_node_ips, ':27017')
-  $mongo_node_string = join($mongo_node_ips_with_port, ',')
-
-  $mongodb_replset = hiera('mongodb::server::replset')
-  $ceilometer_mongodb_conn_string = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}"
-  if downcase(hiera('bootstrap_nodeid')) == $::hostname {
-    mongodb_replset { $mongodb_replset :
-      members => $mongo_node_ips_with_port,
+  if downcase(hiera('ceilometer_backend')) == 'mongodb' {
+    include ::mongodb::globals
+    include ::mongodb::server
+    $mongo_node_ips = split(hiera('mongo_node_ips'), ',')
+    $mongo_node_ips_with_port = suffix($mongo_node_ips, ':27017')
+    $mongo_node_string = join($mongo_node_ips_with_port, ',')
+
+    $mongodb_replset = hiera('mongodb::server::replset')
+    $ceilometer_mongodb_conn_string = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}"
+    if downcase(hiera('bootstrap_nodeid')) == $::hostname {
+      mongodb_replset { $mongodb_replset :
+        members => $mongo_node_ips_with_port,
+      }
     }
   }
 
@@ -181,6 +183,16 @@ if hiera('step') >= 2 {
     dbname        => $heat_dsn[6],
     allowed_hosts => $allowed_hosts,
   }
+  if downcase(hiera('ceilometer_backend')) == 'mysql' {
+    $ceilometer_dsn = split(hiera('ceilometer_mysql_conn_string'), '[@:/?]')
+    class { 'ceilometer::db::mysql':
+      user          => $ceilometer_dsn[3],
+      password      => $ceilometer_dsn[4],
+      host          => $ceilometer_dsn[5],
+      dbname        => $ceilometer_dsn[6],
+      allowed_hosts => $allowed_hosts,
+    }
+  }
 
   $rabbit_nodes = split(downcase(hiera('rabbit_node_names', $::hostname)), ',')
   if count($rabbit_nodes) > 1 {
@@ -399,6 +411,15 @@ if hiera('step') >= 3 {
   }
 
   # Ceilometer
+  $ceilometer_backend = downcase(hiera('ceilometer_backend'))
+  case $ceilometer_backend {
+    /mysql/ : {
+      $ceilometer_database_connection = hiera('ceilometer_mysql_conn_string')
+    }
+    default : {
+      $ceilometer_database_connection = $ceilometer_mongodb_conn_string
+    }
+  }
   include ::ceilometer
   include ::ceilometer::api
   include ::ceilometer::agent::notification
@@ -408,7 +429,7 @@ if hiera('step') >= 3 {
   include ::ceilometer::expirer
   include ::ceilometer::collector
   class { '::ceilometer::db' :
-    database_connection => $ceilometer_mongodb_conn_string,
+    database_connection => $ceilometer_database_connection,
   }
   class { 'ceilometer::agent::auth':
     auth_url => join(['http://', hiera('controller_virtual_ip'), ':5000/v2.0']),