joseph.gasparakis@intel.com
pbandzi@cisco.com
daniel.smith@ericsson.com
+trozet@redhat.com
Link to TSC approval of the project: http://meetbot.opnfv.org/meetings/opnfv-meeting/2014/opnfv-meeting.2014-12-09-15.02.html
Link(s) to approval of additional committers:
* Addition of Daniel Smith: Email vote: http://lists.opnfv.org/pipermail/opnfv-tech-discuss/2015-March/001801.html
+* Addition of Tim Rozet: Email vote: http://lists.opnfv.org/pipermail/opnfv-tsc/2015-May/000845.html
echo -e "\nUsage:\n$0 [arguments] \n"
echo -e "\n -no_parse : No variable parsing into config. Flag. \n"
echo -e "\n -base_config : Full path of settings file to parse. Optional. Will provide a new base settings file rather than the default. Example: -base_config /opt/myinventory.yml \n"
+ echo -e "\n -virtual : Node virtualization instead of baremetal. Flag. \n"
}
##find ip of interface
echo $baseaddr.$lsv
}
+##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<indent; i++) {vn=(vn)(vname[i])("_")}
+ printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
+ }
+ }'
+}
+
##END FUNCTIONS
if [[ ( $1 == "--help") || $1 == "-h" ]]; then
no_parse="TRUE"
shift 1
;;
+ -virtual)
+ virtual="TRUE"
+ shift 1
+ ;;
*)
display_usage
exit 1
esac
done
-
-
##disable selinux
/sbin/setenforce 0
fi
+if [ $virtual ]; then
+ echo "${blue} Virtual flag detected, setting Khaleesi playbook to be opnfv-vm.yml ${reset}"
+ sed -i 's/opnfv.yml/opnfv-vm.yml/' bootstrap.sh
+fi
+
echo "${blue}Starting Vagrant! ${reset}"
##stand up vagrant
if ! vagrant up; then
printf '%s\n' 'deploy.sh: Unable to start vagrant' >&2
exit 1
+else
+ echo "${blue}Foreman VM is up! ${reset}"
fi
+if [ $virtual ]; then
+
+##Bring up VM nodes
+echo "${blue}Setting VMs up... ${reset}"
+nodes=`sed -nr '/nodes:/{:start /workaround/!{N;b start};//p}' opnfv_ksgen_settings.yml | sed -n '/^ [A-Za-z0-9]\+:$/p' | sed 's/\s*//g' | sed 's/://g'`
+##due to ODL Helium bug of OVS connecting to ODL too early, we need controllers to install first
+##this is fix kind of assumes more than I would like to, but for now it should be OK as we always have
+##3 static controllers
+compute_nodes=`echo $nodes | tr " " "\n" | grep -v controller | tr "\n" " "`
+controller_nodes=`echo $nodes | tr " " "\n" | grep controller | tr "\n" " "`
+nodes=${controller_nodes}${compute_nodes}
+
+for node in ${nodes}; do
+ cd /tmp
+
+ ##remove VM nodes incase it wasn't cleaned up
+ rm -rf /tmp/$node
+
+ ##clone bgs vagrant
+ ##will change this to be opnfv repo when commit is done
+ if ! git clone https://github.com/trozet/bgs_vagrant.git $node; then
+ printf '%s\n' 'deploy.sh: Unable to clone vagrant repo' >&2
+ exit 1
+ fi
+
+ cd $node
+
+ if [ $base_config ]; then
+ if ! cp -f $base_config opnfv_ksgen_settings.yml; then
+ echo "{red}ERROR: Unable to copy $base_config to opnfv_ksgen_settings.yml${reset}"
+ exit 1
+ fi
+ fi
+
+ ##parse yaml into variables
+ eval $(parse_yaml opnfv_ksgen_settings.yml "config_")
+ ##find node type
+ node_type=config_nodes_${node}_type
+ node_type=$(eval echo \$$node_type)
+
+ ##find number of interfaces with ip and substitute in VagrantFile
+ output=`ifconfig | grep -E "^[a-zA-Z0-9]+:"| grep -Ev "lo|tun|virbr|vboxnet" | awk '{print $1}' | sed 's/://'`
+
+ if [ ! "$output" ]; then
+ printf '%s\n' 'deploy.sh: Unable to detect interfaces to bridge to' >&2
+ exit 1
+ fi
+
+
+ if_counter=0
+ for interface in ${output}; do
+ if [ "$if_counter" -ge 4 ]; then
+ break
+ fi
+ interface_ip=$(find_ip $interface)
+ if [ ! "$interface_ip" ]; then
+ continue
+ fi
+ case "${if_counter}" in
+ 0)
+ mac_string=config_nodes_${node}_mac_address
+ mac_addr=$(eval echo \$$mac_string)
+ mac_addr=$(echo $mac_addr | sed 's/:\|-//g')
+ if [ $mac_addr == "" ]; then
+ echo "${red} Unable to find mac_address for $node! ${reset}"
+ exit 1
+ fi
+ ;;
+ 1)
+ if [ "$node_type" == "controller" ]; then
+ mac_string=config_nodes_${node}_private_mac
+ mac_addr=$(eval echo \$$mac_string)
+ if [ $mac_addr == "" ]; then
+ echo "${red} Unable to find private_mac for $node! ${reset}"
+ exit 1
+ fi
+ else
+ ##generate random mac
+ mac_addr=$(echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"')
+ fi
+ mac_addr=$(echo $mac_addr | sed 's/:\|-//g')
+ ;;
+ *)
+ mac_addr=$(echo -n 00-60-2F; dd bs=1 count=3 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "-%02X"')
+ mac_addr=$(echo $mac_addr | sed 's/:\|-//g')
+ ;;
+ esac
+ sed -i 's/^.*eth_replace'"$if_counter"'.*$/ config.vm.network "public_network", bridge: '\'"$interface"\'', :mac => '\""$mac_addr"\"'/' Vagrantfile
+ ((if_counter++))
+ done
+
+ ##now remove interface config in Vagrantfile for 1 node
+ ##if 1, 3, or 4 interfaces set deployment type
+ ##if 2 interfaces remove 2nd interface and set deployment type
+ if [ "$if_counter" == 1 ]; then
+ deployment_type="single_network"
+ remove_vagrant_network eth_replace1
+ remove_vagrant_network eth_replace2
+ remove_vagrant_network eth_replace3
+ elif [ "$if_counter" == 2 ]; then
+ deployment_type="single_network"
+ second_interface=`echo $output | awk '{print $2}'`
+ remove_vagrant_network $second_interface
+ remove_vagrant_network eth_replace2
+ elif [ "$if_counter" == 3 ]; then
+ deployment_type="three_network"
+ remove_vagrant_network eth_replace3
+ else
+ deployment_type="multi_network"
+ fi
+
+ ##modify provisioning to do puppet install, config, and foreman check-in
+ ##substitute host_name and dns_server in the provisioning script
+ host_string=config_nodes_${node}_hostname
+ host_name=$(eval echo \$$host_string)
+ sed -i 's/^host_name=REPLACE/host_name='$host_name'/' vm_nodes_provision.sh
+ ##dns server should be the foreman server
+ sed -i 's/^dns_server=REPLACE/dns_server='${interface_ip_arr[0]}'/' vm_nodes_provision.sh
+
+ ## remove bootstrap and NAT provisioning
+ sed -i '/nat_setup.sh/d' Vagrantfile
+ sed -i 's/bootstrap.sh/vm_nodes_provision.sh/' Vagrantfile
+
+ ## modify default_gw to be node_default_gw
+ sed -i 's/^.*default_gw =.*$/ default_gw = '\""$node_default_gw"\"'/' Vagrantfile
+
+ ## modify VM memory to be 4gig
+ sed -i 's/^.*vb.memory =.*$/ vb.memory = 4096/' Vagrantfile
+
+ echo "${blue}Starting Vagrant Node $node! ${reset}"
+
+ ##stand up vagrant
+ if ! vagrant up; then
+ echo "${red} Unable to start $node ${reset}"
+ exit 1
+ else
+ echo "${blue} $node VM is up! ${reset}"
+ fi
+
+done
+
+ echo "${blue} All VMs are UP! ${reset}"
+
+fi
#Now lets got and fetch the ODL distribution
RUN echo "Fetching ODL"
-RUN wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.2-Helium-SR2/distribution-karaf-0.2.2-Helium-SR2.tar.gz -O /opt/odl_source/distribution-karaf-0.2.2-Helium-SR2.tar.gz
+RUN wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.3-Helium-SR3/distribution-karaf-0.2.3-Helium-SR3.tar.gz -O /opt/odl_source/distribution-karaf-0.2.3-Helium-SR3.tar.gz
RUN echo "Untarring ODL inplace"
RUN mkdir -p /opt/odl
-RUN tar zxvf /opt/odl_source/distribution-karaf-0.2.2-Helium-SR2.tar.gz -C /opt/odl
+RUN tar zxvf /opt/odl_source/distribution-karaf-0.2.3-Helium-SR3.tar.gz -C /opt/odl
RUN echo "Installing DLUX and other features into ODL"
COPY tmp/dockerfile/container_scripts/start_odl_docker.sh /etc/init.d/start_odl_docker.sh
#!/usr/bin/expect
-spawn /opt/odl/distribution-karaf-0.2.2-Helium-SR2/bin/client
+spawn /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/client
expect "root>"
send "feature:list | grep -i odl-restconf\r"
send "\r\r\r"
# Simple expect script to start up ODL client and load feature set for DLUX and OVSDB
#
# NOTE: THIS WILL BE REPLACED WITH A PROGRAMATIC METHOD SHORTLY
+# DEPRECATED AFTER ARNO
-spawn /opt/odl/distribution-karaf-0.2.2-Helium-SR2/bin/client
+spawn /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/client
expect "root>"
send "feature:install odl-base-all odl-aaa-authn odl-restconf odl-nsf-all odl-adsal-northbound odl-mdsal-apidocs odl-ovsdb-openstack odl-ovsdb-northbound odl-dlux-core"
send "\r\r\r"
#MAIN
echo "Starting up the da Sheilds..."
-/opt/odl/distribution-karaf-0.2.2-Helium-SR2/bin/karaf server &
+/opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/karaf server &
echo "Sleeping 5 bad hack"
sleep 10
echo "should see stuff listening now"
while true;
do
echo "Checking status of ODL:"
- /opt/odl/distribution-karaf-0.2.2-Helium-SR2/bin/status
+ /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/status
sleep 60
done
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-SUBDIRS := debootstrap
+SUBDIRS := debootstrap novnc
SUBCLEAN = $(addsuffix .clean,$(SUBDIRS))
.PHONY: $(SUBDIRS) $(SUBCLEAN) clean
--- /dev/null
+# This is a temporary patch which add missing files
+# inside novnc ubuntu package.
+# Related bug: https://bugs.launchpad.net/fuel/+bug/1433894
+TOP := $(shell pwd)
+
+.PHONY: all
+all:
+
+.PHONY: clean
+clean:
+ @rm -rf package
+ @rm -rf *.deb
+ @rm -rf patch-replacements
+ @rm -rf .package
+
+.PHONY: release
+release:
+ ../tools/deb_unpack novnc_0.5.1*.deb $(ORIGISO)
+ ./fix-missing.sh
+ ../tools/deb_pack $(REVSTATE)
+ @cp *.deb ../release/packages
+ @cat patch-replacements >> ../release/patch-replacements
--- /dev/null
+#!/bin/bash
+
+MISSING_FILES="keyboard.js keysymdef.js keysym.js"
+NOVNC_SOURCE="http://raw.githubusercontent.com/kanaka/noVNC/v0.5.1/include"
+
+for file in $MISSING_FILES
+do
+ wget -P package/usr/share/novnc/include/ "$NOVNC_SOURCE/$file"
+done
trap my_exit EXIT
-REV=$1
+REV="$(echo $1 | tr '_' '-')"
if [ -z "$REV" ]; then
echo "$ME: Error - no revision info provided"
exit 1
:Authors: Jonas Bjurel (Ericsson)
-:Version: 0.2
+:Version: 0.3
-================================================================
-OPNFV Release Note for "Arno-RC2 release candidate" - Fuel@OPNFV
-================================================================
+=====================================================================================
+OPNFV Release Note for the Arno release of OPNFV when using Fuel as a deployment tool
+=====================================================================================
Abstract
========
-This document provides the release notes for ARNO-RC2 release candidate of Fuel@OPNFV.
+This document compiles the release notes for the ARNO release, when using Fuel as a deployment tool.
License
=======
-Fuel@OPNFV DOCs (c) by Jonas Bjurel (Ericsson AB)
+Arno release with th Fuel deployment tool Docs (c) by Jonas Bjurel (Ericsson AB)
-Fuel@OPNFV DOCs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
+Arno release with the Fuel deployment tool Docs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
**Contents**
| 2015-04-23 | 0.2 | Jonas Bjurel | Minor change |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
+| 2015-05-12 | 0.3 | Chris Price | Minor edits |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
2 Important notes
===================
-This is the first OPNFV Arno pre-release that implements the deploy stage of the OPNFV CI pipeline.
+This is the first OPNFV release of Arno using Fuel as the deploment stage of the OPNFV CI pipeline. The intention of this release is to establish a foundation platform to accelerate the development of the OPNFV infrastructure.
-Carefully follow the installation-instructions and pay special attention to the pre-deploy script that needs to be ran befor deployment is started.
+Carefully follow the installation-instructions and pay special attention to the pre-deploy script that needs to be run befor deployment is started.
3 Summary
===========
-Arno Fuel@OPNFV is based the OpenStack Fuel upstream project version 6.0.1, but adds OPNFV unique components such as OpenDaylight version: Helium as well as other OPNFV unique configurations.
+Arno release with the Fuel deployment tool uses the OpenStack Fuel upstream project version 6.0.1, but adds OPNFV unique components such as OpenDaylight version: Helium as well as other OPNFV unique configurations.
-This Arno pre-release of Fuel@OPNFV adds the deploy stage of the OPNFV CI pipeline
+This Arno release artefact provides the Fuel deployment tool as the deploy stage of the OPNFV CI pipeline including:
-- Documentation is built by Jenkins
-- .iso image is built by Jenkins
-- Jenkins deploy an Fuel@OPNFV stack instance on a nested hypervisor environment (KVM)
+- Documentation built by Jenkins
+- The Arno .iso image built by Jenkins
+- Automated deployment of the Arno release with the Fuel deployment tool stack instance on bare metal or a nested hypervisor environment (KVM)
+- Automated validation of the Arno deployment
-Automatic test of the deployed system is not part of this pre-release.
4 Release Data
================
+--------------------------------------+--------------------------------------+
-| **Project** | Arno/genesis/fuel |
+| **Project** | Arno/genesis/fuel |
| | |
+--------------------------------------+--------------------------------------+
-| **Repo/tag** | genesis/arno-rc2 |
+| **Repo/tag** | genesis/arno |
| | |
+--------------------------------------+--------------------------------------+
-| **Release designation** | Arno RC2 |
+| **Release designation** | Arno |
| | |
+--------------------------------------+--------------------------------------+
-| **Release date** | 2015-04-16 |
-| | |
-+--------------------------------------+--------------------------------------+
-| **Purpose of the delivery** | OPNFV Internal quality assurance |
-| | and CI Pipline dry-run |
+| **Release date** | 2015-Spring |
| | |
+--------------------------------------+--------------------------------------+
4.1.1 Module version changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-This is the first tracked version of genesis/fuel. It is based on following upstream versions:
+This is the first tracked release of genesis/fuel. It is based on following upstream versions:
- Fuel 6.0.1 (Juno release)
- OpenDaylight Helium-SR2
-- Ubuntu 12.04.5
-
4.1.2 Document version changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is the first tracked version of genesis/fuel. It comes with the following documentation:
-- OPNFV Installation instructions for - Fuel@OPNFV - ver. 0.0.1
-- OPNFV Release Note for "Arno-RC2 release candidate" - Fuel@OPNFV - ver. 0.1 (this document)
+- OPNFV Installation instructions for the Arno release with the Fuel deployment tool - ver. 0.0.1
+- OPNFV Release Notes for Arno release with the Fuel deployment tool - ver. 0.1 (this document)
4.2 Reason for version
----------------------
4.3.2 Documentation deliverables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- OPNFV Installation instructions for - Fuel@OPNFV - ver. 0.0.1
-- OPNFV Release Note for "Arno-RC2 release candidate" - Fuel@OPNFV - ver. 0.1 (this document)
+- OPNFV Installation instructions for Arno release with the Fuel deployment tool - ver. 0.0.1
+- OPNFV Release Note for Arno release with the Fuel deployment tool - ver. 0.1 (this document)
5 Known Limitations, Issues and Workarounds
============================================
6 Test Result
==============
-Fuel@OPNFV Arno RC2 has undergone QA test runs with the following results:
+Arno release with the Fuel deployment tool has undergone QA test runs with the following results:
+--------------------------------------+--------------------------------------+
| **TEST-SUITE** | **Results:** |