#!/bin/bash
#
# lib/cinder_backends/netapp_nfs
# Configure the NetApp NFS driver

# Enable with:
#
#  NFS:
#   CINDER_ENABLED_BACKENDS+=,netapp_nfs:<volume-type-name>

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

# ``CINDER_CONF``
# ``CINDER_CONF_DIR``
# ``CINDER_ENABLED_BACKENDS``

# configure_cinder_backend_netapp_nfs - configure NFS

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


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

# configure_cinder_backend_netapp_nfs - Set config files, create data dirs, etc
function configure_cinder_backend_netapp_nfs {
    # To use NetApp, set the following in local.conf:
    # CINDER_ENABLED_BACKENDS+=,netapp_nfs:<volume-type-name>
    # NETAPP_MODE=ontap_7mode|ontap_cluster
    # NETAPP_IP=<mgmt-ip>
    # NETAPP_LOGIN=<admin-account>
    # NETAPP_PASSWORD=<admin-password>
    # NETAPP_NFS_VOLUME_LIST=<export-volumes>

    # In ontap_cluster mode, the following also needs to be defined:
    # NETAPP_NFS_VSERVER=<vserver-name>

    local be_name=$1
    iniset $CINDER_CONF $be_name volume_backend_name $be_name
    iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.netapp.common.NetAppDriver"
    iniset $CINDER_CONF $be_name netapp_storage_family ${NETAPP_MODE:-ontap_7mode}
    iniset $CINDER_CONF $be_name netapp_server_hostname $NETAPP_IP
    iniset $CINDER_CONF $be_name netapp_login $NETAPP_LOGIN
    iniset $CINDER_CONF $be_name netapp_password $NETAPP_PASSWORD

    iniset $CINDER_CONF $be_name netapp_storage_protocol nfs
    iniset $CINDER_CONF $be_name netapp_transport_type https
    iniset $CINDER_CONF $be_name nfs_shares_config $CINDER_CONF_DIR/netapp_shares.conf

    echo "$NETAPP_NFS_VOLUME_LIST" | tee "$CINDER_CONF_DIR/netapp_shares.conf"

    if [[ "$NETAPP_MODE" == "ontap_cluster" ]]; then
        iniset $CINDER_CONF $be_name netapp_vserver $NETAPP_NFS_VSERVER
    fi
}

function cleanup_cinder_backend_netapp_nfs {
    # Clean up remaining NFS mounts
    # Be blunt and do them all
    local m
    for m in $CINDER_STATE_PATH/mnt/*; do
        sudo umount $m
    done
}


# Restore xtrace
$MY_XTRACE

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