diff options
56 files changed, 591 insertions, 998 deletions
diff --git a/build/f_example_control_bond/Makefile b/build/f_example_control_bond/Makefile deleted file mode 100644 index 0949737bc..000000000 --- a/build/f_example_control_bond/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -############################################################################## -# 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 -############################################################################## - -TOP := $(shell pwd) - -.PHONY: all -all: - -.PHONY: clean -clean: - @rm -rf tmp - @rm -rf release - -.PHONY: validate-cache -validate-cache: - @echo "No cache validation schema available for $(shell pwd)" - @echo "Continuing ..." - -.PHONY: release -release: - @cp -Rvp puppet/modules/* $(PUPPET_DEST) diff --git a/build/f_example_control_bond/README b/build/f_example_control_bond/README deleted file mode 100644 index 4449b2ff2..000000000 --- a/build/f_example_control_bond/README +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################## -# 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 -############################################################################## - -This is an example of a modification of the bridge and bonding of interfaces. -Rationale: Fuel currently don't support bonding of the "Admin" network, which -becomes a problem if you want to co-locate the single "Admin" and the redundant -bonded "Management" network on one and the same physical network in order to minimize -number of NICs, switches and cables. -This example show how you can modify the bridge and bonding settings and scripts to -achieve co-location. Of course the FUEL GUI becomes shorted in this respect, I.e. -the "admin" and "management" network cant be dragged across the NICs in the GUI. - -The f_example_control_bond has the following structure: -. -+--------+----------+-----------+ - | | | - puppet/ Makefile README - | (this file) - | - | - modules/ - | - | - | - opnfv/ - | - +--------------+ - | | - files/ manifests/ - | | - | | - | | - control-bond control-bond.pp - -Makefile: -Invoked by the git root Makefile, copies the files up to the release build -directory. - -control-bond: -The control-bond file is the .init file orchestrating the interface-, bridge- -and bond actions required for enabling the control bond - -control-bond.pp: -The control-bond.pp is the pupet manifest orchestrating the placement and -configuration of the control-bond shell script file. - -To activate this example feature, add "SUBDIRS += f_example_control_bond" in the git root Makefile. - - diff --git a/build/f_example_control_bond/puppet/modules/opnfv/files/control-bond b/build/f_example_control_bond/puppet/modules/opnfv/files/control-bond deleted file mode 100644 index bf2930d73..000000000 --- a/build/f_example_control_bond/puppet/modules/opnfv/files/control-bond +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################## -# 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 -############################################################################## - -#!/bin/sh -### BEGIN INIT INFO -# Provides: control-bond -# Required-Start: $remote_fs $all -# Required-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Bonds eth0 and eth1 and changes bridge configuration. -### END INIT INFO - - -PATH=/sbin:/usr/sbin:/bin:/usr/bin -VSCTL=/usr/bin/ovs-vsctl -APPCTL=/usr/bin/ovs-appctl - - -add_control_bond() { - logger "Starting addition of control-bond" - $VSCTL --may-exist br-fw-admin - $VSCTL --may-exist br-mgmt - $VSCTL add-bond br-fw-admin bond-control eth0 eth1 - - $VSCTL set port br-mgmt tag=66 - $APPCTL bond/set-active-slave bond-control eth0 - - $VSCTL add-port br-fw-admin admin-to-mgmt - $VSCTL add-port br-mgmt mgmt-to-admin - $VSCTL set interface admin-to-mgmt type=patch - $VSCTL set interface mgmt-to-admin type=patch - - $VSCTL set interface admin-to-mgmt options:peer=mgmt-to-admin - $VSCTL set interface mgmt-to-admin options:peer=admin-to-mgmt - - $VSCTL set port admin-to-mgmt trunk=66 - $VSCTL set port mgmt-to-admin trunk=66 - logger "Finished addition of control-bond" -} - -status_control_bond() { - if [ ! -f $VSCTL ]; then - return 1 - else - $VSCTL show | grep -q "admin-to-mgmt" - return $? - fi -} - -case "$1" in - start) - status_control_bond - if [ $? -eq 0 ]; then - exit 0 - else - add_control_bond - fi - ;; - restart|reload|force-reload) - echo "Error: argument '$1' not supported" >&2 - exit 3 - ;; - status) - status_control_bond - if [ $? -eq 0 ]; then - echo "The control-bond is enabled" - exit 0 - else - echo "The control-bond is disabled" - exit 1 - fi - - ;; - stop) - echo "Stop is not supported" - exit 0 - ;; - *) - echo "Usage: $0 start|status" >&2 - exit 3 - ;; -esac diff --git a/build/f_example_control_bond/puppet/modules/opnfv/manifests/control-bond.pp b/build/f_example_control_bond/puppet/modules/opnfv/manifests/control-bond.pp deleted file mode 100644 index 22fe78171..000000000 --- a/build/f_example_control_bond/puppet/modules/opnfv/manifests/control-bond.pp +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################## -# 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 -############################################################################## - -# Class: opnfv::control-bond -# -# Bridge control and management networks together using OVS. -# -# - -class opnfv::control-bond { - notify { '*** In Opnfv::control-bond-start ***': } - - file { "/etc/init.d/control-bond": - source => "puppet:///modules/opnfv/control-bond", - owner => 'root', - group => 'root', - mode => '0755', - notify => Service["control-bond"] - } - - - service { "control-bond": - ensure => running, - require => [ File["/etc/init.d/control-bond"], Service["openvswitch-service"] ], - } - - # Only start scripts - we don't want to bring down - # bridge during shutdown - - file { "/etc/rc2.d/S18control-bond": - ensure => 'link', - target => '/etc/init.d/control-bond', - } - - file { "/etc/rc3.d/S18control-bond": - ensure => 'link', - target => '/etc/init.d/control-bond', - } - - file { "/etc/rc4.d/S18control-bond": - ensure => 'link', - target => '/etc/init.d/control-bond', - } - - file { "/etc/rc5.d/S18control-bond": - ensure => 'link', - target => '/etc/init.d/control-bond', - } -} diff --git a/build/f_isoroot/f_collectd-ceilometer-pluginbuild/packages.yaml b/build/f_isoroot/f_collectd-ceilometer-pluginbuild/packages.yaml index d6fea9269..1ba7201f4 100644 --- a/build/f_isoroot/f_collectd-ceilometer-pluginbuild/packages.yaml +++ b/build/f_isoroot/f_collectd-ceilometer-pluginbuild/packages.yaml @@ -1,2 +1,9 @@ +############################################################################## +# Copyright (c) 2016 OPNFV. +# 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 +############################################################################## packages: - "collectd" diff --git a/build/f_isoroot/f_kvm-pluginbuild/config.mk b/build/f_isoroot/f_kvm-pluginbuild/config.mk index 9fb2f9283..eaef3d414 100644 --- a/build/f_isoroot/f_kvm-pluginbuild/config.mk +++ b/build/f_isoroot/f_kvm-pluginbuild/config.mk @@ -7,6 +7,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -KVMFORNFV_BRANCH=b1c117f1c8414bddbe4370414590f5f0b62ae4d1 +KVMFORNFV_BRANCH=stable/colorado KVMFORNFV_REPO=https://gerrit.opnfv.org/gerrit/kvmfornfv -KVMFORNFV_CHANGE= +KVMFORNFV_CHANGE=e6588d1d59d7ac24f25f644650e6845561dd441b diff --git a/build/f_isoroot/f_ovs-nsh-dpdk-pluginbuild/config.mk b/build/f_isoroot/f_ovs-nsh-dpdk-pluginbuild/config.mk index 1524dd78b..8effbd26b 100644 --- a/build/f_isoroot/f_ovs-nsh-dpdk-pluginbuild/config.mk +++ b/build/f_isoroot/f_ovs-nsh-dpdk-pluginbuild/config.mk @@ -7,6 +7,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -OVS_NSH_DPDK_BRANCH?=f59c16b308627534958993e727c6d388199af5e8 +OVS_NSH_DPDK_BRANCH?=074aadce66ef3cf322a00a3cff5c57deb84088b5 OVS_NSH_DPDK_REPO?=https://review.openstack.org/openstack/fuel-plugin-ovs OVS_NSH_DPDK_CHANGE?= diff --git a/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/Makefile b/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/Makefile deleted file mode 100644 index 9455389bf..000000000 --- a/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -############################################################################## -# Copyright (c) 2015 Ericsson AB and others. -# jonas.bjurel@eicsson.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 -############################################################################## - -TOP := $(shell pwd) - -############################################################################ -# BEGIN of Include definitions -# -include config.mk -# -# END Include definitions -############################################################################# - -.PHONY: all -all: .ovsnfvbuild - -.PHONY: clean -clean: - @rm -f .ovsnfvbuild ../release/opnfv/fuel-plugin-ovsnfv-*.rpm fuel-plugin-ovsnfv-*.rpm - @rm -f $(BUILD_BASE)/gitinfo_ovsnfv-dpdk-plugin.txt gitinfo_ovsnfv-dpdk-plugin.txt - -.PHONY: release -release:.ovsnfvbuild - @rm -f ../release/opnfv/fuel-plugin-ovsnfv-*.rpm - @mkdir -p ../release/opnfv - @cp fuel-plugin-ovsnfv*.rpm ../release/opnfv/ - cp gitinfo_ovsnfv-dpdk-plugin.txt $(BUILD_BASE) - -.ovsnfvbuild: - @rm -rf ovsnfv - git clone $(OVSNFV_DPDK_REPO) ovsnfv - cd ovsnfv; \ - git checkout $(OVSNFV_DPDK_BRANCH); \ - if [ ! -z $(OVSNFV_DPDK_CHANGE) ]; then \ - git fetch $(OVSNFV_DPDK_REPO) $(OVSNFV_DPDK_CHANGE); \ - git checkout FETCH_HEAD; \ - fi - cd ovsnfv; \ - INCLUDE_DEPENDENCIES=true fpb --debug --build $(OVSNFV_DPDK_DIR) - @mv ovsnfv/$(OVSNFV_DPDK_DIR)/fuel-plugin-ovsnfv*.rpm . - $(REPOINFO) -r . > gitinfo_ovsnfv-dpdk-plugin.txt - @rm -rf ovsnfv - @touch .ovsnfvbuild - # Store artifact in cache straight away if caching is enabled - # (no .cacheid will be present unless this is a cached build) - test -f .cacheid && $(MAKE) -f Makefile put-cache || exit 0 - -############################################################################# -# Cache operations - only used when building through ci/build.sh -############################################################################# - - -# Create a unique hash to be used for getting and putting cache, based on: -# - The SHA1 hash of the HEAD on the plugin repo's $(OVSNFV_DPDK_BRANCH) -# - The contents of this Makefile -.cacheid: - @if [ ! -z $(OVSNFV_DPDK_CHANGE) ]; then \ - $(CACHETOOL) getcommitid $(OVSNFV_DPDK_REPO) $(OVSNFV_DPDK_CHANGE) > .cachedata; \ - else \ - $(CACHETOOL) getcommitid $(OVSNFV_DPDK_REPO) $(OVSNFV_DPDK_BRANCH) > .cachedata; \ - fi - @sha1sum Makefile | awk {'print $$1'} >> .cachedata - @sha1sum config.mk | awk {'print $$1'} >> .cachedata - @echo -n $(UBUNTU_ARCH) | sha1sum | awk {'print $$1'} >> .cachedata - @cat .cachedata | $(CACHETOOL) getid > .cacheid - -# Clean local data related to caching - called prior to ordinary build -.PHONY: clean-cache -clean-cache: clean - @rm -f .cachedata .cacheid - -# Try to download cache - called prior to ordinary build -.PHONY: get-cache -get-cache: .cacheid - @if $(CACHETOOL) check $(shell cat .cacheid); then \ - $(CACHETOOL) get $(shell cat .cacheid) | tar xf -;\ - else \ - echo "No cache item found for $(shell cat .cacheid)" ;\ - exit 0;\ - fi - -# Store cache if not already stored - called after ordinary build -.PHONY: put-cache -put-cache: .cacheid - @tar cf - .ovsnfvbuild fuel-plugin-ovsnfv*.rpm gitinfo_ovsnfv-dpdk-plugin.txt | $(CACHETOOL) put $(shell cat .cacheid) diff --git a/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/config.mk b/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/config.mk deleted file mode 100644 index 1893fce4a..000000000 --- a/build/f_isoroot/f_ovsnfv-dpdk-pluginbuild/config.mk +++ /dev/null @@ -1,13 +0,0 @@ -############################################################################## -# Copyright (c) 2015 Ericsson AB and others. -# jonas.bjurel@eicsson.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 -############################################################################## - -OVSNFV_DPDK_BRANCH=stable/brahmaputra -OVSNFV_DPDK_REPO=https://gerrit.opnfv.org/gerrit/p/ovsnfv.git -OVSNFV_DPDK_DIR=fuel-plugin-ovsnfv -OVSNFV_DPDK_CHANGE= diff --git a/build/f_isoroot/f_repobuild/fuel_bootstrap_cli.yaml b/build/f_isoroot/f_repobuild/fuel_bootstrap_cli.yaml index d8fab974f..fcf4257f1 100644 --- a/build/f_isoroot/f_repobuild/fuel_bootstrap_cli.yaml +++ b/build/f_isoroot/f_repobuild/fuel_bootstrap_cli.yaml @@ -1,3 +1,11 @@ +############################################################################## +# Copyright (c) 2015,2016 Ericsson AB and others. +# mskalski@mirantis.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 +############################################################################## --- root_ssh_authorized_file: /root/.ssh/id_rsa.pub extend_kopts: "biosdevname=0 net.ifnames=1 debug ignore_loglevel log_buf_len=10M print_fatal_signals=1 LOGLEVEL=8" diff --git a/build/f_isoroot/f_repobuild/select_ubuntu_repo.sh b/build/f_isoroot/f_repobuild/select_ubuntu_repo.sh index 7b134e73c..20b3485a1 100755 --- a/build/f_isoroot/f_repobuild/select_ubuntu_repo.sh +++ b/build/f_isoroot/f_repobuild/select_ubuntu_repo.sh @@ -8,24 +8,32 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -# Try to choose close ubuntu mirror +# Try to choose close ubuntu mirror from mirrors.txt, but "whitewash" this +# against the full repo list to removed mirrors not up-to-date. # Some Ubuntu mirrors seem less reliable for this type of mirroring - # as they are discoved they can be added to the blacklist below in order # for them not to be considered. -BLACKLIST="mirrors.se.eu.kernel.org mirror.its.dal.ca" +BLACKLIST="mirror.clibre.uqam.ca" -for url in $(curl -s http://mirrors.ubuntu.com/mirrors.txt) -do - host=$(echo $url | cut -d'/' -f3) - echo ${BLACKLIST} | grep -q ${host} && continue - if curl -s -o /dev/null --head --fail "$url"; then - echo $url - exit 0 - else - continue - fi -done +#NOTE: For now the mirror selection is disabled due to issues not yet +# understood/resolved. +#for url in $((curl -s https://launchpad.net/ubuntu/+archivemirrors | \ +# grep -P -B8 "statusUP|statusSIX" | \ +# grep -o -P "(f|ht)tp.*\"" | \ +# sed 's/"$//' | sort | uniq; \ +# curl -s http://mirrors.ubuntu.com/mirrors.txt | sort | uniq) | \ +# sort | uniq -d) +#do +# host=$(echo $url | cut -d'/' -f3) +# echo ${BLACKLIST} | grep -q ${host} && continue +# if curl -s -o /dev/null --head --fail "$url"; then +# echo $url +# exit 0 +# else +# continue +# fi +#done # If no suitable local mirror can be found, # the default archive is returned instead. diff --git a/build/patch-repos/0040-xorriso-fails-to-add-files-with-path-longer-then-240.patch b/build/patch-repos/0040-xorriso-fails-to-add-files-with-path-longer-then-240.patch new file mode 100644 index 000000000..734523040 --- /dev/null +++ b/build/patch-repos/0040-xorriso-fails-to-add-files-with-path-longer-then-240.patch @@ -0,0 +1,24 @@ +From: Artem Silenkov <asilenkov@mirantis.com> +Date: Tue, 22 Sep 2015 21:54:44 +0300 +Subject: [PATCH] xorriso fails to add files with path longer then 240 + +joliet-long option added to xorriso command line + +Change-Id: I97016cf3e6a554f44d839740ba7d210337435cdc +Related-Bug: #1498619 +--- + iso/module.mk | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/iso/module.mk b/iso/module.mk +index 8995378..0073068 100644 +--- a/iso/module.mk ++++ b/iso/module.mk +@@ -174,6 +174,7 @@ $(ISO_PATH): $(BUILD_DIR)/iso/isoroot.done + -V $(ISO_VOLUME_ID) -p $(ISO_VOLUME_PREP) \ + -J -R \ + -graft-points \ ++ -joliet-long \ + -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table \ + -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \ + -eltorito-alt-boot -e images/efiboot.img -no-emul-boot \ diff --git a/build/patch-repos/build/repos/fuel-library/0001-Disable-token-revoke-to-increase-keystone-performanc.patch b/build/patch-repos/build/repos/fuel-library/0001-Disable-token-revoke-to-increase-keystone-performanc.patch new file mode 100644 index 000000000..4d5be493b --- /dev/null +++ b/build/patch-repos/build/repos/fuel-library/0001-Disable-token-revoke-to-increase-keystone-performanc.patch @@ -0,0 +1,44 @@ +From ba542dde34743b276547b7ca3c6591feb9000877 Mon Sep 17 00:00:00 2001 +From: iberezovskiy <iberezovskiy@mirantis.com> +Date: Mon, 19 Sep 2016 12:35:05 +0300 +Subject: [PATCH] Disable token revoke to increase keystone performance + +Change-Id: I4df816369093908ad1eac372f38c92155efbe8e0 +Closes-bug: #1625077 +--- + .../openstack_tasks/manifests/keystone/keystone.pp | 2 ++ + tests/noop/spec/hosts/keystone/keystone_spec.rb | 5 +++++ + 2 files changed, 7 insertions(+) + +diff --git a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp +index 3162287..ba9d7df 100644 +--- a/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp ++++ b/deployment/puppet/openstack_tasks/manifests/keystone/keystone.pp +@@ -327,6 +327,8 @@ class openstack_tasks::keystone::keystone { + memcache_pool_unused_timeout => '60', + cache_memcache_servers => $memcache_servers, + policy_driver => 'keystone.policy.backends.sql.Policy', ++ # Set revoke_by_id to false according to LP #1625077 ++ revoke_by_id => false, + } + + Package<| title == 'keystone'|> ~> Service<| title == 'keystone'|> +diff --git a/tests/noop/spec/hosts/keystone/keystone_spec.rb b/tests/noop/spec/hosts/keystone/keystone_spec.rb +index b29e691..3c0f847 100644 +--- a/tests/noop/spec/hosts/keystone/keystone_spec.rb ++++ b/tests/noop/spec/hosts/keystone/keystone_spec.rb +@@ -176,6 +176,11 @@ describe manifest do + should contain_class('keystone').with('sync_db' => primary_controller) + end + ++ it 'should declare keystone class with revoke_by_id set to false' do ++ # Set revoke_by_id to false according to LP #1625077 ++ should contain_class('keystone').with('revoke_by_id' => false) ++ end ++ + it 'should configure keystone with paramters' do + should contain_keystone_config('token/caching').with(:value => 'false') + should contain_keystone_config('cache/enabled').with(:value => 'true') +-- +1.7.9.5 + diff --git a/build/vagrant/README.rst b/build/vagrant/README.rst deleted file mode 100644 index 7db098dfa..000000000 --- a/build/vagrant/README.rst +++ /dev/null @@ -1,39 +0,0 @@ -================================= -Fuel@OPNFV Build Based on Vagrant -================================= - -License -======= - -This work is licensed under a Creative Commons Attribution 4.0 -International License. .. http://creativecommons.org/licenses/by/4.0 .. -(c) Ruijing Guo (Intel) and others - - -Abstract -======== - -This document describes how to build fuel iso based on vagrant. -The build is to follow fuel/docs/build-instruction.rst. - -Note -==== - -Vagrant based build is not official build. The target user is fuel@opnfv -developer. - -How to Build -============ - -run ./build_fuel.sh - - -Vagrantfile -=========== - -you can change memory & cpus to fit your enviorments. - -setup_fuel.sh -============= - -The script is run in VM and follow fuel/docs/build-instruction.rst. diff --git a/build/vagrant/Vagrantfile b/build/vagrant/Vagrantfile deleted file mode 100644 index 0fbadf2ae..000000000 --- a/build/vagrant/Vagrantfile +++ /dev/null @@ -1,23 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - - config.vm.box = "trusty-server-cloudimg-amd64" - config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box" - - config.vm.define "fuel" do | h | - h.vm.host_name = "fuel" - h.vm.synced_folder "../..", "/fuel" - h.vm.provider :virtualbox do |v| - v.customize ["modifyvm", :id, "--memory", 8192] - v.customize ["modifyvm", :id, "--cpus", 8] - file_to_disk = 'large_disk.vdi' - v.customize ['createhd', '--filename', file_to_disk, '--size', 512 * 1024] - v.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk ] - end - end -end diff --git a/build/vagrant/build_fuel.sh b/build/vagrant/build_fuel.sh deleted file mode 100755 index 051ee4dfd..000000000 --- a/build/vagrant/build_fuel.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -sudo apt-get update -sudo apt-get install -y vagrant virtualbox -vagrant destroy -f; vagrant up -vagrant ssh -c "sudo apt-get update; sudo apt-get install -y linux-generic-lts-vivid" -vagrant reload -vagrant ssh -c "/vagrant/setup_fuel.sh" -vagrant ssh -c "cd fuel/build; make; cp fuel*.iso /vagrant" diff --git a/build/vagrant/setup_fuel.sh b/build/vagrant/setup_fuel.sh deleted file mode 100755 index b4d7651f9..000000000 --- a/build/vagrant/setup_fuel.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -sudo apt-get install -y git git-review make curl p7zip-full - -#install docker by https://docs.docker.com/engine/installation/linux/ubuntulinux/ -#sudo apt-get install linux-image-extra-$(uname -r) -sudo apt-get install -y apt-transport-https ca-certificates -sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D - -cat << EOF | sudo tee /etc/apt/sources.list.d/docker.list -deb https://apt.dockerproject.org/repo ubuntu-trusty main -EOF -sudo apt-get update -sudo apt-get purge lxc-docker -y - -#workaroud for large disk -sudo mkdir /var/lib/docker -yes | sudo mkfs.ext4 /dev/sdb -sudo mount /dev/sdb /var/lib/docker - -sudo apt-cache policy docker-engine -sudo apt-get install -y docker-engine -sudo service docker start -sudo groupadd docker -sudo usermod -aG docker vagrant -cp -r /fuel /home/vagrant diff --git a/deploy/cloud/configure_nodes.py b/deploy/cloud/configure_nodes.py index 20ecc1724..ea50307b1 100644 --- a/deploy/cloud/configure_nodes.py +++ b/deploy/cloud/configure_nodes.py @@ -45,9 +45,6 @@ class ConfigureNodes(object): exec_cmd('fuel node set --node-id %s --role %s --env %s' % (node_id, roles_blade[0], self.env_id)) - # Download the unmodified default deployment configuration, because we - # need it for the network config. - self.download_deployment_config() for node_id, roles_blade in self.node_id_roles_dict.iteritems(): # Modify node attributes self.download_attributes(node_id) @@ -56,13 +53,18 @@ class ConfigureNodes(object): # Modify interfaces configuration self.download_interface_config(node_id) self.modify_node_interface(node_id, roles_blade) - self.modify_node_network_schemes(node_id, roles_blade) self.upload_interface_config(node_id) + # Currently not used, we use default deployment facts + # which are generated by fuel based on type segmentation + # and network to nic assignment + # # Download our modified deployment configuration, which includes our # changes to network topology etc. - self.download_deployment_config() - self.upload_deployment_config() + #self.download_deployment_config() + #for node_id, roles_blade in self.node_id_roles_dict.iteritems(): + # self.modify_node_network_schemes(node_id, roles_blade) + #self.upload_deployment_config() def modify_node_network_schemes(self, node_id, roles_blade): log('Modify network transformations for node %s' % node_id) @@ -71,14 +73,14 @@ class ConfigureNodes(object): deployment_dir = '%s/deployment_%s' % ( self.yaml_config_dir, self.env_id) backup(deployment_dir) - for node_file in glob.glob(deployment_dir + '/*_%s.yaml' % node_id): - with io.open(node_file) as stream: - node = yaml.load(stream) + node_file = ('%s/%s.yaml' % (deployment_dir, node_id)) + with io.open(node_file) as stream: + node = yaml.load(stream) - node['network_scheme'].update(transformations) + node['network_scheme'].update(transformations) - with io.open(node_file, 'w') as stream: - yaml.dump(node, stream, default_flow_style=False) + with io.open(node_file, 'w') as stream: + yaml.dump(node, stream, default_flow_style=False) def download_deployment_config(self): log('Download deployment config for environment %s' % self.env_id) @@ -129,6 +131,22 @@ class ConfigureNodes(object): with open(attributes_yaml, 'w') as stream: yaml.dump(result_attributes, stream, default_flow_style=False) + # interface configuration can + # looks like this: + # + # interfaces_dpdk: + # ens3: + # - fuelweb_admin + # ens4: + # - storage + # - management + # ens5: + # - interface_properties: + # dpdk: + # enabled: true + # - private + # ens6: + # - public def modify_node_interface(self, node_id, roles_blade): log('Modify interface config for node %s' % node_id) interface_yaml = ('%s/node_%s/interfaces.yaml' @@ -150,11 +168,21 @@ class ConfigureNodes(object): for interface in interfaces: interface['assigned_networks'] = [] if interface['name'] in interface_config: - for net_name in interface_config[interface['name']]: + for prop in interface_config[interface['name']]: net = {} - net['id'] = net_name_id[net_name] - net['name'] = net_name - interface['assigned_networks'].append(net) + #net name + if isinstance(prop, six.string_types): + net['id'] = net_name_id[prop] + net['name'] = prop + interface['assigned_networks'].append(net) + #network properties + elif isinstance(prop, dict): + if not 'interface_properties' in prop: + log('Interface configuration contain unknow dict: %s' % prop) + continue + interface['interface_properties'] = \ + self._merge_dicts(interface.get('interface_properties', {}), + prop.get('interface_properties', {})) with io.open(interface_yaml, 'w') as stream: yaml.dump(interfaces, stream, default_flow_style=False) diff --git a/deploy/common.py b/deploy/common.py index 80832e201..07ad54372 100644 --- a/deploy/common.py +++ b/deploy/common.py @@ -74,13 +74,13 @@ def exec_cmd(cmd, check=True, attempts=1, delay=5, verbose=False, mask_args=[], if check: if return_code > 0: stderr = stderr.strip() - print "Failed command: " + str(masked_cmd) - print "Command returned response: " + str(stderr) - print "Command return code: " + str(return_code) + print("Failed command: " + str(masked_cmd)) + print("Command returned response: " + str(stderr)) + print("Command return code: " + str(return_code)) raise Exception(stderr) else: - print "Command: " + str(masked_cmd) - print str(response) + print("Command: " + str(masked_cmd)) + print(str(response)) return response return response, return_code diff --git a/deploy/config/dea_base.yaml b/deploy/config/dea_base.yaml index 0b8485ba0..c1a0606bc 100644 --- a/deploy/config/dea_base.yaml +++ b/deploy/config/dea_base.yaml @@ -636,43 +636,25 @@ settings: section: main universe multiverse suite: trusty type: deb - uri: http://archive.ubuntu.com/ubuntu/ + uri: http://10.20.0.2:8080/mirrors/ubuntu/ - name: ubuntu-updates priority: null section: main universe multiverse suite: trusty-updates type: deb - uri: http://archive.ubuntu.com/ubuntu/ + uri: http://10.20.0.2:8080/mirrors/ubuntu/ - name: ubuntu-security priority: null section: main universe multiverse suite: trusty-security type: deb - uri: http://archive.ubuntu.com/ubuntu/ + uri: http://10.20.0.2:8080/mirrors/ubuntu/ - name: mos priority: 1050 section: main restricted suite: mos9.0 type: deb uri: http://10.20.0.2:8080/mitaka-9.0/ubuntu/x86_64 - - name: mos-updates - priority: 1050 - section: main restricted - suite: mos9.0-updates - type: deb - uri: http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ - - name: mos-security - priority: 1050 - section: main restricted - suite: mos9.0-security - type: deb - uri: http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ - - name: mos-holdback - priority: 1100 - section: main restricted - suite: mos9.0-holdback - type: deb - uri: http://mirror.fuel-infra.org/mos-repos/ubuntu/9.0/ - name: Auxiliary priority: 1150 section: main restricted diff --git a/deploy/config/labs/devel-pipeline/default/fuel/config/dea-pod-override.yaml b/deploy/config/labs/devel-pipeline/default/fuel/config/dea-pod-override.yaml index 985a2920c..32b2cfb22 100644 --- a/deploy/config/labs/devel-pipeline/default/fuel/config/dea-pod-override.yaml +++ b/deploy/config/labs/devel-pipeline/default/fuel/config/dea-pod-override.yaml @@ -25,42 +25,29 @@ interfaces_1: - private ens6: - public -transformations_1: - transformations: - - action: add-br - name: br-fw-admin - - action: add-br - name: br-mgmt - - action: add-br - name: br-storage - - action: add-br - name: br-ex - - action: add-br - name: br-floating - provider: ovs - - action: add-patch - bridges: - - br-floating - - br-ex - mtu: 65000 - provider: ovs - - action: add-br - name: br-mesh - - action: add-port - bridge: br-fw-admin - name: ens3 - - action: add-port - bridge: br-mgmt - name: ens4 - - action: add-port - bridge: br-storage - name: ens3.102 - - action: add-port - bridge: br-mesh - name: ens5.103 - - action: add-port - bridge: br-ex - name: ens6 +interfaces_dpdk: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + - interface_properties: + dpdk: + enabled: true + ens6: + - public +interfaces_vlan: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + ens6: + - public fuel: ADMIN_NETWORK: dhcp_pool_end: 10.20.0.254 diff --git a/deploy/config/labs/devel-pipeline/default/fuel/config/dha.yaml b/deploy/config/labs/devel-pipeline/default/fuel/config/dha.yaml index ad2f5ebde..0374c5d29 100644 --- a/deploy/config/labs/devel-pipeline/default/fuel/config/dha.yaml +++ b/deploy/config/labs/devel-pipeline/default/fuel/config/dha.yaml @@ -1,3 +1,12 @@ +############################################################################## +# 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 +############################################################################## dha-pod-config-metadata: title: Deployment Hardware Adapter (DHA) for fuel development pipeline - default version version: 0.0.3 diff --git a/deploy/config/labs/devel-pipeline/elx/fuel/config/dea-pod-override.yaml b/deploy/config/labs/devel-pipeline/elx/fuel/config/dea-pod-override.yaml index ce3b62af9..cb80e3855 100644 --- a/deploy/config/labs/devel-pipeline/elx/fuel/config/dea-pod-override.yaml +++ b/deploy/config/labs/devel-pipeline/elx/fuel/config/dea-pod-override.yaml @@ -25,42 +25,29 @@ interfaces_1: - private ens6: - public -transformations_1: - transformations: - - action: add-br - name: br-fw-admin - - action: add-br - name: br-mgmt - - action: add-br - name: br-storage - - action: add-br - name: br-ex - - action: add-br - name: br-floating - provider: ovs - - action: add-patch - bridges: - - br-floating - - br-ex - mtu: 65000 - provider: ovs - - action: add-br - name: br-mesh - - action: add-port - bridge: br-fw-admin - name: ens3 - - action: add-port - bridge: br-mgmt - name: ens4 - - action: add-port - bridge: br-storage - name: ens3.102 - - action: add-port - bridge: br-mesh - name: ens5.103 - - action: add-port - bridge: br-ex - name: ens6 +interfaces_dpdk: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + - interface_properties: + dpdk: + enabled: true + ens6: + - public +interfaces_vlan: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + ens6: + - public fuel: ADMIN_NETWORK: dhcp_pool_end: 10.20.0.254 diff --git a/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml b/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml index 3c246c11c..c2352f924 100644 --- a/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml +++ b/deploy/config/labs/devel-pipeline/elx/fuel/config/dha.yaml @@ -1,3 +1,12 @@ +############################################################################## +# 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 +############################################################################## dha-pod-config-metadata: title: Deployment Hardware Adapter (DHA) for fuel development pipeline - Ericsson ELX version version: 0.0.3 diff --git a/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dea-pod-override.yaml b/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dea-pod-override.yaml index 736e9af3c..92cc0e616 100644 --- a/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dea-pod-override.yaml +++ b/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dea-pod-override.yaml @@ -25,42 +25,29 @@ interfaces_1: - private ens6: - public -transformations_1: - transformations: - - action: add-br - name: br-fw-admin - - action: add-br - name: br-mgmt - - action: add-br - name: br-storage - - action: add-br - name: br-ex - - action: add-br - name: br-floating - provider: ovs - - action: add-patch - bridges: - - br-floating - - br-ex - mtu: 65000 - provider: ovs - - action: add-br - name: br-mesh - - action: add-port - bridge: br-fw-admin - name: ens3 - - action: add-port - bridge: br-mgmt - name: ens4 - - action: add-port - bridge: br-storage - name: ens3.102 - - action: add-port - bridge: br-mesh - name: ens5.103 - - action: add-port - bridge: br-ex - name: ens6 +interfaces_dpdk: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + - interface_properties: + dpdk: + enabled: true + ens6: + - public +interfaces_vlan: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + ens6: + - public fuel: ADMIN_NETWORK: dhcp_pool_end: 10.20.0.254 diff --git a/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dha.yaml b/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dha.yaml index f2aeabd4c..d8f904362 100644 --- a/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dha.yaml +++ b/deploy/config/labs/devel-pipeline/huawei-ch/fuel/config/dha.yaml @@ -1,3 +1,12 @@ +############################################################################## +# 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 +############################################################################## dha-pod-config-metadata: title: Deployment Hardware Adapter (DHA) for fuel development pipeline - default version version: 0.0.4 diff --git a/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dea-pod-override.yaml b/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dea-pod-override.yaml index eed982d01..ed7c63fac 100644 --- a/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dea-pod-override.yaml +++ b/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dea-pod-override.yaml @@ -25,42 +25,29 @@ interfaces_1: - private ens6: - public -transformations_1: - transformations: - - action: add-br - name: br-fw-admin - - action: add-br - name: br-mgmt - - action: add-br - name: br-storage - - action: add-br - name: br-ex - - action: add-br - name: br-floating - provider: ovs - - action: add-patch - bridges: - - br-floating - - br-ex - mtu: 65000 - provider: ovs - - action: add-br - name: br-mesh - - action: add-port - bridge: br-fw-admin - name: ens3 - - action: add-port - bridge: br-mgmt - name: ens4 - - action: add-port - bridge: br-storage - name: ens3.102 - - action: add-port - bridge: br-mesh - name: ens5.103 - - action: add-port - bridge: br-ex - name: ens6 +interfaces_dpdk: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + - interface_properties: + dpdk: + enabled: true + ens6: + - public +interfaces_vlan: + ens3: + - fuelweb_admin + - storage + ens4: + - management + ens5: + - private + ens6: + - public fuel: ADMIN_NETWORK: dhcp_pool_end: 10.20.0.254 diff --git a/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dha.yaml b/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dha.yaml index 3657285e8..837293950 100644 --- a/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dha.yaml +++ b/deploy/config/labs/devel-pipeline/intel-sc/fuel/config/dha.yaml @@ -1,3 +1,12 @@ +############################################################################## +# 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 +############################################################################## dha-pod-config-metadata: title: Deployment Hardware Adapter (DHA) for fuel development pipeline - Intel Santa Clara, CA. USA version version: 0.0.1 diff --git a/deploy/config/plugins/fuel-bgpvpn_0.0.2.yaml b/deploy/config/plugins/fuel-bgpvpn_0.0.2.yaml index 21bcdf170..f7ab89b37 100644 --- a/deploy/config/plugins/fuel-bgpvpn_0.0.2.yaml +++ b/deploy/config/plugins/fuel-bgpvpn_0.0.2.yaml @@ -1,3 +1,11 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# 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 +############################################################################## plugin-config-metadata: title: BGPVPN fuel Plugin configuration template version: 0.2 diff --git a/deploy/config/plugins/fuel-bgpvpn_0.0.3.yaml b/deploy/config/plugins/fuel-bgpvpn_0.0.3.yaml index adca822fc..aeea9e450 100644 --- a/deploy/config/plugins/fuel-bgpvpn_0.0.3.yaml +++ b/deploy/config/plugins/fuel-bgpvpn_0.0.3.yaml @@ -1,3 +1,11 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# 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 +############################################################################## plugin-config-metadata: title: BGPVPN fuel Plugin configuration template version: 0.3 diff --git a/deploy/config/plugins/fuel-bgpvpn_0.9.0.yaml b/deploy/config/plugins/fuel-bgpvpn_0.9.0.yaml index bbdefaf6e..1aa1259ca 100644 --- a/deploy/config/plugins/fuel-bgpvpn_0.9.0.yaml +++ b/deploy/config/plugins/fuel-bgpvpn_0.9.0.yaml @@ -1,3 +1,11 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# 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 +############################################################################## plugin-config-metadata: title: BGPVPN fuel Plugin configuration template version: 0.9.0 diff --git a/deploy/deploy-config.py b/deploy/deploy-config.py index 436002d36..08cb36197 100644 --- a/deploy/deploy-config.py +++ b/deploy/deploy-config.py @@ -137,7 +137,6 @@ def merge_networks(list_1, list_2): return [new_nets.get(net.get('name'), net) for net in list_1] - def merge_dicts(dict1, dict2): for k in set(dict1).union(dict2): if k in dict1 and k in dict2: @@ -163,127 +162,6 @@ def merge_dicts(dict1, dict2): yield (k, dict1[k]) -setup_yaml() -kwargs = parse_arguments() - -# Generate final dea.yaml by merging following config files/fragments in revers priority order: -# "dea-base", "dea-pod-override", "deplyment-scenario/module-config-override" -# and "deployment-scenario/dea-override" -print('Generating final dea.yaml configuration....') - -# Fetch dea-base, extract and purge meta-data -print('Parsing dea-base from: ' + kwargs["dea_base_uri"] + "....") -response = urllib2.urlopen(kwargs["dea_base_uri"]) -dea_base_conf = yaml.load(response.read()) -dea_base_title = dea_base_conf['dea-base-config-metadata']['title'] -dea_base_version = dea_base_conf['dea-base-config-metadata']['version'] -dea_base_creation = dea_base_conf['dea-base-config-metadata']['created'] -dea_base_sha = sha_uri(kwargs["dea_base_uri"]) -dea_base_comment = dea_base_conf['dea-base-config-metadata']['comment'] -dea_base_conf.pop('dea-base-config-metadata') -final_dea_conf = dea_base_conf -dea_pod_override_nodes = None - -# Fetch dea-pod-override, extract and purge meta-data, merge with previous dea data structure -print('Parsing the dea-pod-override from: ' + kwargs["dea_pod_override_uri"] + "....") -response = urllib2.urlopen(kwargs["dea_pod_override_uri"]) -dea_pod_override_conf = yaml.load(response.read()) -if dea_pod_override_conf: - dea_pod_title = dea_pod_override_conf['dea-pod-override-config-metadata']['title'] - dea_pod_version = dea_pod_override_conf['dea-pod-override-config-metadata']['version'] - dea_pod_creation = dea_pod_override_conf['dea-pod-override-config-metadata']['created'] - dea_pod_sha = sha_uri(kwargs["dea_pod_override_uri"]) - dea_pod_comment = dea_pod_override_conf['dea-pod-override-config-metadata']['comment'] - print('Merging dea-base and dea-pod-override configuration ....') - dea_pod_override_conf.pop('dea-pod-override-config-metadata') - # Copy the list of original nodes, which holds info on their transformations - if 'nodes' in dea_pod_override_conf: - dea_pod_override_nodes = list(dea_pod_override_conf['nodes']) - if dea_pod_override_conf: - final_dea_conf = dict(merge_dicts(final_dea_conf, dea_pod_override_conf)) - -# Fetch deployment-scenario, extract and purge meta-data, merge deployment-scenario/ -# dea-override-configith previous dea data structure -print('Parsing deployment-scenario from: ' + kwargs["scenario"] + "....") - -response = urllib2.urlopen(kwargs["scenario_base_uri"] + "/scenario.yaml") -scenario_short_translation_conf = yaml.load(response.read()) -if kwargs["scenario"] in scenario_short_translation_conf: - scenario_uri = (kwargs["scenario_base_uri"] - + "/" - + scenario_short_translation_conf[kwargs["scenario"]]['configfile']) -else: - scenario_uri = kwargs["scenario_base_uri"] + "/" + kwargs["scenario"] -response = urllib2.urlopen(scenario_uri) -deploy_scenario_conf = yaml.load(response.read()) - -if deploy_scenario_conf: - deploy_scenario_title = deploy_scenario_conf['deployment-scenario-metadata']['title'] - deploy_scenario_version = deploy_scenario_conf['deployment-scenario-metadata']['version'] - deploy_scenario_creation = deploy_scenario_conf['deployment-scenario-metadata']['created'] - deploy_scenario_sha = sha_uri(scenario_uri) - deploy_scenario_comment = deploy_scenario_conf['deployment-scenario-metadata']['comment'] - deploy_scenario_conf.pop('deployment-scenario-metadata') -else: - print("Deployment scenario file not found or is empty") - print("Cannot continue, exiting ....") - sys.exit(1) - -dea_scenario_override_conf = deploy_scenario_conf["dea-override-config"] -if dea_scenario_override_conf: - print('Merging dea-base-, dea-pod-override- and deployment-scenario ' - 'configuration into final dea.yaml configuration....') - final_dea_conf = dict(merge_dicts(final_dea_conf, dea_scenario_override_conf)) - -# Fetch plugin-configuration configuration files, extract and purge meta-data, -# merge/append with previous dea data structure, override plugin-configuration with -# deploy-scenario/module-config-override -modules = [] -module_uris = [] -module_titles = [] -module_versions = [] -module_creations = [] -module_shas = [] -module_comments = [] -if deploy_scenario_conf["stack-extensions"]: - for module in deploy_scenario_conf["stack-extensions"]: - print('Loading configuration for module: ' - + module["module"] - + ' and merging it to final dea.yaml configuration....') - response = urllib2.urlopen(kwargs["plugins_uri"] - + '/' - + module["module-config-name"] - + '_' - + module["module-config-version"] - + '.yaml') - module_conf = yaml.load(response.read()) - modules.append(module["module"]) - module_uris.append(kwargs["plugins_uri"] - + '/' - + module["module-config-name"] - + '_' - + module["module-config-version"] - + '.yaml') - module_titles.append(str(module_conf['plugin-config-metadata']['title'])) - module_versions.append(str(module_conf['plugin-config-metadata']['version'])) - module_creations.append(str(module_conf['plugin-config-metadata']['created'])) - module_shas.append(sha_uri(kwargs["plugins_uri"] - + '/' - + module["module-config-name"] - + '_' - + module["module-config-version"] - + '.yaml')) - module_comments.append(str(module_conf['plugin-config-metadata']['comment'])) - module_conf.pop('plugin-config-metadata') - final_dea_conf['settings']['editable'].update(module_conf) - scenario_module_override_conf = module.get('module-config-override') - if scenario_module_override_conf: - dea_scenario_module_override_conf = {} - dea_scenario_module_override_conf['settings'] = {} - dea_scenario_module_override_conf['settings']['editable'] = {} - dea_scenario_module_override_conf['settings']['editable'][module["module"]] = scenario_module_override_conf - final_dea_conf = dict(merge_dicts(final_dea_conf, dea_scenario_module_override_conf)) - def get_node_ifaces_and_trans(nodes, nid): for node in nodes: if node['id'] == nid: @@ -294,117 +172,243 @@ def get_node_ifaces_and_trans(nodes, nid): return None -if dea_pod_override_nodes: - for node in final_dea_conf['nodes']: - data = get_node_ifaces_and_trans(dea_pod_override_nodes, node['id']) - if data: - print ("Honoring original interfaces and transformations for " - "node %d to %s, %s" % (node['id'], data[0], data[1])) - node['interfaces'] = data[0] - node['transformations'] = data[1] - -# Dump final dea.yaml including configuration management meta-data to argument provided -# directory -if not os.path.exists(kwargs["output_path"]): - os.makedirs(kwargs["output_path"]) -print('Dumping final dea.yaml to ' + kwargs["output_path"] + '/dea.yaml....') -with open(kwargs["output_path"] + '/dea.yaml', "w") as f: - f.write("\n".join([("title: DEA.yaml file automatically generated from the" - 'configuration files stated in the "configuration-files"' - "fragment below"), - "version: " + str(calendar.timegm(time.gmtime())), - "created: " + str(time.strftime("%d/%m/%Y")) + " " - + str(time.strftime("%H:%M:%S")), - "comment: none\n"])) - - f.write("\n".join(["configuration-files:", - " dea-base:", - " uri: " + kwargs["dea_base_uri"], - " title: " + str(dea_base_title), - " version: " + str(dea_base_version), - " created: " + str(dea_base_creation), - " sha1: " + str(dea_base_sha), - " comment: " + str(dea_base_comment) + "\n"])) - - f.write("\n".join([" pod-override:", - " uri: " + kwargs["dea_pod_override_uri"], - " title: " + str(dea_pod_title), - " version: " + str(dea_pod_version), - " created: " + str(dea_pod_creation), - " sha1: " + str(dea_pod_sha), - " comment: " + str(dea_pod_comment) + "\n"])) - - f.write("\n".join([" deployment-scenario:", - " uri: " + str(scenario_uri), - " title: " + str(deploy_scenario_title), - " version: " + str(deploy_scenario_version), - " created: " + str(deploy_scenario_creation), - " sha1: " + str(deploy_scenario_sha), - " comment: " + str(deploy_scenario_comment) + "\n"])) - - f.write(" plugin-modules:\n") - for k, _ in enumerate(modules): - f.write("\n".join([" - module: " + modules[k], - " uri: " + module_uris[k], - " title: " + module_titles[k], - " version: " + module_versions[k], - " created: " + module_creations[k], - " sha-1: " + module_shas[k], - " comment: " + module_comments[k] + "\n"])) - - yaml.dump(final_dea_conf, f, default_flow_style=False) - -# Load POD dha and override it with "deployment-scenario/dha-override-config" section -print('Generating final dha.yaml configuration....') -print('Parsing dha-pod yaml configuration....') -response = urllib2.urlopen(kwargs["dha_uri"]) -dha_pod_conf = yaml.load(response.read()) -dha_pod_title = dha_pod_conf['dha-pod-config-metadata']['title'] -dha_pod_version = dha_pod_conf['dha-pod-config-metadata']['version'] -dha_pod_creation = dha_pod_conf['dha-pod-config-metadata']['created'] -dha_pod_sha = sha_uri(kwargs["dha_uri"]) -dha_pod_comment = dha_pod_conf['dha-pod-config-metadata']['comment'] -dha_pod_conf.pop('dha-pod-config-metadata') -final_dha_conf = dha_pod_conf - -dha_scenario_override_conf = deploy_scenario_conf["dha-override-config"] -# Only virtual deploy scenarios can override dha.yaml since there -# is no way to programatically override a physical environment: -# wireing, IPMI set-up, etc. -# For Physical environments, dha.yaml overrides will be silently ignored -if dha_scenario_override_conf and (final_dha_conf['adapter'] == 'libvirt' - or final_dha_conf['adapter'] == 'esxi' - or final_dha_conf['adapter'] == 'vbox'): - print('Merging dha-pod and deployment-scenario override information to final dha.yaml configuration....') - final_dha_conf = dict(merge_dicts(final_dha_conf, dha_scenario_override_conf)) - -# Dump final dha.yaml to argument provided directory -print('Dumping final dha.yaml to ' + kwargs["output_path"] + '/dha.yaml....') -with open(kwargs["output_path"] + '/dha.yaml', "w") as f: - f.write("\n".join([("title: DHA.yaml file automatically generated from" - "the configuration files stated in the" - '"configuration-files" fragment below'), - "version: " + str(calendar.timegm(time.gmtime())), - "created: " + str(time.strftime("%d/%m/%Y")) + " " - + str(time.strftime("%H:%M:%S")), - "comment: none\n"])) - - f.write("configuration-files:\n") - - f.write("\n".join([" dha-pod-configuration:", - " uri: " + kwargs["dha_uri"], - " title: " + str(dha_pod_title), - " version: " + str(dha_pod_version), - " created: " + str(dha_pod_creation), - " sha-1: " + str(dha_pod_sha), - " comment: " + str(dha_pod_comment) + "\n"])) - - f.write("\n".join([" deployment-scenario:", - " uri: " + str(scenario_uri), - " title: " + str(deploy_scenario_title), - " version: " + str(deploy_scenario_version), - " created: " + str(deploy_scenario_creation), - " sha-1: " + str(deploy_scenario_sha), - " comment: " + str(deploy_scenario_comment) + "\n"])) - - yaml.dump(final_dha_conf, f, default_flow_style=False) + +def main(): + setup_yaml() + kwargs = parse_arguments() + + # Generate final dea.yaml by merging following config files/fragments in revers priority order: + # "dea-base", "dea-pod-override", "deplyment-scenario/module-config-override" + # and "deployment-scenario/dea-override" + print('Generating final dea.yaml configuration....') + + # Fetch dea-base, extract and purge meta-data + print('Parsing dea-base from: ' + kwargs["dea_base_uri"] + "....") + response = urllib2.urlopen(kwargs["dea_base_uri"]) + dea_base_conf = yaml.load(response.read()) + dea_base_title = dea_base_conf['dea-base-config-metadata']['title'] + dea_base_version = dea_base_conf['dea-base-config-metadata']['version'] + dea_base_creation = dea_base_conf['dea-base-config-metadata']['created'] + dea_base_sha = sha_uri(kwargs["dea_base_uri"]) + dea_base_comment = dea_base_conf['dea-base-config-metadata']['comment'] + dea_base_conf.pop('dea-base-config-metadata') + final_dea_conf = dea_base_conf + dea_pod_override_nodes = None + + # Fetch dea-pod-override, extract and purge meta-data, merge with previous dea data structure + print('Parsing the dea-pod-override from: ' + kwargs["dea_pod_override_uri"] + "....") + response = urllib2.urlopen(kwargs["dea_pod_override_uri"]) + dea_pod_override_conf = yaml.load(response.read()) + if dea_pod_override_conf: + dea_pod_title = dea_pod_override_conf['dea-pod-override-config-metadata']['title'] + dea_pod_version = dea_pod_override_conf['dea-pod-override-config-metadata']['version'] + dea_pod_creation = dea_pod_override_conf['dea-pod-override-config-metadata']['created'] + dea_pod_sha = sha_uri(kwargs["dea_pod_override_uri"]) + dea_pod_comment = dea_pod_override_conf['dea-pod-override-config-metadata']['comment'] + print('Merging dea-base and dea-pod-override configuration ....') + dea_pod_override_conf.pop('dea-pod-override-config-metadata') + # Copy the list of original nodes, which holds info on their transformations + if 'nodes' in dea_pod_override_conf: + dea_pod_override_nodes = list(dea_pod_override_conf['nodes']) + if dea_pod_override_conf: + final_dea_conf = dict(merge_dicts(final_dea_conf, dea_pod_override_conf)) + + # Fetch deployment-scenario, extract and purge meta-data, merge deployment-scenario/ + # dea-override-configith previous dea data structure + print('Parsing deployment-scenario from: ' + kwargs["scenario"] + "....") + + response = urllib2.urlopen(kwargs["scenario_base_uri"] + "/scenario.yaml") + scenario_short_translation_conf = yaml.load(response.read()) + if kwargs["scenario"] in scenario_short_translation_conf: + scenario_uri = (kwargs["scenario_base_uri"] + + "/" + + scenario_short_translation_conf[kwargs["scenario"]]['configfile']) + else: + scenario_uri = kwargs["scenario_base_uri"] + "/" + kwargs["scenario"] + response = urllib2.urlopen(scenario_uri) + deploy_scenario_conf = yaml.load(response.read()) + + if deploy_scenario_conf: + deploy_scenario_title = deploy_scenario_conf['deployment-scenario-metadata']['title'] + deploy_scenario_version = deploy_scenario_conf['deployment-scenario-metadata']['version'] + deploy_scenario_creation = deploy_scenario_conf['deployment-scenario-metadata']['created'] + deploy_scenario_sha = sha_uri(scenario_uri) + deploy_scenario_comment = deploy_scenario_conf['deployment-scenario-metadata']['comment'] + deploy_scenario_conf.pop('deployment-scenario-metadata') + else: + print("Deployment scenario file not found or is empty") + print("Cannot continue, exiting ....") + sys.exit(1) + + dea_scenario_override_conf = deploy_scenario_conf["dea-override-config"] + if dea_scenario_override_conf: + print('Merging dea-base-, dea-pod-override- and deployment-scenario ' + 'configuration into final dea.yaml configuration....') + final_dea_conf = dict(merge_dicts(final_dea_conf, dea_scenario_override_conf)) + + # Fetch plugin-configuration configuration files, extract and purge meta-data, + # merge/append with previous dea data structure, override plugin-configuration with + # deploy-scenario/module-config-override + modules = [] + module_uris = [] + module_titles = [] + module_versions = [] + module_creations = [] + module_shas = [] + module_comments = [] + if deploy_scenario_conf["stack-extensions"]: + for module in deploy_scenario_conf["stack-extensions"]: + print('Loading configuration for module: ' + + module["module"] + + ' and merging it to final dea.yaml configuration....') + response = urllib2.urlopen(kwargs["plugins_uri"] + + '/' + + module["module-config-name"] + + '_' + + module["module-config-version"] + + '.yaml') + module_conf = yaml.load(response.read()) + modules.append(module["module"]) + module_uris.append(kwargs["plugins_uri"] + + '/' + + module["module-config-name"] + + '_' + + module["module-config-version"] + + '.yaml') + module_titles.append(str(module_conf['plugin-config-metadata']['title'])) + module_versions.append(str(module_conf['plugin-config-metadata']['version'])) + module_creations.append(str(module_conf['plugin-config-metadata']['created'])) + module_shas.append(sha_uri(kwargs["plugins_uri"] + + '/' + + module["module-config-name"] + + '_' + + module["module-config-version"] + + '.yaml')) + module_comments.append(str(module_conf['plugin-config-metadata']['comment'])) + module_conf.pop('plugin-config-metadata') + final_dea_conf['settings']['editable'].update(module_conf) + scenario_module_override_conf = module.get('module-config-override') + if scenario_module_override_conf: + dea_scenario_module_override_conf = {} + dea_scenario_module_override_conf['settings'] = {} + dea_scenario_module_override_conf['settings']['editable'] = {} + dea_scenario_module_override_conf['settings']['editable'][module["module"]] = scenario_module_override_conf + final_dea_conf = dict(merge_dicts(final_dea_conf, dea_scenario_module_override_conf)) + + if dea_pod_override_nodes: + for node in final_dea_conf['nodes']: + data = get_node_ifaces_and_trans(dea_pod_override_nodes, node['id']) + if data: + print ("Honoring original interfaces and transformations for " + "node %d to %s, %s" % (node['id'], data[0], data[1])) + node['interfaces'] = data[0] + node['transformations'] = data[1] + + # Dump final dea.yaml including configuration management meta-data to argument provided + # directory + if not os.path.exists(kwargs["output_path"]): + os.makedirs(kwargs["output_path"]) + print('Dumping final dea.yaml to ' + kwargs["output_path"] + '/dea.yaml....') + with open(kwargs["output_path"] + '/dea.yaml', "w") as f: + f.write("\n".join([("title: DEA.yaml file automatically generated from the" + 'configuration files stated in the "configuration-files"' + "fragment below"), + "version: " + str(calendar.timegm(time.gmtime())), + "created: " + str(time.strftime("%d/%m/%Y")) + " " + + str(time.strftime("%H:%M:%S")), + "comment: none\n"])) + + f.write("\n".join(["configuration-files:", + " dea-base:", + " uri: " + kwargs["dea_base_uri"], + " title: " + str(dea_base_title), + " version: " + str(dea_base_version), + " created: " + str(dea_base_creation), + " sha1: " + str(dea_base_sha), + " comment: " + str(dea_base_comment) + "\n"])) + + f.write("\n".join([" pod-override:", + " uri: " + kwargs["dea_pod_override_uri"], + " title: " + str(dea_pod_title), + " version: " + str(dea_pod_version), + " created: " + str(dea_pod_creation), + " sha1: " + str(dea_pod_sha), + " comment: " + str(dea_pod_comment) + "\n"])) + + f.write("\n".join([" deployment-scenario:", + " uri: " + str(scenario_uri), + " title: " + str(deploy_scenario_title), + " version: " + str(deploy_scenario_version), + " created: " + str(deploy_scenario_creation), + " sha1: " + str(deploy_scenario_sha), + " comment: " + str(deploy_scenario_comment) + "\n"])) + + f.write(" plugin-modules:\n") + for k, _ in enumerate(modules): + f.write("\n".join([" - module: " + modules[k], + " uri: " + module_uris[k], + " title: " + module_titles[k], + " version: " + module_versions[k], + " created: " + module_creations[k], + " sha-1: " + module_shas[k], + " comment: " + module_comments[k] + "\n"])) + + yaml.dump(final_dea_conf, f, default_flow_style=False) + + # Load POD dha and override it with "deployment-scenario/dha-override-config" section + print('Generating final dha.yaml configuration....') + print('Parsing dha-pod yaml configuration....') + response = urllib2.urlopen(kwargs["dha_uri"]) + dha_pod_conf = yaml.load(response.read()) + dha_pod_title = dha_pod_conf['dha-pod-config-metadata']['title'] + dha_pod_version = dha_pod_conf['dha-pod-config-metadata']['version'] + dha_pod_creation = dha_pod_conf['dha-pod-config-metadata']['created'] + dha_pod_sha = sha_uri(kwargs["dha_uri"]) + dha_pod_comment = dha_pod_conf['dha-pod-config-metadata']['comment'] + dha_pod_conf.pop('dha-pod-config-metadata') + final_dha_conf = dha_pod_conf + + dha_scenario_override_conf = deploy_scenario_conf["dha-override-config"] + # Only virtual deploy scenarios can override dha.yaml since there + # is no way to programatically override a physical environment: + # wireing, IPMI set-up, etc. + # For Physical environments, dha.yaml overrides will be silently ignored + if dha_scenario_override_conf and (final_dha_conf['adapter'] == 'libvirt' + or final_dha_conf['adapter'] == 'esxi' + or final_dha_conf['adapter'] == 'vbox'): + print('Merging dha-pod and deployment-scenario override information to final dha.yaml configuration....') + final_dha_conf = dict(merge_dicts(final_dha_conf, dha_scenario_override_conf)) + + # Dump final dha.yaml to argument provided directory + print('Dumping final dha.yaml to ' + kwargs["output_path"] + '/dha.yaml....') + with open(kwargs["output_path"] + '/dha.yaml', "w") as f: + f.write("\n".join([("title: DHA.yaml file automatically generated from" + "the configuration files stated in the" + '"configuration-files" fragment below'), + "version: " + str(calendar.timegm(time.gmtime())), + "created: " + str(time.strftime("%d/%m/%Y")) + " " + + str(time.strftime("%H:%M:%S")), + "comment: none\n"])) + + f.write("configuration-files:\n") + + f.write("\n".join([" dha-pod-configuration:", + " uri: " + kwargs["dha_uri"], + " title: " + str(dha_pod_title), + " version: " + str(dha_pod_version), + " created: " + str(dha_pod_creation), + " sha-1: " + str(dha_pod_sha), + " comment: " + str(dha_pod_comment) + "\n"])) + + f.write("\n".join([" deployment-scenario:", + " uri: " + str(scenario_uri), + " title: " + str(deploy_scenario_title), + " version: " + str(deploy_scenario_version), + " created: " + str(deploy_scenario_creation), + " sha-1: " + str(deploy_scenario_sha), + " comment: " + str(deploy_scenario_comment) + "\n"])) + + yaml.dump(final_dha_conf, f, default_flow_style=False) + +if __name__ == '__main__': + main() diff --git a/deploy/scenario/README b/deploy/scenario/README index 3472f6630..e32262d0d 100644 --- a/deploy/scenario/README +++ b/deploy/scenario/README @@ -93,23 +93,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller,opendaylight - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: diff --git a/deploy/scenario/ha_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_heat_ceilometer_scenario.yaml index 8ab5f9277..4051c478a 100644 --- a/deploy/scenario/ha_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_heat_ceilometer_scenario.yaml @@ -41,23 +41,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo, controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: nodes: diff --git a/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario.yaml index 828569bb7..1217f7273 100644 --- a/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_nfv-kvm_heat_ceilometer_scenario.yaml @@ -46,23 +46,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,mongo - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: compute,ceph-osd - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: compute,ceph-osd - transformations: transformations_1 settings: editable: diff --git a/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml index 6ececba6c..51deb4e28 100644 --- a/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_nfv-ovs_heat_ceilometer_scenario.yaml @@ -54,26 +54,21 @@ dea-override-config: net_segment_type: vlan nodes: - id: 1 - interfaces: interfaces_dpdk + interfaces: interfaces_vlan role: controller - transformations: transformations_vlan - id: 2 - interfaces: interfaces_dpdk + interfaces: interfaces_vlan role: mongo,controller - transformations: transformations_vlan - id: 3 - interfaces: interfaces_dpdk + interfaces: interfaces_vlan role: ceph-osd,controller - transformations: transformations_vlan - id: 4 interfaces: interfaces_dpdk role: ceph-osd,compute - transformations: transformations_dpdk attributes: attributes_1 - id: 5 interfaces: interfaces_dpdk role: ceph-osd,compute - transformations: transformations_dpdk attributes: attributes_1 attributes_1: @@ -82,7 +77,7 @@ dea-override-config: value: 128 nova: value: - '2048': 256 + '2048': 1024 network: networking_parameters: diff --git a/deploy/scenario/ha_odl-bgpvpn_scenario.yaml b/deploy/scenario/ha_odl-bgpvpn_scenario.yaml index 2257cbb70..7d52e77e2 100644 --- a/deploy/scenario/ha_odl-bgpvpn_scenario.yaml +++ b/deploy/scenario/ha_odl-bgpvpn_scenario.yaml @@ -59,23 +59,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,opendaylight - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: diff --git a/deploy/scenario/ha_odl-l2_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_odl-l2_heat_ceilometer_scenario.yaml index 0d16a3d65..90c89aedc 100644 --- a/deploy/scenario/ha_odl-l2_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_odl-l2_heat_ceilometer_scenario.yaml @@ -60,23 +60,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,opendaylight - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: nodes: diff --git a/deploy/scenario/ha_odl-l2_sfc_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_odl-l2_sfc_heat_ceilometer_scenario.yaml index a900720f9..e6aef2aba 100644 --- a/deploy/scenario/ha_odl-l2_sfc_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_odl-l2_sfc_heat_ceilometer_scenario.yaml @@ -76,23 +76,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,opendaylight - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: nodes: - id: 1 diff --git a/deploy/scenario/ha_odl-l3_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_odl-l3_heat_ceilometer_scenario.yaml index e222582d2..0dda3b3ca 100644 --- a/deploy/scenario/ha_odl-l3_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_odl-l3_heat_ceilometer_scenario.yaml @@ -66,23 +66,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,opendaylight - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/ha_onos_nofeature_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_onos_nofeature_heat_ceilometer_scenario.yaml index cb46af569..f813458d0 100644 --- a/deploy/scenario/ha_onos_nofeature_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_onos_nofeature_heat_ceilometer_scenario.yaml @@ -67,23 +67,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,onos - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/ha_onos_sfc_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_onos_sfc_heat_ceilometer_scenario.yaml index e9dd0e196..32fbfcf6c 100644 --- a/deploy/scenario/ha_onos_sfc_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_onos_sfc_heat_ceilometer_scenario.yaml @@ -47,23 +47,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller,onos - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/ha_vlan_heat_ceilometer_scenario.yaml b/deploy/scenario/ha_vlan_heat_ceilometer_scenario.yaml index dc7868b56..d1d5191f0 100644 --- a/deploy/scenario/ha_vlan_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/ha_vlan_heat_ceilometer_scenario.yaml @@ -45,23 +45,18 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,controller - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 5 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: diff --git a/deploy/scenario/no-ha_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_heat_ceilometer_scenario.yaml index c21585979..3dd5f841e 100644 --- a/deploy/scenario/no-ha_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_heat_ceilometer_scenario.yaml @@ -41,19 +41,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: # disks: diff --git a/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario.yaml index 779c6e14a..4661a263d 100644 --- a/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_nfv-kvm_heat_ceilometer_scenario.yaml @@ -48,19 +48,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: compute - transformations: transformations_1 settings: editable: diff --git a/deploy/scenario/no-ha_nfv-kvm_nfv-ovs_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_nfv-kvm_nfv-ovs_heat_ceilometer_scenario.yaml index 56251215a..87364e83a 100644 --- a/deploy/scenario/no-ha_nfv-kvm_nfv-ovs_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_nfv-kvm_nfv-ovs_heat_ceilometer_scenario.yaml @@ -55,19 +55,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_2 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_2 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_2 settings: editable: additional_components: diff --git a/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml index f7b69a50f..7ab76cbcf 100644 --- a/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_nfv-ovs_heat_ceilometer_scenario.yaml @@ -54,23 +54,19 @@ dea-override-config: net_segment_type: vlan nodes: - id: 1 - interfaces: interfaces_dpdk + interfaces: interfaces_vlan role: mongo,controller - transformations: transformations_vlan - id: 2 interfaces: interfaces_dpdk role: ceph-osd,compute - transformations: transformations_dpdk attributes: attributes_1 - id: 3 interfaces: interfaces_dpdk role: ceph-osd,compute - transformations: transformations_dpdk attributes: attributes_1 - id: 4 interfaces: interfaces_dpdk role: ceph-osd,compute - transformations: transformations_dpdk attributes: attributes_1 attributes_1: @@ -79,7 +75,7 @@ dea-override-config: value: 128 nova: value: - '2048': 256 + '2048': 1024 network: networking_parameters: diff --git a/deploy/scenario/no-ha_odl-bgpvpn_scenario.yaml b/deploy/scenario/no-ha_odl-bgpvpn_scenario.yaml index 08b46feca..6f21ea2c8 100644 --- a/deploy/scenario/no-ha_odl-bgpvpn_scenario.yaml +++ b/deploy/scenario/no-ha_odl-bgpvpn_scenario.yaml @@ -60,19 +60,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,opendaylight - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: # disks: diff --git a/deploy/scenario/no-ha_odl-l2_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_odl-l2_heat_ceilometer_scenario.yaml index e90f7e720..f8787d780 100644 --- a/deploy/scenario/no-ha_odl-l2_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_odl-l2_heat_ceilometer_scenario.yaml @@ -61,19 +61,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,opendaylight - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: # disks: diff --git a/deploy/scenario/no-ha_odl-l2_sfc_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_odl-l2_sfc_heat_ceilometer_scenario.yaml index 218378de3..a8d9ed848 100644 --- a/deploy/scenario/no-ha_odl-l2_sfc_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_odl-l2_sfc_heat_ceilometer_scenario.yaml @@ -77,19 +77,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,opendaylight - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 dha-override-config: # disks: diff --git a/deploy/scenario/no-ha_odl-l3_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_odl-l3_heat_ceilometer_scenario.yaml index 7fa7829f2..5f800abad 100644 --- a/deploy/scenario/no-ha_odl-l3_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_odl-l3_heat_ceilometer_scenario.yaml @@ -66,19 +66,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,opendaylight - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/no-ha_onos_nofeature_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_onos_nofeature_heat_ceilometer_scenario.yaml index c6f07a73c..f5c00f0c9 100644 --- a/deploy/scenario/no-ha_onos_nofeature_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_onos_nofeature_heat_ceilometer_scenario.yaml @@ -68,19 +68,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller,onos - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/no-ha_onos_sfc_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_onos_sfc_heat_ceilometer_scenario.yaml index 80d73b335..587346ef4 100644 --- a/deploy/scenario/no-ha_onos_sfc_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_onos_sfc_heat_ceilometer_scenario.yaml @@ -48,19 +48,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller,onos - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: public_network_assignment: diff --git a/deploy/scenario/no-ha_vlan_heat_ceilometer_scenario.yaml b/deploy/scenario/no-ha_vlan_heat_ceilometer_scenario.yaml index 5df530f42..567ea9867 100644 --- a/deploy/scenario/no-ha_vlan_heat_ceilometer_scenario.yaml +++ b/deploy/scenario/no-ha_vlan_heat_ceilometer_scenario.yaml @@ -45,19 +45,15 @@ dea-override-config: - id: 1 interfaces: interfaces_1 role: mongo,controller - transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 - id: 4 interfaces: interfaces_1 role: ceph-osd,compute - transformations: transformations_1 settings: editable: additional_components: diff --git a/docs/installationprocedure/installation.instruction.rst b/docs/installationprocedure/installation.instruction.rst index 715159910..2d6889bf8 100644 --- a/docs/installationprocedure/installation.instruction.rst +++ b/docs/installationprocedure/installation.instruction.rst @@ -186,7 +186,7 @@ VLANs needs to be manually configured. Manual configuration of the Colorado hardware platform should be carried out according to the OPNFV Pharos specification: -<https://wiki.opnfv.org/pharos/pharos_specification> +<https://wiki.opnfv.org/display/pharos/Pharos+Specification> ========================================== OPNFV Software installation and deployment diff --git a/docs/releasenotes/release-notes.rst b/docs/releasenotes/release-notes.rst index cfc7030e1..c3398df19 100644 --- a/docs/releasenotes/release-notes.rst +++ b/docs/releasenotes/release-notes.rst @@ -31,9 +31,9 @@ Summary For Colorado, the typical use of Fuel as an OpenStack installer is supplemented with OPNFV unique components such as: -- `OpenDaylight <http://www.opendaylight.org/software>`_ version "Beryllium SR3" [1]_ - 'http://www.opendaylight.org/software' +- `OpenDaylight <http://www.opendaylight.org/software>`_ version "Beryllium SR3" [1]_ 'http://www.opendaylight.org/software' -- `ONOS <http://onosproject.org/>`_ version "Drake" - 'http://onosproject.org/' +- `ONOS <http://onosproject.org/>`_ version "Drake" 'http://onosproject.org/' - `Service function chaining <https://wiki.opnfv.org/service_function_chaining>`_ 'https://wiki.opnfv.org/service_function_chaining' @@ -45,6 +45,12 @@ supplemented with OPNFV unique components such as: - `VSPERF <https://wiki.opnfv.org/characterize_vswitch_performance_for_telco_nfv_use_cases>`_ 'https://wiki.opnfv.org/characterize_vswitch_performance_for_telco_nfv_use_cases' +- `Promise <https://wiki.opnfv.org/display/promise>`_ 'https://wiki.opnfv.org/display/promise' + +- `Parser <https://wiki.opnfv.org/display/parser>`_ 'https://wiki.opnfv.org/display/parser' + +- `Doctor <https://wiki.opnfv.org/display/doctor>`_ 'https://wiki.opnfv.org/display/doctor' + As well as OPNFV-unique configurations of the Hardware- and Software stack. This Colorado artifact provides Fuel as the deployment stage tool in the @@ -77,20 +83,25 @@ Release Data | **Repo/tag** | colorado.1.0 | | | | +--------------------------------------+--------------------------------------+ -| **Release designation** | Colorado 1.0 follow-up release | +| **Release designation** | Colorado 1.0 main release | | | | +--------------------------------------+--------------------------------------+ | **Release date** | September 22 2016 | | | | +--------------------------------------+--------------------------------------+ | **Purpose of the delivery** | Colorado alignment to Released | -| | Fuel 9.0 baseline + Bug-fixes for | -| | the following feaures/scenarios: | +| | Fuel 9.0 baseline + features and | +| | bug-fixes for the following | +| | feaures: | | | - NFV Hypervisors-KVM | | | - Open vSwitch for NFV | | | - OpenDaylight | +| | - ONOS | | | - SDN distributed routing and VPN | | | - Service function chaining | +| | - Promise | +| | - Parser | +| | - Doctor | | | | +--------------------------------------+--------------------------------------+ @@ -99,8 +110,8 @@ Version change Module version changes ---------------------- -This is a follow-up release to Colorado 1.0. It is based on -following upstream versions: +This is the Colorado 1.0 main release. +It is based on following upstream versions: - Fuel 9.0 Base release @@ -112,8 +123,8 @@ following upstream versions: Document changes ---------------- -This is a follow-up release to Colorado 1.0. It -comes with the following documentation: +This is the Colorado 1.0 main release. +It comes with the following documentation: - Installation instructions - *Reference 13* - **Changed** @@ -129,14 +140,13 @@ Feature additions **JIRA TICKETS:** -- Bug corrections --------------- **JIRA TICKETS:** -`Workarounds <https://jira.opnfv.org/issues/?filter=11121>`_ 'https://jira.opnfv.org/issues/?filter=11121' +`Colorado 1.0 bug fixes <https://jira.opnfv.org/issues/?filter=11180>`_ 'https://jira.opnfv.org/issues/?filter=11180' (Also See respective Integrated feature project's bug tracking) @@ -178,7 +188,7 @@ Known issues **JIRA TICKETS:** -`Known issues <https://jira.opnfv.org/issues/?filter=11119>`_ 'https://jira.opnfv.org/issues/?filter=11119' +`Known issues <https://jira.opnfv.org/issues/?filter=11183>`_ 'https://jira.opnfv.org/issues/?filter=11183' (Also See respective Integrated feature project's bug tracking) @@ -187,7 +197,7 @@ Workarounds **JIRA TICKETS:** -`Workarounds <https://jira.opnfv.org/issues/?filter=11120>`_ 'https://jira.opnfv.org/issues/?filter=11120' +`Workarounds <https://jira.opnfv.org/issues/?filter=11181>`_ 'https://jira.opnfv.org/issues/?filter=11181' (Also See respective Integrated feature project's bug tracking) @@ -224,27 +234,27 @@ OpenDaylight Fuel ==== -6) `The Fuel OpenStack project <https://wiki.openstack.org/wiki/Fuel>`_ 'https://wiki.openstack.org/wiki/Fuel' +6) `The Fuel OpenStack project <https://wiki.openstack.org/wiki/Fuel>`_: https://wiki.openstack.org/wiki/Fuel -7) `Fuel documentation overview <https://docs.fuel-infra.org/openstack/fuel/fuel-9.0/>`_ 'https://docs.fuel-infra.org/openstack/fuel/fuel-9.0/' +7) `Fuel documentation overview <http://docs.openstack.org/developer/fuel-docs>`_: http://docs.openstack.org/developer/fuel-docs -8) `Fuel planning guide <https://docs.fuel-infra.org/openstack/fuel/fuel-9.0/mos-planning-guide.html>`_ 'https://docs.fuel-infra.org/openstack/fuel/fuel-9.0/mos-planning-guide.html' +8) `Fuel Installation Guide <http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-install-guide.html>`_: http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-install-guide.html -9) `Fuel quick start guide <https://docs.mirantis.com/openstack/fuel/fuel-9.0/quickstart-guide.html>`_ 'https://docs.mirantis.com/openstack/fuel/fuel-9.0/quickstart-guide.html' +9) `Fuel User Guide <http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-user-guide.html>`_: http://docs.openstack.org/developer/fuel-docs/userdocs/fuel-user-guide.html -10) `Fuel reference architecture <https://docs.mirantis.com/openstack/fuel/fuel-9.0/reference-architecture.html>`_ 'https://docs.mirantis.com/openstack/fuel/fuel-9.0/reference-architecture.html' +10) `Fuel Developer Guide <http://docs.openstack.org/developer/fuel-docs/devdocs/develop.html>`_: http://docs.openstack.org/developer/fuel-docs/devdocs/develop.html -11) `Fuel Plugin Developers Guide <https://wiki.openstack.org/wiki/Fuel/Plugins>`_ 'https://wiki.openstack.org/wiki/Fuel/Plugins' +11) `Fuel Plugin Developers Guide <http://docs.openstack.org/developer/fuel-docs/plugindocs/fuel-plugin-sdk-guide.html>`_: http://docs.openstack.org/developer/fuel-docs/plugindocs/fuel-plugin-sdk-guide.html -12) `Fuel OpenStack Hardware Compatibility List <https://www.mirantis.com/products/openstack-drivers-and-plugins/hardware-compatibility-list>`_ 'https://www.mirantis.com/products/openstack-drivers-and-plugins/hardware-compatibility-list' +12) `Fuel OpenStack Hardware Compatibility List <https://www.mirantis.com/products/openstack-drivers-and-plugins/hardware-compatibility-list>`_: https://www.mirantis.com/products/openstack-drivers-and-plugins/hardware-compatibility-list Fuel in OPNFV ============= -13) `OPNFV Installation instruction for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/installation-instruction.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/installation-instruction.html' +13) `OPNFV Installation instruction for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/installationprocedure/index.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/installationprocedure/index.html' -14) `OPNFV Build instruction for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/build-instruction.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/build-instruction.html' +14) `OPNFV Build instruction for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/buildprocedure/index.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/buildprocedure/index.html' -15) `OPNFV Release Note for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/release-notes.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/release-notes.html' +15) `OPNFV Release Note for the Colorado release of OPNFV when using Fuel as a deployment tool <http://artifacts.opnfv.org/fuel/colorado/docs/releasenotes/index.html>`_ 'http://artifacts.opnfv.org/fuel/colorado/docs/releasenotes/index.html' .. [1] OpenDaylight Boron RC3.5 is used when Service Function Chaining is enabled in Fuel plugin. |