#!/bin/bash # devstack/plugin.sh # Setup VMAX as backend for Devstack function create_volume_types { # Create volume types if is_service_enabled c-api && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then local be be_name for be in ${CINDER_ENABLED_BACKENDS//,/ }; do be_name=${be##*:} be_type=${be%%:*} array="${be_name}_Array" srp="${be_name}_SRP" slo="None" workload="None" pool_name=${!srp}+${!array} vmax_temp="${be_name}_WORKLOAD" if [ -n "${!vmax_temp}" ]; then workload="${be_name}_WORKLOAD" pool_name=${!workload}+${pool_name} else pool_name=${workload}+${pool_name} fi vmax_temp="${be_name}_SLO" if [ -n "${!vmax_temp}" ]; then slo="${be_name}_SLO" pool_name=${!slo}+${pool_name} else pool_name=${slo}+${pool_name} fi openstack --os-region-name="$REGION_NAME" volume type create --property volume_backend_name="${be_name}" --property pool_name="${pool_name}" {be_name} done fi } function configure_port_groups { local be_name=$1 echo "" >> \ ${CINDER_CONF_DIR}/cinder_dell_emc_config_$be_name.xml vmax_temp="${be_name}_PortGroup" dell_emc_portGroups=0 for i in ${!VMAX*}; do temp1=${i##${vmax_temp}} if [[ "$temp1" == "$i" ]]; then continue fi arrIN=(${temp1//_/ }) if [[ "${arrIN[0]}" -gt "$dell_emc_portGroups" ]]; then dell_emc_portGroups=${arrIN[0]} fi done for (( m=1 ; m<=dell_emc_portGroups ; m++ )) ; do vmax_temp="${be_name}_PortGroup${m}" echo "${!vmax_temp}" >> \ ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml done echo "" >> \ ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml } function configure_single_pool { local be_name=$1 for val in "RestServerIp" "RestServerPort" "RestUserName" "RestPassword"\ "Array" "SRP" "SSLVerify" ; do vmax_temp="${be_name}_${val}" if [ -n "${!vmax_temp}" ]; then echo "<${val}>${!vmax_temp}" >> \ ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml fi done configure_port_groups ${be_name} } function configure_cinder_backend_vmax { local be_name=$1 local emc_multi=${be_name%%_*} iniset ${CINDER_CONF} ${be_name} volume_backend_name ${be_name} storage_proto="${be_name}_StorageProtocol" vmax_directory="cinder.volume.drivers.dell_emc.vmax." if [[ "${!storage_proto}" == "iSCSI" ]]; then iniset ${CINDER_CONF} ${be_name} volume_driver \ "${vmax_directory}iscsi.VMAXISCSIDriver" fi if [ "${!storage_proto}" = "FC" ] then iniset ${CINDER_CONF} ${be_name} volume_driver \ "${vmax_directory}fc.VMAXFCDriver" fi iniset ${CINDER_CONF} ${be_name} cinder_dell_emc_config_file \ "$CINDER_CONF_DIR/cinder_dell_emc_config_$be_name.xml" touch ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml echo "" > \ ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml echo "" >> ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml configure_single_pool ${be_name} echo "" >> ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml if [ ! -f "$CINDER_CONF_DIR/cinder_emc_config.xml" ]; then ln -s ${CINDER_CONF_DIR}/cinder_dell_emc_config_${be_name}.xml \ ${CINDER_CONF_DIR}/cinder_emc_config.xml fi }