#!/bin/bash
#
# 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:
