From 4f7925beb1103f57bcca0ce6875be79a3cea47ad Mon Sep 17 00:00:00 2001 From: Dan Radez Date: Tue, 5 Jul 2016 16:59:28 -0400 Subject: Moving parser functions to a sourced file Trying to split the monolith deploy.sh Change-Id: Ib145e01696384b1b27e8a79263647235e7d68e2a Signed-off-by: Dan Radez --- lib/common-functions.sh | 9 +++ lib/parse-functions.sh | 174 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100755 lib/parse-functions.sh (limited to 'lib') diff --git a/lib/common-functions.sh b/lib/common-functions.sh index 079b0886..365f8e3f 100644 --- a/lib/common-functions.sh +++ b/lib/common-functions.sh @@ -1,4 +1,13 @@ #!/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 +############################################################################## + # Common Functions used by OPNFV Apex # author: Tim Rozet (trozet@redhat.com) diff --git a/lib/parse-functions.sh b/lib/parse-functions.sh new file mode 100755 index 00000000..dde9041a --- /dev/null +++ b/lib/parse-functions.sh @@ -0,0 +1,174 @@ +#!/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 + +} -- cgit 1.2.3-korg