#!/bin/bash
PROGNAME="Sganesha-start"
OPTSPEC="volname:,gd-workdir:,version:,volume-op:,first:"
VOL=
declare -i EXPORT_ID
ganesha_key="ganesha.enable"
GANESHA_DIR="/run/gluster/shared_storage/nfs-ganesha"
CONF1="$GANESHA_DIR/ganesha.conf"
GLUSTERD_WORKDIR=

function parse_args ()
{
        ARGS=$(getopt -l $OPTSPEC  -o "o" -name $PROGNAME "$@")
        eval set -- "$ARGS"

        while true; do
            case $1 in
                --volname)
                    shift
                    VOL=$1
                    ;;
                --gd-workdir)
                    shift
                    GLUSTERD_WORKDIR=$1
                    ;;
                --version)
                    shift
                    ;;
                --volume-op)
                    shift
                    ;;
                --first)
                    shift
                    ;;
                *)
                    shift
                    break
                    ;;
            esac
            shift
        done
}



#This function generates a new export entry as export.volume_name.conf
function write_conf()
{
echo -e "# WARNING : Using Gluster CLI will overwrite manual
# changes made to this file. To avoid it, edit the
# file, copy it over to all the NFS-Ganesha nodes
# and run ganesha-ha.sh --refresh-config."

echo "EXPORT{"
echo "      Export_Id = 2;"
echo "      Path = \"/$VOL\";"
echo "      FSAL {"
echo "           name = \"GLUSTER\";"
echo "           hostname=\"localhost\";"
echo "           volume=\"$VOL\";"
echo "           }"
echo "      Access_type = RW;"
echo "      Disable_ACL = true;"
echo "      Squash=\"No_root_squash\";"
echo "      Pseudo=\"/$VOL\";"
echo "      Protocols = \"3\", \"4\" ;"
echo "      Transports = \"UDP\",\"TCP\";"
echo "      SecType = \"sys\";"
echo "}"
}

#It adds the export dynamically by sending dbus signals
function export_add()
{
        dbus-send --print-reply --system --dest=org.ganesha.nfsd \
          /org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.AddExport \
          string:"$GANESHA_DIR/exports/export.$VOL.conf" string:"EXPORT(Export_Id=$EXPORT_ID)"

}

# based on src/scripts/ganeshactl/Ganesha/export_mgr.py
function is_exported()
{
        local volume="${1}"

        dbus-send --type=method_call --print-reply --system \
                  --dest=org.ganesha.nfsd /org/ganesha/nfsd/ExportMgr \
                  org.ganesha.nfsd.exportmgr.ShowExports \
            | grep -w -q "/${volume}"

        return $?
}

# Check the info file (contains the volume options) to see if Ganesha is
# enabled for this volume.
function ganesha_enabled()
{
        local volume="${1}"
        local info_file="${GLUSTERD_WORKDIR}/vols/${VOL}/info"
        local enabled="off"

        enabled=$(grep -w "$ganesha_key" "$info_file" | cut -d"=" -f2)

        [ "${enabled}" == "on" ]

        return $?
}

parse_args "$@"

if ganesha_enabled "$VOL" && ! is_exported "$VOL"
then
        if [ ! -e "${GANESHA_DIR}/exports/export.${VOL}.conf" ]
        then
                #Remove export entry from nfs-ganesha.conf
                sed -i "/$VOL.conf/d"  $CONF1
                write_conf "$VOL" > "${GANESHA_DIR}/exports/export.${VOL}.conf"
                EXPORT_ID=$(cat $GANESHA_DIR/.export_added)
                EXPORT_ID=$((EXPORT_ID+1))
                echo $EXPORT_ID > $GANESHA_DIR/.export_added
                sed -i s/Export_Id.*/"Export_Id=$EXPORT_ID;"/ \
                        "$GANESHA_DIR/exports/export.$VOL.conf"
                echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF1
        else
                EXPORT_ID=$(grep '^[[:space:]]*Export_Id' "$GANESHA_DIR/exports/export.$VOL.conf" |\
                          awk -F"[=,;]" '{print $2}' | tr -d '[:space:]')
        fi
        export_add "$VOL"
fi

exit 0
