#!/usr/bin/env bash ############################################################################## # Copyright (c) 2015 Tim Rozet (Red Hat), Dan Radez (Red Hat) and others. # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## # Parser functions used by OPNFV Apex ##translates yaml into variables ##params: filename, prefix (ex. "config_") ##usage: parse_yaml opnfv_ksgen_settings.yml "config_" parse_yaml() { local prefix=$2 local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | awk -F$fs '{ indent = length($1)/2; vname[indent] = $2; for (i in vname) {if (i > indent) {delete vname[i]}} if (length($3) > 0) { vn=""; for (i=0; i /dev/null; then this_node=$(echo $entry | grep -Eo "^nodes_node[0-9]+_") if [[ "$inventory_list" != *"$this_node"* ]]; then inventory_list+="$this_node " fi fi done inventory_list=$(echo $inventory_list | sed 's/ $//') for node in $inventory_list; do ((node_count+=1)) done node_total=$node_count if [[ "$node_total" -lt 5 && "$ha_enabled" == "True" ]]; then echo -e "${red}ERROR: You must provide at least 5 nodes for HA baremetal deployment${reset}" exit 1 elif [[ "$node_total" -lt 2 ]]; then echo -e "${red}ERROR: You must provide at least 2 nodes for non-HA baremetal deployment${reset}" exit 1 fi eval $(parse_yaml $INVENTORY_FILE) || { echo "${red}Failed to parse inventory.yaml. Aborting.${reset}" exit 1 } instackenv_output=" { \"nodes\" : [ " node_count=0 for node in $inventory_list; do ((node_count+=1)) node_output=" { \"pm_password\": \"$(eval echo \${${node}ipmi_pass})\", \"pm_type\": \"$(eval echo \${${node}pm_type})\", \"mac\": [ \"$(eval echo \${${node}mac_address})\" ], \"cpu\": \"$(eval echo \${${node}cpus})\", \"memory\": \"$(eval echo \${${node}memory})\", \"disk\": \"$(eval echo \${${node}disk})\", \"arch\": \"$(eval echo \${${node}arch})\", \"pm_user\": \"$(eval echo \${${node}ipmi_user})\", \"pm_addr\": \"$(eval echo \${${node}ipmi_ip})\", \"capabilities\": \"$(eval echo \${${node}capabilities})\" " instackenv_output+=${node_output} if [ $node_count -lt $node_total ]; then instackenv_output+=" }," else instackenv_output+=" }" fi done instackenv_output+=' ] } ' #Copy instackenv.json to undercloud for baremetal echo -e "{blue}Parsed instackenv JSON:\n${instackenv_output}${reset}" ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" < instackenv.json << EOF $instackenv_output EOF EOI }