Support NFS backend for Glance (via Pacemaker)

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
This commit is contained in:
Jiri Stransky 2015-07-07 15:16:10 +02:00
parent 0f2bf59910
commit 3729e63b59
4 changed files with 44 additions and 1 deletions

View 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 ####

View 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}

View 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

View 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':