diff options
29 files changed, 453 insertions, 709 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_odlpluginbuild/config.mk b/build/f_isoroot/f_odlpluginbuild/config.mk index 466aba2ae..7074ee2e0 100644 --- a/build/f_isoroot/f_odlpluginbuild/config.mk +++ b/build/f_isoroot/f_odlpluginbuild/config.mk @@ -8,7 +8,7 @@ ############################################################################## FUEL_PLUGIN_ODL_BRANCH ?= master -FUEL_PLUGIN_ODL_CHANGE ?= 0ff4ebdbfe5f681f0b44eea14c9c2b3dbb10b1d5 +FUEL_PLUGIN_ODL_CHANGE ?= 58cf41ff4e9ed928bf024b166776b9df1a2e517b FUEL_PLUGIN_ODL_REPO ?= https://github.com/openstack/fuel-plugin-opendaylight.git export ODL_TARBALL_LOCATION?=https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.4.3-Beryllium-SR3/distribution-karaf-0.4.3-Beryllium-SR3.tar.gz 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/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/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/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/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/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 8896080db..08cb36197 100644 --- a/deploy/deploy-config.py +++ b/deploy/deploy-config.py @@ -162,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: @@ -293,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/templater.py b/deploy/templater.py index 6b41e1f3c..bda60c7fe 100755 --- a/deploy/templater.py +++ b/deploy/templater.py @@ -12,6 +12,7 @@ import io import re import yaml +import urllib2 from common import( err, ArgParser, @@ -29,10 +30,29 @@ class Templater(object): self.output_file = output_file self.base = self.load_yaml(base_file) - def load_yaml(self, filename): + def is_url(self, filespec): + regex = re.compile('^([^/:]+)://') + return re.search(regex, filespec) + + def load_template(self, filespec): + try: + if(self.is_url(filespec)): + response = urllib2.urlopen(filespec) + return response.read() + else: + with io.open(filespec) as f: + return f.readlines() + except Exception as error: + err('Error opening template file: %s' % error) + + def load_yaml(self, filespec): try: - with io.open(filename) as yaml_file: - return yaml.load(yaml_file) + if(self.is_url(filespec)): + response = urllib2.urlopen(filespec) + return yaml.load(response) + else: + with io.open(filespec) as f: + return yaml.load(f) except Exception as error: err('Error opening YAML file: %s' % error) @@ -147,12 +167,11 @@ class Templater(object): regex = re.compile(re.escape(TAG_START) + r'([a-z].+)' + re.escape(TAG_END), flags=re.IGNORECASE) - with io.open(self.template_file) as f: - for line in f: - indent = self.get_indent(line) - result += re.sub(regex, - lambda match: self.parse_tag(match.group(1), indent), - line) + for line in self.load_template(self.template_file): + indent = self.get_indent(line) + result += re.sub(regex, + lambda match: self.parse_tag(match.group(1), indent), + line) self.save_yaml(self.output_file, result) @@ -164,9 +183,9 @@ template variable substitution and write the results to 'output_file'.''' parser = ArgParser(prog='python %s' % __file__, description=description) parser.add_argument('base_file', - help='Base YAML filename') + help='Base YAML file or URL') parser.add_argument('template_file', - help='Fragment filename') + help='Template file or URL') parser.add_argument('output_file', help='Output filename') 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 a748e41f9..c3398df19 100644 --- a/docs/releasenotes/release-notes.rst +++ b/docs/releasenotes/release-notes.rst @@ -234,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. |