Support NFS backend for Glance (via Pacemaker)
authorJiri Stransky <jistr@redhat.com>
Tue, 7 Jul 2015 13:16:10 +0000 (15:16 +0200)
committerJiri Stransky <jistr@redhat.com>
Mon, 19 Oct 2015 14:48:04 +0000 (16:48 +0200)
Adds support for NFS backend in Glance by allowing the storage directory
for the 'file' backend to be a mount managed by Pacemaker. Default
behavior is unchanged.

Since the Pacemaker-related parameters are not exposed on top level,
change storage-environment.yaml to use parameter_defaults instead of
parameters.

Depends on a Heat fix for environment file's parameter_defaults to
work well with JSONs and comma delimited lists (see Depends-On).

Change-Id: I6e7e2eaf6919b955650c0b32e1629a4067602c89
Depends-On: I85b13a79dbc97a77e20c0d5df8eaf05b3000815e

environments/storage-environment.yaml
puppet/controller.yaml
puppet/hieradata/controller.yaml
puppet/manifests/overcloud_controller_pacemaker.pp

index 535ec6f..5ccfa58 100644 (file)
@@ -1,7 +1,7 @@
 ## A Heat environment file which can be used to set up storage
 ## backends. Defaults to Ceph used as a backend for Cinder, Glance and
 ## Nova ephemeral storage.
-parameters:
+parameter_defaults:
 
   #### BACKEND SELECTION ####
 
index 0bb8035..6db9e95 100644 (file)
@@ -180,6 +180,30 @@ parameters:
     type: string
     constraints:
     - allowed_values: ['swift', 'file', 'rbd']
+  GlanceFilePcmkDevice:
+    default: ''
+    description: >
+      An exported storage device that should be mounted by Pacemaker
+      as Glance storage. Effective when GlanceFilePcmkManage is true.
+    type: string
+  GlanceFilePcmkFstype:
+    default: 'nfs'
+    description: >
+      Filesystem type for Pacemaker mount used as Glance storage.
+      Effective when GlanceFilePcmkManage is true.
+    type: string
+  GlanceFilePcmkManage:
+    default: false
+    description: >
+      Whether to make Glance file backend a mount managed by Pacemaker.
+      Effective when GlanceBackend is 'file'.
+    type: boolean
+  GlanceFilePcmkOptions:
+    default: ''
+    description: >
+      Mount options for Pacemaker mount used as Glance storage.
+      Effective when GlanceFilePcmkManage is true.
+    type: string
   HAProxySyslogAddress:
     default: /dev/log
     description: Syslog address where HAproxy will send its log
@@ -728,6 +752,10 @@ resources:
         glance_port: {get_param: GlancePort}
         glance_password: {get_param: GlancePassword}
         glance_backend: {get_param: GlanceBackend}
+        glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
+        glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
+        glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
+        glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
         glance_log_file: {get_param: GlanceLogFile}
         glance_dsn:
@@ -1081,6 +1109,10 @@ resources:
                 glance::backend::swift::swift_store_key: {get_input: glance_password}
                 glance_backend: {get_input: glance_backend}
                 glance::db::mysql::password: {get_input: glance_password}
+                glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
+                glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
+                glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
+                glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
 
                 # Heat
                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
index b659ed7..6db3262 100644 (file)
@@ -64,6 +64,7 @@ glance::api::pipeline: 'keystone'
 glance::registry::pipeline: 'keystone'
 glance::backend::swift::swift_store_create_container_on_put: true
 glance::backend::rbd::rbd_store_user: 'openstack'
+glance_file_pcmk_directory: '/var/lib/glance/images'
 
 # neutron
 neutron::server::sync_db: true
index b8fa89f..eeac583 100644 (file)
@@ -525,6 +525,16 @@ if hiera('step') >= 3 {
   $http_store = ['glance.store.http.Store']
   $glance_store = concat($http_store, $backend_store)
 
+  if $glance_backend == 'file' and hiera('glance_file_pcmk_manage', false) {
+    pacemaker::resource::filesystem { "glance-fs":
+      device       => hiera('glance_file_pcmk_device'),
+      directory    => hiera('glance_file_pcmk_directory'),
+      fstype       => hiera('glance_file_pcmk_fstype'),
+      fsoptions    => hiera('glance_file_pcmk_options', ''),
+      clone_params => '',
+    }
+  }
+
   # TODO: notifications, scrubber, etc.
   include ::glance
   class { 'glance::api':