# lib/cinder_plugins/glusterfs
# Configure the glusterfs driver

# Enable with:
#
#   CINDER_DRIVER=glusterfs

# Dependencies:
#
# - ``functions`` file
# - ``cinder`` configurations

# configure_cinder_driver - make configuration changes, including those to other services

# Save trace setting
MY_XTRACE=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------

# Set up default directories


# Entry Points
# ------------

# configure_cinder_driver - Set config files, create data dirs, etc
function configure_cinder_driver() {
    # To use glusterfs, set the following in localrc:
    # CINDER_DRIVER=glusterfs
    # CINDER_GLUSTERFS_SHARES="127.0.0.1:/vol1;127.0.0.1:/vol2"
    # Shares are <host>:<volume> and separated by semicolons.

    iniset $CINDER_CONF DEFAULT volume_driver "cinder.volume.drivers.glusterfs.GlusterfsDriver"
    iniset $CINDER_CONF DEFAULT glusterfs_shares_config "$CINDER_CONF_DIR/glusterfs_shares"
    touch $CINDER_CONF_DIR/glusterfs_shares
    if [ ! -z "$CINDER_GLUSTERFS_SHARES" ]; then
        CINDER_GLUSTERFS_SHARES=$(echo $CINDER_GLUSTERFS_SHARES | tr ";" "\n")
        echo "$CINDER_GLUSTERFS_SHARES" > $CINDER_CONF_DIR/glusterfs_shares
    fi
}

# Restore xtrace
$MY_XTRACE

# Local variables:
# mode: shell-script
# End:
