#!/bin/bash
#
# lib/cinder_backends/netapp_iscsi
# Configure the NetApp iSCSI driver

# Enable with:
#
#  iSCSI:
#   CINDER_ENABLED_BACKENDS+=,netapp_iscsi:<volume-type-name>

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

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

# configure_cinder_backend_netapp_iscsi - configure iSCSI

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


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

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

    # In ontap_cluster mode, the following also needs to be defined:
    # NETAPP_ISCSI_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_volume_list $NETAPP_ISCSI_VOLUME_LIST

    iniset $CINDER_CONF $be_name netapp_storage_protocol iscsi
    iniset $CINDER_CONF $be_name netapp_transport_type https

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


# Restore xtrace
$MY_XTRACE

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