From 0034cb44f43c669ea391ed3c0df2d98f1837d4d4 Mon Sep 17 00:00:00 2001 From: Bharat Kumar Kobagana Date: Mon, 19 Jan 2015 12:43:03 +0530 Subject: [PATCH] Moved plugin code from glusterfs branch to master. --- devstack/plugin.sh | 144 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 devstack/plugin.sh diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 0000000..38fbcc3 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,144 @@ +# 60-glusterfs.sh - DevStack extras script to install GlusterFS +# Functions to control the configuration and operation of the **GlusterFS** storage service + +# Dependencies: +# +# - ``functions`` file +# - ``GLUSTERFS_DATA_DIR`` or ``DATA_DIR`` must be defined + +# ``stack.sh`` calls the entry points in this order: +# +# - install_glusterfs +# - configure_glusterfs_cinder +# - start_glusterfs +# - stop_glusterfs +# - cleanup_glusterfs + +# Defaults +# -------- + +# Set ``GLUSTERFS_DATA_DIR`` to the location of GlusterFS drives. +# Default is the common DevStack data directory. +GLUSTERFS_DATA_DIR=${GLUSTERFS_DATA_DIR:-/var/lib/glusterfs} +GLUSTERFS_DISK_IMAGE=${DATA_DIR}/cinder/glusterfs.img + +# DevStack will create a loop-back disk formatted as XFS to store the +# GlusterFS data. Set ``GLUSTERFS_LOOPBACK_DISK_SIZE`` to the disk size in +# kilobytes. +# Default is 4 gigabyte. +GLUSTERFS_LOOPBACK_DISK_SIZE=${GLUSTERFS_LOOPBACK_DISK_SIZE:-4G} + +# Devstack will create GlusterFS shares to store Cinder volumes. +# Those shares can be configured by seting CINDER_GLUSTERFS_SHARES. +# By default CINDER_GLUSTERFS_SHARES="127.0.0.1:/vol1;127.0.0.1:/vol2" + +CINDER_GLUSTERFS_SHARES=${CINDER_GLUSTERFS_SHARES:-"127.0.0.1:/vol1;127.0.0.1:/vol2"} + +# Adding GlusterFS repo to CentOS / RHEL 7 platform. + +GLUSTERFS_CENTOS_REPO=${GLUSTERFS_CENTOS_REPO:-"http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo"} + +# Functions +# ------------ + +# cleanup_glusterfs() - Remove residual data files, anything left over from previous +# runs that a clean run would need to clean up +function cleanup_glusterfs { + for share in $(echo $CINDER_GLUSTERFS_SHARES | sed "s/;/ /"); do + local mount_point=$(grep $share /proc/mounts | awk '{print $2}') + if [[ -n $mount_point ]]; then + sudo umount $mount_point + fi + done + + if [[ -e ${GLUSTERFS_DISK_IMAGE} ]]; then + sudo rm -f ${GLUSTERFS_DISK_IMAGE} + fi + + for share in $(echo $CINDER_GLUSTERFS_SHARES | sed "s/;/ /"); do + GLUSTERFS_VOLUMES+=,$(echo $share | cut -d/ -f2); + done + + for vol_name in $(echo $GLUSTERFS_VOLUMES | sed "s/,/ /g"); do + sudo gluster --mode=script volume stop $vol_name + sudo gluster --mode=script volume delete $vol_name + done + + uninstall_package glusterfs-server + if egrep -q ${GLUSTERFS_DATA_DIR} /proc/mounts; then + sudo umount ${GLUSTERFS_DATA_DIR} + fi + sudo rm -rf ${GLUSTERFS_DATA_DIR} +} + +# configure_glusterfs_cinder() - Create GlusterFS volumes +function configure_glusterfs_cinder { + for share in $(echo $CINDER_GLUSTERFS_SHARES | sed "s/;/ /"); do + GLUSTERFS_VOLUMES+=,$(echo $share | cut -d/ -f2); + done + + if is_fedora; then + stop_glusterfs + start_glusterfs + fi + # create a backing file disk + create_disk ${GLUSTERFS_DISK_IMAGE} ${GLUSTERFS_DATA_DIR} ${GLUSTERFS_LOOPBACK_DISK_SIZE} + + for vol_name in $(echo $GLUSTERFS_VOLUMES | sed "s/,/ /g"); do + sudo mkdir -p ${GLUSTERFS_DATA_DIR}/$vol_name + sudo gluster --mode=script volume \ + create $vol_name $(hostname):${GLUSTERFS_DATA_DIR}/$vol_name + sudo gluster --mode=script volume start $vol_name + sudo gluster --mode=script volume set $vol_name server.allow-insecure on + done +} + +# install_glusterfs() - Collect source and prepare +function install_glusterfs { + if [[ ${DISTRO} =~ rhel7 ]] && [[ ! -f /etc/yum.repos.d/glusterfs-epel.repo ]]; then + sudo wget $GLUSTERFS_CENTOS_REPO -O /etc/yum.repos.d/glusterfs-epel.repo + fi + install_package glusterfs-server + install_package xfsprogs +} + +# start_glusterfs() - Start running processes +function start_glusterfs { + if is_ubuntu; then + sudo service glusterfs-server start + else + sudo service glusterd start + fi +} + +# stop_glusterfs() - Stop running processes +function stop_glusterfs { + if is_ubuntu; then + sudo service glusterfs-server stop + else + sudo service glusterd stop + fi +} + +if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then + echo_summary "Installing GlusterFS" + install_glusterfs +elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + if is_service_enabled cinder; then + echo_summary "Configuring Cinder for GlusterFS" + configure_glusterfs_cinder + fi +fi + +if [[ "$1" == "unstack" ]]; then + cleanup_glusterfs + stop_glusterfs +fi + +if [[ "$1" == "clean" ]]; then + cleanup_glusterfs +fi + +## Local variables: +## mode: shell-script +## End: