summaryrefslogtreecommitdiffstats
path: root/fuel/prototypes/auto-deploy/create_templates
diff options
context:
space:
mode:
Diffstat (limited to 'fuel/prototypes/auto-deploy/create_templates')
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/create_templates.sh189
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/generate_fuel_node_info.py36
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/generate_node_info.py61
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/reap_fuel_settings.py47
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/reap_network_scheme.py38
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/reap_network_settings.py48
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/reap_opnfv_astute.py49
-rwxr-xr-xfuel/prototypes/auto-deploy/create_templates/reap_settings.py37
8 files changed, 505 insertions, 0 deletions
diff --git a/fuel/prototypes/auto-deploy/create_templates/create_templates.sh b/fuel/prototypes/auto-deploy/create_templates/create_templates.sh
new file mode 100755
index 000000000..8a43930cd
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/create_templates.sh
@@ -0,0 +1,189 @@
+#!/bin/bash
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+cleanup () {
+ if [ -n "$tmpDir" ]; then
+ rm -Rf $tmpDir
+ fi
+}
+
+trap cleanup exit
+
+error_exit () {
+ echo "Error: $@" >&2
+ exit 1
+}
+
+tmpDir=`mktemp -d /tmp/deaXXXX`
+
+export PATH=`dirname $0`:$PATH
+
+if [ $# -lt 2 ]; then
+ error_exit "`basename $0`: <deafile> <dhafile> <comment>"
+fi
+
+deafile=$1
+dhafile=$2
+shift 2
+
+if [ $# -ne 0 ]; then
+ comment="$@"
+else
+ comment=""
+fi
+
+if [ -f $deafile ]; then
+ error_exit "$deafile already exists"
+elif [ -f $dhafile ]; then
+ error_exit "$dhafile already exists"
+fi
+
+# Create headers
+
+cat >$deafile << EOF
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version: 1.1
+created: `date`
+comment: $comment
+EOF
+
+cat >$dhafile << EOF
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version: 1.1
+created: `date`
+comment: $comment
+
+# Adapter to use for this definition
+adapter:
+
+# Node list.
+# Mandatory properties are id and role.
+# The MAC address of the PXE boot interface for Fuel is not
+# mandatory to be defined.
+# All other properties are adapter specific.
+
+EOF
+
+if [ `fuel env | tail -n +3 | grep -v '^$' | wc -l` -ne 1 ]; then
+ error_exit "Not exactly one environment"
+fi
+envId=`fuel env | tail -n +3 | grep -v '^$' | awk '{ print $1 }'`
+
+computeId=`fuel node | grep compute | grep True | head -1 | awk '{ print $1}'`
+controllerId=`fuel node | grep controller | grep True | head -1 | awk '{ print $1}'`
+
+if [ -z "$computeId" ]; then
+ error_exit "Could not find any compute node"
+elif [ -z "$controllerId" ]; then
+ error_exit "Could not find any controller node"
+fi
+
+fuel deployment --env $envId --download --dir $tmpDir > /dev/null || \
+ error_exit "Could not get deployment info"
+fuel settings --env $envId --download --dir $tmpDir > /dev/null || \
+ error_exit "Could not get settings"
+fuel network --env $envId --download --dir $tmpDir > /dev/null || \
+ error_exit "Could not get network settings"
+
+# Create node structure for DEA mapping to the DHA
+# Note! Nodes will be renumbered to always start with id 1
+echo "nodes:" >> $deafile
+echo "nodes:" >> $dhafile
+minNode=`fuel node | tail -n +3 | sed 's/ .*//' | sort -n | head -1`
+for realNodeId in `fuel node | tail -n +3 | sed 's/ .*//' | sort -n`
+do
+ nodeId=$[realNodeId - minNode + 1]
+ role=`fuel node --node-id $realNodeId | tail -n +3 | cut -d "|" -f 7 | sed 's/ //g'` || \
+ error_exit "Could not get role for node $realNodeId"
+
+ if [ -z "$role" ]; then
+ error_exit "Node $realNodeId has no role - is this environment really deployed?"
+ fi
+
+ fuel node --node-id $realNodeId --network --download --dir $tmpDir > /dev/null || \
+ error_exit "Could not get network info for node $controllerId"
+
+ generate_node_info.py $nodeId $role $tmpDir/node_${realNodeId}/interfaces.yaml $dhafile | \
+ grep -v "^nodes:" >> $deafile || \
+ error_exit "Could not extract info for node $realNodeId"
+done
+
+cat >>$dhafile <<EOF
+# Adding the Fuel node as node id $[nodeId + 1] which may not be correct - please
+# adjust as needed.
+EOF
+generate_fuel_node_info.py $[nodeId +1] $dhafile || \
+ error_exit "Could not extract info for the Fuel node"
+
+# Environment mode
+echo "environment_mode: `fuel env | tail -n +3 | cut -d "|" -f 4 | sed 's/ //g' | sed 's/ha_compact/ha/'`" \
+ >>$deafile || error_exit "Could not get environment mode"
+
+echo "environment_name: `fuel env | tail -n +3 | cut -d "|" -f 3 | sed 's/ //g'`" \
+ >>$deafile || error_exit "Could not get environment mode"
+
+reap_fuel_settings.py $deafile fuel || \
+ error_exit "Could not extract Fuel node settings"
+
+# TODO: Potentially move the network scheme into each node of the DEA nodes structure
+# TODO: instead (this may be too generic to support all node types)
+reap_network_scheme.py $tmpDir/deployment_${envId}/*controller_${controllerId}.yaml \
+ $deafile controller || error_exit "Could not extract network scheme for controller"
+
+# TODO: Potentially move the network scheme into each node of the DEA nodes structure
+# TODO: instead (this may be too generic to support all node types)
+reap_network_scheme.py $tmpDir/deployment_${envId}/compute_${computeId}.yaml $deafile \
+ compute || error_exit "Could not extract network scheme for compute"
+
+reap_opnfv_astute.py $tmpDir/deployment_${envId}/*controller_${controllerId}.yaml \
+ $tmpDir/deployment_${envId}/compute_${computeId}.yaml ${deafile} || \
+ error_exit "Could not extract opnfv info from astute"
+
+reap_network_settings.py $tmpDir/network_${envId}.yaml $deafile network || \
+ error_exit "Could not extract network settings"
+
+
+reap_settings.py $tmpDir/settings_${envId}.yaml $deafile settings || \
+ error_exit "Could not extract settings"
+
+# Last part of the DHA file
+cat >>$dhafile << EOF
+
+# Deployment power on strategy
+# all: Turn on all nodes at once. There will be no correlation
+# between the DHA and DEA node numbering. MAC addresses
+# will be used to select the node roles though.
+# sequence: Turn on the nodes in sequence starting with the lowest order
+# node and wait for the node to be detected by Fuel. Not until
+# the node has been detected and assigned a role will the next
+# node be turned on.
+powerOnStrategy: sequence
+
+# If fuelCustomInstall is set to true, Fuel is assumed to be installed by
+# calling the DHA adapter function "dha_fuelCustomInstall()" with two
+# arguments: node ID and the ISO file name to deploy. The custom install
+# function is then to handle all necessary logic to boot the Fuel master
+# from the ISO and then return.
+# Allowed values: true, false
+
+fuelCustomInstall: false
+EOF
+
+# Cleanup due to a currently unknown Fuel behavior adding this
+# output at certain stages, this information should not be present:
+sed -i '/ management_vip: ' $deafile
+sed -i '/ public_vip: ' $deafile
+
+
+echo "DEA file is available at $deafile"
+echo "DHA file is available at $dhafile (this is just a template)"
diff --git a/fuel/prototypes/auto-deploy/create_templates/generate_fuel_node_info.py b/fuel/prototypes/auto-deploy/create_templates/generate_fuel_node_info.py
new file mode 100755
index 000000000..845d2ab5b
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/generate_fuel_node_info.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 3:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <nodeid> <dhafile>\n")
+ sys.exit(1)
+
+nodeId=int(sys.argv[1])
+dhafile=sys.argv[2]
+
+f1 = open("/etc/fuel/astute.yaml", 'r')
+doc = yaml.load(f1)
+f1.close()
+
+dhaMac = doc["ADMIN_NETWORK"]["mac"]
+
+# Write contribution to DHA file
+f2 = open(dhafile, 'a')
+f2.write("- id: " + str(nodeId) + "\n")
+f2.write(" pxeMac: " + dhaMac + "\n")
+f2.write(" isFuel: yes\n")
+f2.close()
+
diff --git a/fuel/prototypes/auto-deploy/create_templates/generate_node_info.py b/fuel/prototypes/auto-deploy/create_templates/generate_node_info.py
new file mode 100755
index 000000000..a475cdb1f
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/generate_node_info.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 5:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <nodeid> <role> <infile> <dhafile>\n")
+ sys.exit(1)
+
+infile = sys.argv[3]
+if not os.path.exists(infile):
+ sys.stderr.write("ERROR: The file "+infile+" could not be opened\n")
+ sys.exit(1)
+
+nodeId=int(sys.argv[1])
+nodeRole=sys.argv[2]
+dhafile=sys.argv[4]
+
+f1 = open(infile, 'r')
+doc = yaml.load(f1)
+f1.close()
+
+out = {}
+
+node = {}
+node["id"] = nodeId
+node["role"] = nodeRole
+node["interfaces"] = {}
+
+
+for interface in doc:
+ iface = {}
+ networks = []
+ for network in interface["assigned_networks"]:
+ networks.append(network["name"])
+ if network["name"] == "fuelweb_admin":
+ dhaMac = interface["mac"]
+ if networks:
+ node["interfaces"][interface["name"]] = networks
+
+out = [node]
+
+sys.stdout.write(yaml.dump(out, default_flow_style=False))
+
+# Write contribution to DHA file
+f2 = open(dhafile, 'a')
+f2.write("- id: " + str(nodeId) + "\n")
+f2.write(" pxeMac: " + dhaMac + "\n")
+f2.close()
+
diff --git a/fuel/prototypes/auto-deploy/create_templates/reap_fuel_settings.py b/fuel/prototypes/auto-deploy/create_templates/reap_fuel_settings.py
new file mode 100755
index 000000000..a8ddba9bc
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/reap_fuel_settings.py
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 3:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <outfile> <outnamespace>\n")
+ sys.exit(1)
+
+infile = "/etc/fuel/astute.yaml"
+if not os.path.exists(infile):
+ sys.stderr.write("ERROR: The file "+infile+" could not be opened\n")
+ sys.exit(1)
+
+outfile = sys.argv[1]
+namespace = sys.argv[2]
+
+f1 = open(infile, 'r')
+doc = yaml.load(f1)
+f1.close()
+
+out = {}
+out[namespace] = {}
+
+# Delete unique data
+del(doc["ADMIN_NETWORK"]["mac"])
+del(doc["ADMIN_NETWORK"]["interface"])
+
+for copy in [ "ADMIN_NETWORK", "HOSTNAME", "DNS_DOMAIN", "DNS_SEARCH",
+ "DNS_UPSTREAM", "NTP1", "NTP2", "NTP3", "ADMIN_NETWORK", "FUEL_ACCESS" ]:
+ out[namespace][copy] = doc[copy]
+
+f2 = open(outfile, 'a')
+f2.write(yaml.dump(out, default_flow_style=False))
+f2.close()
+
diff --git a/fuel/prototypes/auto-deploy/create_templates/reap_network_scheme.py b/fuel/prototypes/auto-deploy/create_templates/reap_network_scheme.py
new file mode 100755
index 000000000..19c18bfc9
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/reap_network_scheme.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 4:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <infile> <outfile> <outnamespace>\n")
+ sys.exit(1)
+
+infile = sys.argv[1]
+if not os.path.exists(infile):
+ sys.stderr.write("ERROR: The file "+infile+" could not be opened\n")
+ sys.exit(1)
+
+outfile = sys.argv[2]
+namespace = sys.argv[3]
+
+f1 = open(infile, 'r')
+doc = yaml.load(f1)
+f1.close()
+
+out = {}
+out[namespace] = doc["network_scheme"]["transformations"]
+f2 = open(outfile, 'a')
+f2.write(yaml.dump(out, default_flow_style=False))
+f2.close()
+
diff --git a/fuel/prototypes/auto-deploy/create_templates/reap_network_settings.py b/fuel/prototypes/auto-deploy/create_templates/reap_network_settings.py
new file mode 100755
index 000000000..b03a0634c
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/reap_network_settings.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 4:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <infile> <outfile> <outnamespace>\n")
+ sys.exit(1)
+
+infile = sys.argv[1]
+if not os.path.exists(infile):
+ sys.stderr.write("ERROR: The file "+infile+" could not be opened\n")
+ sys.exit(1)
+
+outfile = sys.argv[2]
+namespace = sys.argv[3]
+
+f1 = open(infile, 'r')
+doc = yaml.load(f1)
+f1.close()
+
+for nw in doc["networks"]:
+ try:
+ del nw["id"]
+ except:
+ pass
+
+ try:
+ del nw["group_id"]
+ except:
+ pass
+
+out = {}
+out[namespace] = doc
+f2 = open(outfile, 'a')
+f2.write(yaml.dump(out, default_flow_style=False))
+f2.close()
diff --git a/fuel/prototypes/auto-deploy/create_templates/reap_opnfv_astute.py b/fuel/prototypes/auto-deploy/create_templates/reap_opnfv_astute.py
new file mode 100755
index 000000000..55fad0555
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/reap_opnfv_astute.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 4:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <controllerfile> <computefile> <outfile>\n")
+ sys.exit(1)
+
+controller = sys.argv[1]
+if not os.path.exists(controller):
+ sys.stderr.write("ERROR: The file "+controller+" could not be opened\n")
+ sys.exit(1)
+
+compute = sys.argv[2]
+if not os.path.exists(compute):
+ sys.stderr.write("ERROR: The file "+compute+" could not be opened\n")
+ sys.exit(1)
+
+outfile = sys.argv[3]
+
+f_controller = open(controller, 'r')
+doc_controller = yaml.load(f_controller)
+f_controller.close()
+
+f_compute = open(compute, 'r')
+doc_compute = yaml.load(f_compute)
+f_compute.close()
+
+out = {}
+out["opnfv"] = {}
+out["opnfv"]["controller"] = doc_controller["opnfv"]
+out["opnfv"]["compute"] = doc_compute["opnfv"]
+
+f2 = open(outfile, 'a')
+f2.write(yaml.dump(out, default_flow_style=False))
+f2.close()
+
diff --git a/fuel/prototypes/auto-deploy/create_templates/reap_settings.py b/fuel/prototypes/auto-deploy/create_templates/reap_settings.py
new file mode 100755
index 000000000..22794d245
--- /dev/null
+++ b/fuel/prototypes/auto-deploy/create_templates/reap_settings.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# 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
+##############################################################################
+
+import yaml
+import re
+import sys
+import os
+
+if len(sys.argv) != 4:
+ sys.stderr.write("Usage: "+sys.argv[0]+" <infile> <outfile> <outnamespace>\n")
+ sys.exit(1)
+
+infile = sys.argv[1]
+if not os.path.exists(infile):
+ sys.stderr.write("ERROR: The file "+infile+" could not be opened\n")
+ sys.exit(1)
+
+outfile = sys.argv[2]
+namespace = sys.argv[3]
+
+f1 = open(infile, 'r')
+doc = yaml.load(f1)
+f1.close()
+
+out = {}
+out[namespace] = doc
+f2 = open(outfile, 'a')
+f2.write(yaml.dump(out, default_flow_style=False))
+f2.close()