#!/bin/bash
#
# lib/cinder_backends/lvm
# Configure the LVM backend

# Enable with:
#
#   CINDER_ENABLED_BACKENDS+=,lvm:lvmname

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

# CINDER_CONF
# DATA_DIR
# VOLUME_GROUP_NAME

# clean_cinder_backend_lvm - called from clean_cinder()
# configure_cinder_backend_lvm - called from configure_cinder()
# init_cinder_backend_lvm - called from init_cinder()
# configure_cinder_backend_conf_lvm - called from configure_cinder()


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


# TODO: resurrect backing device...need to know how to set values
#VOLUME_BACKING_DEVICE=${VOLUME_BACKING_DEVICE:-}

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

# cleanup_cinder_backend_lvm - Delete volume group and remove backing file
# cleanup_cinder_backend_lvm $be_name
function cleanup_cinder_backend_lvm {
    local be_name=$1

    # Campsite rule: leave behind a volume group at least as clean as we found it
    clean_lvm_volume_group $VOLUME_GROUP_NAME-$be_name
}

# configure_cinder_backend_lvm - Set config files, create data dirs, etc
# configure_cinder_backend_lvm $be_name
function configure_cinder_backend_lvm {
    local be_name=$1

    iniset $CINDER_CONF $be_name volume_backend_name $be_name
    iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.lvm.LVMISCSIDriver"
    iniset $CINDER_CONF $be_name volume_group $VOLUME_GROUP_NAME-$be_name

    if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then
        iniset $CINDER_CONF $be_name volume_clear none
    fi
}

# init_cinder_backend_lvm - Initialize volume group
# init_cinder_backend_lvm $be_name
function init_cinder_backend_lvm {
    local be_name=$1

    # Start with a clean volume group
    init_lvm_volume_group $VOLUME_GROUP_NAME-$be_name $VOLUME_BACKING_FILE_SIZE
}

# configure_cinder_backend_conf_lvm - Sets device filter in /etc/cinder/lvm.conf
# init_cinder_backend_lvm
function configure_cinder_backend_conf_lvm {
    local filter_suffix='"r/.*/" ]'
    local filter_string="filter = [ "
    local conf_entries=$(grep volume_group /etc/cinder/cinder.conf | sed "s/ //g")
    local pv
    local vg
    local line

    for pv_info in $(sudo pvs --noheadings -o name,vg_name --separator ';'); do
        IFS=';' read pv vg <<< $pv_info
        for line in ${conf_entries}; do
            IFS='=' read label group <<< $line
            group=$(echo $group|sed "s/^ *//g")
            if [[ "$vg" == "$group" ]]; then
                new="\"a$pv/\", "
                filter_string=$filter_string$new
            fi
        done
    done
    filter_string=$filter_string$filter_suffix

    # FIXME(jdg): Possible odd case that the lvm.conf file has been modified
    # and doesn't have a filter entry to search/replace.  For devstack don't
    # know that we care, but could consider adding a check and add
    sudo sed -i "s#^[ \t]*filter.*#    $filter_string#g" /etc/cinder/lvm.conf
    echo "set LVM filter_strings: $filter_string"
}
# Restore xtrace
$MY_XTRACE

# mode: shell-script
# End:
