# Copyright 2014 IBM Corp.
# Copyright (c) 2014 OpenStack Foundation
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.
#
# Authors:
#   Alon Marx <alonma@il.ibm.com>
#

# lib/cinder_plugins/xiv
# Configure the xiv_ds8k driver for xiv testing

# Enable xiv_ds8k driver for xiv with:
#
#   CINDER_ENABLED_BACKENDS+=,xiv:<volume-type-name>
#   XIV_DRIVER_VERSION=<version-string>
#   SAN_IP=<storage-ip-or-hostname>
#   SAN_LOGIN=<storage-admin-account>
#   SAN_PASSWORD=<storage-admin-password>
#   SAN_CLUSTERNAME=<cluster-name>
#   CONNECTION_TYPE=<connection-type> iscsi|fc
#   XIV_CHAP=<chap-type> disabled|enabled

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

# configure_cinder_backend_xiv - Configure Cinder for xiv backends

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

# Defaults
# --------
# Set up default directories


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

# configure_cinder_backend_xiv - Set config files, create data dirs, etc
function configure_cinder_backend_xiv {

    local be_name=$1

    python -c 'from xiv_ds8k_openstack.xiv_nova_proxy import XIVNovaProxy'
    if [ $? -ne 0 ]; then
        die $LINENO "XIV_DS8K driver is missing. Please install first"
    fi

    # For reference:
    # ``XIV_DS8K_BACKEND='IBM-XIV_'${SAN_IP}'_'${SAN_CLUSTERNAME}'_'${CONNECTION_TYPE}``
    iniset $CINDER_CONF DEFAULT xiv_ds8k_driver_version $XIV_DRIVER_VERSION

    iniset $CINDER_CONF $be_name san_ip $SAN_IP
    iniset $CINDER_CONF $be_name san_login $SAN_LOGIN
    iniset $CINDER_CONF $be_name san_password $SAN_PASSWORD
    iniset $CINDER_CONF $be_name san_clustername $SAN_CLUSTERNAME
    iniset $CINDER_CONF $be_name xiv_ds8k_connection_type $CONNECTION_TYPE
    iniset $CINDER_CONF $be_name volume_backend_name $be_name
    iniset $CINDER_CONF $be_name volume_driver 'cinder.volume.drivers.ibm.xiv_ds8k.XIVDS8KDriver'
    iniset $CINDER_CONF $be_name xiv_ds8k_proxy 'xiv_ds8k_openstack.xiv_nova_proxy.XIVNovaProxy'
    iniset $CINDER_CONF $be_name xiv_chap $XIV_CHAP
}

# Restore xtrace
$XIV_XTRACE

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

