summaryrefslogtreecommitdiffstats
path: root/fuel
diff options
context:
space:
mode:
Diffstat (limited to 'fuel')
-rw-r--r--fuel/TODO5
-rw-r--r--fuel/build/Makefile49
-rw-r--r--fuel/build/README1
-rw-r--r--fuel/build/cache.mk18
-rw-r--r--fuel/build/config.mk9
-rw-r--r--fuel/build/docker/ubuntu-builder/Dockerfile5
-rwxr-xr-xfuel/build/docker/ubuntu-builder/install.sh25
-rw-r--r--fuel/build/f_isoroot/Makefile2
-rwxr-xr-xfuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh107
-rwxr-xr-xfuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig108
-rwxr-xr-xfuel/build/f_isoroot/f_bootstrap/post-scripts/01_fix_iommubug.sh9
-rwxr-xr-xfuel/build/f_isoroot/f_bootstrap/post-scripts/02_fix_console_speed.sh15
-rwxr-xr-xfuel/build/f_isoroot/f_bootstrap/post-scripts/03_install_repo.sh19
-rw-r--r--[-rwxr-xr-x]fuel/build/f_isoroot/f_kscfg/ks.cfg122
-rw-r--r--fuel/build/f_isoroot/f_kscfg/ks.cfg.orig120
-rw-r--r--fuel/build/f_isoroot/f_odlpluginbuild/Makefile38
-rw-r--r--fuel/build/f_isoroot/f_predeployment/Makefile28
-rw-r--r--fuel/build/f_isoroot/f_predeployment/README18
-rwxr-xr-xfuel/build/f_isoroot/f_predeployment/pre-deploy.sh401
-rwxr-xr-xfuel/build/f_isoroot/f_predeployment/sysinfo.sh12
-rwxr-xr-xfuel/build/f_isoroot/f_predeployment/transform_yaml.py68
-rw-r--r--fuel/build/f_isoroot/f_repobuild/Makefile56
-rw-r--r--fuel/build/f_l23network/Makefile28
-rw-r--r--fuel/build/f_l23network/README35
-rw-r--r--fuel/build/f_l23network/puppet/modules/l23network/lib/puppet/parser/functions/extras_to_hosts.rb21
-rw-r--r--fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp18
-rw-r--r--fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp.orig16
-rw-r--r--fuel/build/f_l23network/testing/README12
-rw-r--r--fuel/build/f_l23network/testing/fake_init.pp13
-rw-r--r--fuel/build/f_ntp/Makefile28
-rw-r--r--fuel/build/f_ntp/README33
-rw-r--r--fuel/build/f_ntp/puppet/modules/opnfv/manifests/ntp.pp80
-rw-r--r--fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.compute.erb21
-rw-r--r--fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.controller.erb21
-rw-r--r--fuel/build/f_ntp/testing/README12
-rw-r--r--fuel/build/f_ntp/testing/fake_init.pp13
-rwxr-xr-xfuel/build/f_odl_docker/Makefile51
-rwxr-xr-xfuel/build/f_odl_docker/dockerfile/Dockerfile72
-rwxr-xr-xfuel/build/f_odl_docker/dockerfile/container_scripts/check_feature.sh8
-rwxr-xr-xfuel/build/f_odl_docker/dockerfile/container_scripts/speak.sh17
-rwxr-xr-xfuel/build/f_odl_docker/dockerfile/container_scripts/start_odl_docker.sh38
-rw-r--r--fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp77
-rw-r--r--fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/change.sh219
-rwxr-xr-xfuel/build/f_odl_docker/puppet/modules/opnfv/scripts/config_net_odl.sh192
-rwxr-xr-xfuel/build/f_odl_docker/puppet/modules/opnfv/scripts/stage_odl.sh54
-rwxr-xr-xfuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh95
-rw-r--r--fuel/build/f_odl_docker/scripts/config_net_odl.sh164
-rw-r--r--fuel/build/f_odl_docker/scripts/config_neutron_for_odl.sh146
-rwxr-xr-xfuel/build/f_odl_docker/scripts/prep_nets_for_odl.sh90
-rw-r--r--fuel/build/f_odl_docker/scripts/setup_ovs_for_odl.sh23
-rw-r--r--fuel/build/f_opnfv_puppet/Makefile28
-rw-r--r--fuel/build/f_opnfv_puppet/README12
-rw-r--r--fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/add_packages.pp9
-rw-r--r--fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/init.pp28
-rw-r--r--fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/opncheck.pp21
-rw-r--r--fuel/build/f_osnaily/Makefile28
-rw-r--r--fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp366
-rw-r--r--fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp.orig353
-rw-r--r--fuel/build/f_resolvconf/Makefile28
-rw-r--r--fuel/build/f_resolvconf/README36
-rw-r--r--fuel/build/f_resolvconf/puppet/modules/opnfv/manifests/resolver.pp73
-rw-r--r--fuel/build/f_resolvconf/puppet/modules/opnfv/templates/resolv.conf.erb15
-rw-r--r--fuel/build/f_resolvconf/testing/README13
-rw-r--r--fuel/build/f_resolvconf/testing/fake_init.pp13
-rw-r--r--fuel/build/fuel-agent_1.patch36
-rw-r--r--fuel/build/fuel-main_1.patch104
-rw-r--r--fuel/build/fuel-main_2.patch18
-rw-r--r--fuel/build/fuel-main_3.patch19
-rw-r--r--fuel/build/fuel-main_5.patch19
-rw-r--r--fuel/build/install/apt-ftparchive-deb.conf6
-rw-r--r--fuel/build/install/apt-ftparchive-release.conf8
-rw-r--r--fuel/build/install/apt-ftparchive-udeb.conf4
-rwxr-xr-xfuel/build/install/install.sh84
-rwxr-xr-xfuel/build/install/uninstall.sh16
-rw-r--r--fuel/build/opendaylight/Makefile102
-rw-r--r--fuel/build/opendaylight/README52
-rw-r--r--fuel/build/opendaylight/f_odl/Makefile49
-rw-r--r--fuel/build/opendaylight/f_odl/README49
-rw-r--r--fuel/build/opendaylight/f_odl/puppet/modules/opnfv/manifests/odl.pp13
-rw-r--r--fuel/build/opendaylight/f_odl/testing/README12
-rwxr-xr-xfuel/build/opendaylight/make-odl-deb.sh314
-rw-r--r--fuel/build/opendaylight/odl_maven/settings.xml46
-rw-r--r--fuel/build/patch-packages/Makefile2
-rw-r--r--fuel/build/patch-packages/debootstrap/Makefile28
-rw-r--r--fuel/build/patch-packages/debootstrap/debootstrap.patch12
-rw-r--r--fuel/build/patch-packages/neutron-common/Makefile19
-rw-r--r--fuel/build/patch-packages/neutron-common/quota.patch67
-rw-r--r--fuel/build/patch-packages/novnc/Makefile22
-rwxr-xr-xfuel/build/patch-packages/novnc/fix-missing.sh9
-rw-r--r--fuel/ci/README89
-rwxr-xr-xfuel/ci/build.sh358
-rwxr-xr-xfuel/ci/deploy.sh18
-rw-r--r--fuel/deploy/README186
-rw-r--r--fuel/deploy/README.txt71
-rw-r--r--fuel/deploy/__init__.py8
-rw-r--r--fuel/deploy/baremetal/dea.yaml982
-rw-r--r--fuel/deploy/baremetal/dha.yaml53
-rw-r--r--fuel/deploy/cloud/configure_environment.py41
-rw-r--r--fuel/deploy/cloud/configure_network.py15
-rw-r--r--fuel/deploy/cloud/configure_nodes.py40
-rw-r--r--fuel/deploy/cloud/configure_settings.py12
-rw-r--r--fuel/deploy/cloud/deploy.py213
-rw-r--r--fuel/deploy/cloud/deployment.py60
-rw-r--r--fuel/deploy/common.py77
-rw-r--r--fuel/deploy/dea.py39
-rw-r--r--fuel/deploy/deploy.py263
-rw-r--r--fuel/deploy/deploy_env.py207
-rw-r--r--fuel/deploy/dha.py21
-rw-r--r--fuel/deploy/dha_adapters/__init__.py8
-rw-r--r--fuel/deploy/dha_adapters/hardware_adapter.py20
-rw-r--r--fuel/deploy/dha_adapters/hp_adapter.py17
-rw-r--r--fuel/deploy/dha_adapters/ipmi_adapter.py59
-rw-r--r--fuel/deploy/dha_adapters/libvirt_adapter.py23
-rw-r--r--fuel/deploy/environments/__init__.py (renamed from fuel/build/opendaylight/f_odl/testing/fake_init.pp)11
-rw-r--r--fuel/deploy/environments/execution_environment.py78
-rw-r--r--fuel/deploy/environments/libvirt_environment.py107
-rw-r--r--fuel/deploy/environments/virtual_fuel.py70
-rw-r--r--fuel/deploy/execution_environment.py46
-rw-r--r--fuel/deploy/fuel_patch/ks.cfg.patch19
-rwxr-xr-xfuel/deploy/install-ubuntu-packages.sh18
-rw-r--r--fuel/deploy/install_fuel_master.py137
-rw-r--r--fuel/deploy/libvirt/dha.yaml80
-rw-r--r--fuel/deploy/reap.py339
-rw-r--r--fuel/deploy/setup_environment.py165
-rw-r--r--fuel/deploy/setup_vfuel.py143
-rw-r--r--fuel/deploy/ssh_client.py23
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dea.yaml844
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dha.yaml54
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dea.yaml841
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dha.yaml49
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dea.yaml (renamed from fuel/deploy/libvirt/dea.yaml)941
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dha.yaml49
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/opnfv_box/dea.yaml842
-rw-r--r--fuel/deploy/templates/hardware_environment/conf/opnfv_box/dha.yaml49
-rw-r--r--fuel/deploy/templates/hardware_environment/vms/fuel.xml (renamed from fuel/deploy/baremetal/vm/vFuel)32
-rw-r--r--fuel/deploy/templates/virtual_environment/conf/dea.yaml838
-rw-r--r--fuel/deploy/templates/virtual_environment/conf/dha.yaml38
-rw-r--r--fuel/deploy/templates/virtual_environment/networks/fuel1.xml (renamed from fuel/deploy/libvirt/networks/fuel1)0
-rw-r--r--fuel/deploy/templates/virtual_environment/networks/fuel2.xml (renamed from fuel/deploy/libvirt/networks/fuel2)0
-rw-r--r--fuel/deploy/templates/virtual_environment/networks/fuel3.xml (renamed from fuel/deploy/libvirt/networks/fuel3)0
-rw-r--r--fuel/deploy/templates/virtual_environment/networks/fuel4.xml (renamed from fuel/deploy/libvirt/networks/fuel4)0
-rw-r--r--fuel/deploy/templates/virtual_environment/vms/compute.xml (renamed from fuel/deploy/libvirt/vms/compute)4
-rw-r--r--fuel/deploy/templates/virtual_environment/vms/controller.xml (renamed from fuel/deploy/libvirt/vms/controller)7
-rw-r--r--fuel/deploy/templates/virtual_environment/vms/fuel.xml (renamed from fuel/deploy/libvirt/vms/fuel-master)2
-rw-r--r--fuel/deploy/transplant_fuel_settings.py25
-rw-r--r--fuel/docs/src/build-instructions.rst37
-rw-r--r--fuel/docs/src/installation-instructions.rst361
-rw-r--r--fuel/docs/src/release-notes.rst111
-rw-r--r--fuel/prototypes/auto-deploy/configs/lf_pod1/dea_ha.yaml2
-rw-r--r--fuel/prototypes/auto-deploy/configs/lf_pod1/dea_no-ha.yaml2
-rw-r--r--fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute41
-rw-r--r--fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute51
-rw-r--r--fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/controller11
-rw-r--r--fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/fuel-master1
154 files changed, 6984 insertions, 7229 deletions
diff --git a/fuel/TODO b/fuel/TODO
index 7aa42d22d..e2d1b379c 100644
--- a/fuel/TODO
+++ b/fuel/TODO
@@ -3,8 +3,3 @@
# jonas.bjurel@ericsson.com 0.2 2015.04.14
#########################################################################
Following items needs to be done to achieve an OPNFV/BGS ARNO Fuel Stack:
-1) Add support for CentOS 6.5 - REMAINING
-2) Add Local GIT repo mirror
-3) Add Auto-deployment for Linux-Foundation Lab.
-4) Dry-run Funktest (Jenkins/Robot/etc.)
-5) Finalize Documentation \ No newline at end of file
diff --git a/fuel/build/Makefile b/fuel/build/Makefile
index 5f631200b..ba4beaf39 100644
--- a/fuel/build/Makefile
+++ b/fuel/build/Makefile
@@ -15,7 +15,7 @@ SHELL = /bin/bash
#Input args
export UNIT_TEST = FALSE
export INTERACTIVE = TRUE
-export ISOSRC = file:$(shell pwd)/fuel-6.0.1.iso
+export ISOSRC = file:$(shell pwd)/fuel-6.1.iso
export ISOCACHE = $(shell pwd)/$(shell basename $(ISOSRC))
export PRODNO = "OPNFV_BGS"
export REVSTATE = "P0000"
@@ -37,13 +37,6 @@ export TOPDIR := $(shell pwd)
#Build subclasses
SUBDIRS := f_isoroot
-SUBDIRS += f_opnfv_puppet
-SUBDIRS += f_osnaily
-SUBDIRS += f_l23network
-SUBDIRS += f_resolvconf
-SUBDIRS += f_ntp
-SUBDIRS += f_odl_docker
-#SUBDIRS += f_odl
# f_example is only an example of how to generate a .deb package and
# should not be enabled in official builds.
@@ -63,7 +56,6 @@ all:
@echo "Versions of cached build results built by" $(shell hostname) "at" $(shell date -u) > $(VERSION_FILE)
@echo "cache.mk" $(shell md5sum $(BUILD_BASE)/cache.mk | cut -f1 -d " ") >> $(VERSION_FILE)
@echo "config.mk" $(shell md5sum $(BUILD_BASE)/config.mk | cut -f1 -d " ") >> $(VERSION_FILE)
- $(MAKE) -C f_odl_docker -f Makefile all
@make -C docker
@docker/runcontext $(DOCKERIMG) $(MAKE) $(MAKEFLAGS) iso
@@ -83,16 +75,25 @@ $(ISOCACHE):
@echo "fuel" `git -C /tmp/fuel-main show | grep commit | head -1 | cut -d " " -f2` >> $(VERSION_FILE)
# Setup cgroups for docker-in-docker
sudo /root/enable_dockerx2
- # Patch to fix race condition when doing "Docker-in-Docker" build
- cd /tmp/fuel-main && patch -p1 < $(TOPDIR)/fuel-main_1.patch
- # Patch to make the sandbox chroot in Fuel succeed with package
- # installation in a Docker build
- cd /tmp/fuel-main && patch -p1 < $(TOPDIR)/fuel-main_2.patch
+ # Temporary patch to accomodate for new Ubuntu trusty devops keys not yet
+ # backported to fuel 6.0 or 6.1
+ cd /tmp/fuel-main && patch -p0 < $(TOPDIR)/fuel-main_3.patch
+ # Patch for adding dosfstools, as Fuel 6.1 is running mkfs.vfat
+ cd /tmp/fuel-main && patch -p0 < $(TOPDIR)/fuel-main_5.patch
# Remove Docker optimizations, otherwise multistrap will fail during
# Fuel build.
sudo rm -f /etc/apt/apt.conf.d/docker*
#
cd /tmp/fuel-main && ./prepare-build-env.sh
+ cd /tmp/fuel-main && make repos
+ # Patch for speeding up image creation in virtual environments,
+ # https://review.openstack.org/#/c/197943/
+ cd /tmp/fuel-main && patch -p0 < $(TOPDIR)/fuel-agent_1.patch
+ cd /tmp/fuel-main/build/repos/nailgun && git config --global user.email "build$opnfv.org"
+ cd /tmp/fuel-main/build/repos/nailgun && git config --global user.name "OPNFV build"
+ cd /tmp/fuel-main/build/repos/nailgun && git add -u .
+ cd /tmp/fuel-main/build/repos/nailgun && git commit -m "Added patch"
+ #
cd /tmp/fuel-main && make iso
mv /tmp/fuel-main/build/artifacts/fuel*.iso .
@@ -116,14 +117,6 @@ $(SUBDIRS):
patch-packages:
ORIGISO=$(ISOCACHE) REVSTATE=$(REVSTATE) $(MAKE) -C $@ -f Makefile release
-.PHONY: prepare
-prepare:
- #$(MAKE) -C opendaylight -f Makefile setup
-
-.PHONY: odl
-odl:
- #$(MAKE) -C opendaylight -f Makefile
-
.PHONY: build-clean $(SUBCLEAN)
build-clean: $(SUBCLEAN)
$(MAKE) -C patch-packages -f Makefile clean
@@ -132,13 +125,11 @@ build-clean: $(SUBCLEAN)
@rm -f $(NEWISO)
.PHONY: clean $(SUBCLEAN)
-clean: clean-cache prepare $(SUBCLEAN)
+clean: clean-cache $(SUBCLEAN)
$(MAKE) -C patch-packages -f Makefile clean
- #$(MAKE) -C opendaylight -f Makefile clean
@rm -f *.iso
@rm -Rf release
@rm -Rf newiso
- @rm -f f_odl
@rm -f $(NEWISO)
@rm -f $(BUILD_BASE)/.versions
@@ -148,6 +139,12 @@ $(SUBCLEAN): %.clean:
# Todo: Make things smarter - we shouldn't need to clean everything
# betwen make invocations.
.PHONY: iso
-iso: prepare build-clean odl $(ISOCACHE) $(SUBDIRS) patch-packages
+iso: build-clean $(ISOCACHE) $(SUBDIRS) patch-packages
install/install.sh iso $(ISOCACHE) $(NEWISO) $(PRODNO) $(REVSTATE)
@printf "\n\nProduct ISO is $(NEWISO)\n\n"
+
+# Start a bash shell in docker for Makefile debugging
+.PHONY: debug
+debug:
+ @docker version >/dev/null 2>&1 || (echo 'No Docker installation available'; exit 1)
+ docker/runcontext $(DOCKERIMG) bash
diff --git a/fuel/build/README b/fuel/build/README
index 9692f3468..a6e15694c 100644
--- a/fuel/build/README
+++ b/fuel/build/README
@@ -18,6 +18,5 @@ This purpose of this framework is to:
- Apply patches to the baseline.
- Etc.
3) Re factor/rebuild the .iso image for deployment (also builds in a container, for the same reason as mentioned above)
-4) Through a pre-deployment script, setting config's not part of the pristine fuel build can be achieved
For detailed instructions on how to add content, configuration, build and deply - please see: DOC/
diff --git a/fuel/build/cache.mk b/fuel/build/cache.mk
index cc98f6825..b88ac2fc4 100644
--- a/fuel/build/cache.mk
+++ b/fuel/build/cache.mk
@@ -1,4 +1,4 @@
-##############################################################################
+#############################################################################
# Copyright (c) 2015 Ericsson AB and others.
# stefan.k.berg@ericsson.com
# jonas.bjurel@ericsson.com
@@ -15,10 +15,8 @@ CACHECLEAN := $(addsuffix .clean,$(CACHEFILES) $(CACHEDIRS))
############################################################################
# BEGIN of variables to customize
#
-#CACHEDIRS := opendaylight/f_odl/package
+#CACHEDIRS := foo/bar
-#CACHEFILES := opendaylight/.odl-build-history
-#CACHEFILES += opendaylight/.odl-build.log
CACHEFILES += .versions
CACHEFILES += $(shell basename $(ISOSRC))
#
@@ -54,20 +52,20 @@ $(CACHEFILES):
@if [ ! -f $(BUILD_BASE)/$@ ]; then\
echo " " > $(BUILD_BASE)/$@;\
- ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@;\
+ ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@;\
rm -f $(BUILD_BASE)/$@;\
else\
ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@;\
fi
.PHONY: validate-cache
-validate-cache: prepare $(CACHEVALIDATE)
- @if [[ $(shell md5sum $(BUILD_BASE)/config.mk | cut -f1 -d " ") != $(shell cat $(VERSION_FILE) | grep config.mk | awk '{print $$NF}') ]]; then\
+validate-cache: $(CACHEVALIDATE)
+ @if [ "$(shell md5sum $(BUILD_BASE)/config.mk | cut -f1 -d " ")" != "$(shell cat $(VERSION_FILE) | grep config.mk | awk '{print $$NF}')" ]; then\
echo "Cache does not match current config.mk definition, cache must be rebuilt";\
exit 1;\
fi;
- @if [[ $(shell md5sum $(BUILD_BASE)/cache.mk | cut -f1 -d " ") != $(shell cat $(VERSION_FILE) | grep cache.mk | awk '{print $$NF}') ]]; then\
+ @if [ "$(shell md5sum $(BUILD_BASE)/cache.mk | cut -f1 -d " ")" != "$(shell cat $(VERSION_FILE) | grep cache.mk | awk '{print $$NF}')" ]; then\
echo "Cache does not match current cache.mk definition, cache must be rebuilt";\
exit 1;\
fi;
@@ -80,14 +78,12 @@ validate-cache: prepare $(CACHEVALIDATE)
then \
REMOTE_ID=$(shell git ls-remote $(FUEL_MAIN_REPO) $(FUEL_MAIN_TAG) | awk '{print $$(NF-1)}'); \
fi; \
- if [ $$REMOTE_ID != $(shell cat $(VERSION_FILE) | grep fuel | awk '{print $$NF}') ]; \
+ if [[ $$REMOTE_ID != $(shell cat $(VERSION_FILE) | grep fuel | awk '{print $$NF}') ]]; \
then \
echo "Cache does not match upstream Fuel, cache must be rebuilt!"; \
exit 1; \
fi
- #$(MAKE) -C opendaylight validate-cache
-
.PHONY: $(CACHEVALIDATE)
$(CACHEVALIDATE): %.validate:
@echo VALIDATE $(CACHEVALIDATE)
diff --git a/fuel/build/config.mk b/fuel/build/config.mk
index 19f502d03..e9a5320f4 100644
--- a/fuel/build/config.mk
+++ b/fuel/build/config.mk
@@ -8,19 +8,12 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-ODL_MAIN_REPO := https://git.opendaylight.org/gerrit/p/controller.git
-ODL_MAIN_TAG := release/helium
-
FUEL_MAIN_REPO := https://github.com/stackforge/fuel-main
-FUEL_MAIN_TAG = stable/6.0
+FUEL_MAIN_TAG = stable/6.1
DOCKER_REPO := http://get.docker.com/builds/Linux/x86_64
DOCKER_TAG := docker-latest
-.PHONY: get-odl-repo
-get-odl-repo:
- @echo $(ODL_MAIN_REPO) $(ODL_MAIN_TAG)
-
.PHONY: get-fuel-repo
get-fuel-repo:
@echo $(FUEL_MAIN_REPO) $(FUEL_MAIN_TAG)
diff --git a/fuel/build/docker/ubuntu-builder/Dockerfile b/fuel/build/docker/ubuntu-builder/Dockerfile
index b4e1b4e24..81cdc43fb 100644
--- a/fuel/build/docker/ubuntu-builder/Dockerfile
+++ b/fuel/build/docker/ubuntu-builder/Dockerfile
@@ -14,7 +14,7 @@ RUN apt-get update
RUN apt-get install -y software-properties-common python-software-properties \
make python-setuptools python-all dpkg-dev debhelper \
fuseiso git genisoimage bind9-host wget curl lintian tmux lxc iptables \
- ca-certificates sudo apt-utils lsb-release
+ ca-certificates sudo apt-utils lsb-release dosfstools
RUN echo "ALL ALL=NOPASSWD: ALL" > /etc/sudoers.d/open-sudo
RUN chmod 0440 /etc/sudoers.d/open-sudo
@@ -24,8 +24,5 @@ ADD ./setcontext /root/setcontext
RUN chmod +x /root/setcontext
ADD ./enable_dockerx2 /root/enable_dockerx2
RUN chmod +x /root/enable_dockerx2
-ADD ./install.sh /root/install.sh
-RUN chmod +x /root/install.sh
-RUN /root/install.sh
VOLUME /var/lib/docker
diff --git a/fuel/build/docker/ubuntu-builder/install.sh b/fuel/build/docker/ubuntu-builder/install.sh
deleted file mode 100755
index df1af72f1..000000000
--- a/fuel/build/docker/ubuntu-builder/install.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-# stefan.k.berg@ericsson.com
-# jonas.bjurel@ericsson.com
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-#Install Oracle Java 7 jdk
-echo "Installing JAVA 7"
-apt-get update
-add-apt-repository ppa:webupd8team/java -y
-apt-get update
-echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
-apt-get install oracle-java7-installer -y
-
-#Install Maven 3
-echo deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main >> /etc/apt/sources.list
-echo deb-src http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main >> /etc/apt/sources.list
-apt-get update || exit 1
-sudo apt-get install -y --force-yes maven3 || exit 1
-ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn
diff --git a/fuel/build/f_isoroot/Makefile b/fuel/build/f_isoroot/Makefile
index bde8e6442..a9b12d927 100644
--- a/fuel/build/f_isoroot/Makefile
+++ b/fuel/build/f_isoroot/Makefile
@@ -8,7 +8,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-SUBDIRS = f_predeployment f_kscfg f_bootstrap
+SUBDIRS = f_kscfg f_bootstrap f_repobuild f_odlpluginbuild
SUBCLEAN = $(addsuffix .clean,$(SUBDIRS))
.PHONY: all
diff --git a/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh b/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh
index 348ce3cb4..8bdf5667c 100755
--- a/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh
+++ b/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+FUEL_RELEASE=$(grep release: /etc/fuel/version.yaml | cut -d: -f2 | tr -d '" ')
function countdown() {
local i
@@ -47,9 +48,6 @@ if [[ "$showmenu" == "yes" || "$showmenu" == "YES" ]]; then
{ kill "$pid"; wait $!; } 2>/dev/null
case "$key" in
$'\e') echo "Skipping Fuel Setup.."
- echo -n "Applying default Fuel setings..."
- fuelmenu --save-only --iface=eth0
- echo "Done!"
;;
*) echo -e "\nEntering Fuel Setup..."
fuelmenu
@@ -57,30 +55,51 @@ if [[ "$showmenu" == "yes" || "$showmenu" == "YES" ]]; then
esac
fi
fi
+
+
#Reread /etc/sysconfig/network to inform puppet of changes
. /etc/sysconfig/network
hostname "$HOSTNAME"
-### docker stuff
-images_dir="/var/www/nailgun/docker/images"
+service docker start
-# extract docker images
-mkdir -p $images_dir $sources_dir
-rm -f $images_dir/*tar
-pushd $images_dir &>/dev/null
+if [ -f /root/.build_images ]; then
+ #Fail on all errors
+ set -e
+ trap fail EXIT
-echo "Extracting and loading docker images. (This may take a while)"
-lrzip -d -o fuel-images.tar fuel-images.tar.lrz && tar -xf fuel-images.tar && rm -f fuel-images.tar
-popd &>/dev/null
-service docker start
+ echo "Loading Fuel base image for Docker..."
+ docker load -i /var/www/nailgun/docker/images/fuel-images.tar
-# load docker images
-for image in $images_dir/*tar ; do
- echo "Loading docker image ${image}..."
- docker load -i "$image"
- # clean up extracted image
- rm -f "$image"
-done
+ echo "Building Fuel Docker images..."
+ WORKDIR=$(mktemp -d /tmp/docker-buildXXX)
+ SOURCE=/var/www/nailgun/docker
+ REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir /var/www/html/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/os/x86_64;/usr/sbin/apachectl -DFOREGROUND')
+ RANDOM_PORT=$(docker port $REPO_CONT_ID 80 | cut -d':' -f2)
+
+ for imagesource in /var/www/nailgun/docker/sources/*; do
+ if ! [ -f "$imagesource/Dockerfile" ]; then
+ echo "Skipping ${imagesource}..."
+ continue
+ fi
+ image=$(basename "$imagesource")
+ cp -R "$imagesource" $WORKDIR/$image
+ mkdir -p $WORKDIR/$image/etc
+ cp -R /etc/puppet /etc/fuel $WORKDIR/$image/etc
+ sed -e "s/_PORT_/${RANDOM_PORT}/" -i $WORKDIR/$image/Dockerfile
+ sed -e 's/production:.*/production: "docker-build"/' -i $WORKDIR/$image/etc/fuel/version.yaml
+ docker build -t fuel/${image}_${FUEL_RELEASE} $WORKDIR/$image
+ done
+ docker rm -f $REPO_CONT_ID
+ rm -rf "$WORKDIR"
+
+ #Remove trap for normal deployment
+ trap - EXIT
+ set +e
+else
+ echo "Loading docker images. (This may take a while)"
+ docker load -i /var/www/nailgun/docker/images/fuel-images.tar
+fi
# apply puppet
puppet apply --detailed-exitcodes -d -v /etc/puppet/modules/nailgun/examples/host-only.pp
@@ -102,4 +121,52 @@ done
shopt -u nullglob
### OPNFV addition END
+# Enable updates repository
+cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-updates.repo << EOF
+[mos${FUEL_RELEASE}-updates]
+name=mos${FUEL_RELEASE}-updates
+baseurl=http://mirror.fuel-infra.org/mos/centos-6/mos${FUEL_RELEASE}/updates/
+gpgcheck=0
+skip_if_unavailable=1
+EOF
+
+# Enable security repository
+cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-security.repo << EOF
+[mos${FUEL_RELEASE}-security]
+name=mos${FUEL_RELEASE}-security
+baseurl=http://mirror.fuel-infra.org/mos/centos-6/mos${FUEL_RELEASE}/security/
+gpgcheck=0
+skip_if_unavailable=1
+EOF
+
+#Check if repo is accessible
+echo "Checking for access to updates repository..."
+repourl=$(grep baseurl /etc/yum.repos.d/*updates* 2>/dev/null | cut -d'=' -f2- | head -1)
+if urlaccesscheck check "$repourl" ; then
+ UPDATE_ISSUES=0
+else
+ UPDATE_ISSUES=1
+fi
+
+if [ $UPDATE_ISSUES -eq 1 ]; then
+ warning="WARNING: There are issues connecting to Fuel update repository.\
+\nPlease fix your connection and update this node with \`yum update\`\
+\nThen run \`dockerctl destroy all; bootstrap_admin_node.sh;\`\
+\nto repeat bootstrap on Fuel Master with the latest updates.\
+\nFor more information, check out Fuel documentation at:\
+\nhttp://docs.mirantis.com/fuel"
+else
+ warning="WARNING: There may be updates available for Fuel.\
+\nYou should update this node with \`yum update\`. If there are available\
+\n updates, run \`dockerctl destroy all; bootstrap_admin_node.sh;\`\
+\nto repeat bootstrap on Fuel Master with the latest updates.\
+\nFor more information, check out Fuel documentation at:\
+\nhttp://docs.mirantis.com/fuel"
+fi
+echo
+echo "*************************************************"
+echo -e "$warning"
+echo "*************************************************"
+echo "Sending notification to Fuel UI..."
+fuel notify --topic warning --send "$warning"
echo "Fuel node deployment complete!"
diff --git a/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig b/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig
index 7b6e6bd71..8d21c1e72 100755
--- a/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig
+++ b/fuel/build/f_isoroot/f_bootstrap/bootstrap_admin_node.sh.orig
@@ -1,4 +1,5 @@
#!/bin/bash
+FUEL_RELEASE=$(grep release: /etc/fuel/version.yaml | cut -d: -f2 | tr -d '" ')
function countdown() {
local i
@@ -37,9 +38,6 @@ if [[ "$showmenu" == "yes" || "$showmenu" == "YES" ]]; then
{ kill "$pid"; wait $!; } 2>/dev/null
case "$key" in
$'\e') echo "Skipping Fuel Setup.."
- echo -n "Applying default Fuel setings..."
- fuelmenu --save-only --iface=eth0
- echo "Done!"
;;
*) echo -e "\nEntering Fuel Setup..."
fuelmenu
@@ -47,30 +45,51 @@ if [[ "$showmenu" == "yes" || "$showmenu" == "YES" ]]; then
esac
fi
fi
+
+
#Reread /etc/sysconfig/network to inform puppet of changes
. /etc/sysconfig/network
hostname "$HOSTNAME"
-### docker stuff
-images_dir="/var/www/nailgun/docker/images"
+service docker start
-# extract docker images
-mkdir -p $images_dir $sources_dir
-rm -f $images_dir/*tar
-pushd $images_dir &>/dev/null
+if [ -f /root/.build_images ]; then
+ #Fail on all errors
+ set -e
+ trap fail EXIT
-echo "Extracting and loading docker images. (This may take a while)"
-lrzip -d -o fuel-images.tar fuel-images.tar.lrz && tar -xf fuel-images.tar && rm -f fuel-images.tar
-popd &>/dev/null
-service docker start
+ echo "Loading Fuel base image for Docker..."
+ docker load -i /var/www/nailgun/docker/images/fuel-images.tar
+
+ echo "Building Fuel Docker images..."
+ WORKDIR=$(mktemp -d /tmp/docker-buildXXX)
+ SOURCE=/var/www/nailgun/docker
+ REPO_CONT_ID=$(docker -D run -d -p 80 -v /var/www/nailgun:/var/www/nailgun fuel/centos sh -c 'mkdir /var/www/html/os;ln -sf /var/www/nailgun/centos/x86_64 /var/www/html/os/x86_64;/usr/sbin/apachectl -DFOREGROUND')
+ RANDOM_PORT=$(docker port $REPO_CONT_ID 80 | cut -d':' -f2)
+
+ for imagesource in /var/www/nailgun/docker/sources/*; do
+ if ! [ -f "$imagesource/Dockerfile" ]; then
+ echo "Skipping ${imagesource}..."
+ continue
+ fi
+ image=$(basename "$imagesource")
+ cp -R "$imagesource" $WORKDIR/$image
+ mkdir -p $WORKDIR/$image/etc
+ cp -R /etc/puppet /etc/fuel $WORKDIR/$image/etc
+ sed -e "s/_PORT_/${RANDOM_PORT}/" -i $WORKDIR/$image/Dockerfile
+ sed -e 's/production:.*/production: "docker-build"/' -i $WORKDIR/$image/etc/fuel/version.yaml
+ docker build -t fuel/${image}_${FUEL_RELEASE} $WORKDIR/$image
+ done
+ docker rm -f $REPO_CONT_ID
+ rm -rf "$WORKDIR"
-# load docker images
-for image in $images_dir/*tar ; do
- echo "Loading docker image ${image}..."
- docker load -i "$image"
- # clean up extracted image
- rm -f "$image"
-done
+ #Remove trap for normal deployment
+ trap - EXIT
+ set +e
+else
+ echo "Loading docker images. (This may take a while)"
+ docker load -i /var/www/nailgun/docker/images/fuel-images.tar
+fi
# apply puppet
puppet apply --detailed-exitcodes -d -v /etc/puppet/modules/nailgun/examples/host-only.pp
@@ -81,4 +100,53 @@ rmdir /var/log/remote && ln -s /var/log/docker-logs/remote /var/log/remote
dockerctl check || fail
bash /etc/rc.local
+
+# Enable updates repository
+cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-updates.repo << EOF
+[mos${FUEL_RELEASE}-updates]
+name=mos${FUEL_RELEASE}-updates
+baseurl=http://mirror.fuel-infra.org/mos/centos-6/mos${FUEL_RELEASE}/updates/
+gpgcheck=0
+skip_if_unavailable=1
+EOF
+
+# Enable security repository
+cat > /etc/yum.repos.d/mos${FUEL_RELEASE}-security.repo << EOF
+[mos${FUEL_RELEASE}-security]
+name=mos${FUEL_RELEASE}-security
+baseurl=http://mirror.fuel-infra.org/mos/centos-6/mos${FUEL_RELEASE}/security/
+gpgcheck=0
+skip_if_unavailable=1
+EOF
+
+#Check if repo is accessible
+echo "Checking for access to updates repository..."
+repourl=$(grep baseurl /etc/yum.repos.d/*updates* 2>/dev/null | cut -d'=' -f2- | head -1)
+if urlaccesscheck check "$repourl" ; then
+ UPDATE_ISSUES=0
+else
+ UPDATE_ISSUES=1
+fi
+
+if [ $UPDATE_ISSUES -eq 1 ]; then
+ warning="WARNING: There are issues connecting to Fuel update repository.\
+\nPlease fix your connection and update this node with \`yum update\`\
+\nThen run \`dockerctl destroy all; bootstrap_admin_node.sh;\`\
+\nto repeat bootstrap on Fuel Master with the latest updates.\
+\nFor more information, check out Fuel documentation at:\
+\nhttp://docs.mirantis.com/fuel"
+else
+ warning="WARNING: There may be updates available for Fuel.\
+\nYou should update this node with \`yum update\`. If there are available\
+\n updates, run \`dockerctl destroy all; bootstrap_admin_node.sh;\`\
+\nto repeat bootstrap on Fuel Master with the latest updates.\
+\nFor more information, check out Fuel documentation at:\
+\nhttp://docs.mirantis.com/fuel"
+fi
+echo
+echo "*************************************************"
+echo -e "$warning"
+echo "*************************************************"
+echo "Sending notification to Fuel UI..."
+fuel notify --topic warning --send "$warning"
echo "Fuel node deployment complete!"
diff --git a/fuel/build/f_isoroot/f_bootstrap/post-scripts/01_fix_iommubug.sh b/fuel/build/f_isoroot/f_bootstrap/post-scripts/01_fix_iommubug.sh
deleted file mode 100755
index 79aa31a4a..000000000
--- a/fuel/build/f_isoroot/f_bootstrap/post-scripts/01_fix_iommubug.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#/bin/sh
-echo "Setting intel_iommu=off in bootstrap profile - a fix for the Dell systems"
-echo "Old settings"
-dockerctl shell cobbler cobbler profile report --name bootstrap
-echo "Modifying"
-dockerctl shell cobbler cobbler profile edit --name bootstrap --kopts "intel_iommu=off" --in-place
-echo "New settings"
-dockerctl shell cobbler cobbler profile report --name bootstrap
-
diff --git a/fuel/build/f_isoroot/f_bootstrap/post-scripts/02_fix_console_speed.sh b/fuel/build/f_isoroot/f_bootstrap/post-scripts/02_fix_console_speed.sh
deleted file mode 100755
index bf7591bdc..000000000
--- a/fuel/build/f_isoroot/f_bootstrap/post-scripts/02_fix_console_speed.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#/bin/sh
-echo "Changing console speed to 115200 (std is 9600) on bootstrap"
-echo "Old settings"
-dockerctl shell cobbler cobbler profile report --name bootstrap
-echo "Modifying"
-dockerctl shell cobbler cobbler profile edit --name bootstrap --kopts "console=tty0 console=ttyS0,115200" --in-place
-echo "New settings"
-dockerctl shell cobbler cobbler profile report --name bootstrap
-echo "Setting console speed to 115200 on ubuntu_1204_x86_64 (std is no serial console)"
-echo "Old settings"
-dockerctl shell cobbler cobbler profile report --name ubuntu_1204_x86_64
-echo "Modifying"
-dockerctl shell cobbler cobbler profile edit --name ubuntu_1204_x86_64 --kopts "console=tty0 console=ttyS0,115200" --in-place
-echo "New settings"
-dockerctl shell cobbler cobbler profile report --name ubuntu_1204_x86_64
diff --git a/fuel/build/f_isoroot/f_bootstrap/post-scripts/03_install_repo.sh b/fuel/build/f_isoroot/f_bootstrap/post-scripts/03_install_repo.sh
new file mode 100755
index 000000000..427a55add
--- /dev/null
+++ b/fuel/build/f_isoroot/f_bootstrap/post-scripts/03_install_repo.sh
@@ -0,0 +1,19 @@
+#/bin/sh
+echo "Installing pre-build repo"
+if [ ! -d /opt/opnfv/nailgun ]; then
+ echo "Error - found no repo!"
+ exit 1
+fi
+
+mkdir -p /var/www/nailgun
+mv /opt/opnfv/nailgun/* /var/www/nailgun
+if [ $? -ne 0 ]; then
+ echo "Error moving repos to their correct location!"
+ exit 1
+fi
+rmdir /opt/opnfv/nailgun
+if [ $? -ne 0 ]; then
+ echo "Error removing /opt/opnfv/nailgun directory!"
+ exit 1
+fi
+echo "Done installing pre-build repo"
diff --git a/fuel/build/f_isoroot/f_kscfg/ks.cfg b/fuel/build/f_isoroot/f_kscfg/ks.cfg
index 508f04436..12cd1abab 100755..100644
--- a/fuel/build/f_isoroot/f_kscfg/ks.cfg
+++ b/fuel/build/f_isoroot/f_kscfg/ks.cfg
@@ -26,10 +26,12 @@ skipx
drives=""
removable_drives=""
for drv in `ls -1 /sys/block | grep "sd\|hd\|vd\|cciss"`; do
- if (grep -q 0 /sys/block/${drv}/removable); then
- drives="${drives} ${drv}"
- else
- removable_drives="${removable_drives} ${drv}"
+ if !(blkid | grep -q "${drv}.*Fuel"); then
+ if (grep -q 0 /sys/block/${drv}/removable); then
+ drives="${drives} ${drv}"
+ else
+ removable_drives="${removable_drives} ${drv}"
+ fi
fi
done
default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'`
@@ -152,9 +154,9 @@ if [ "$format_confirmed" != "yes" ] ; then
chvt 1
fi
-# verify tgtdrive is at least 30GB
+# verify tgtdrive is at least 41GB
tgtdrivesize=$(( $(cat "/sys/class/block/${tgtdrive}/size") / 2 / 1024 ))
-if [ $tgtdrivesize -lt 30720 ]; then
+if [ $tgtdrivesize -lt 41984 ]; then
exec < /dev/tty3 > /dev/tty3 2>&1
chvt 3
clear
@@ -162,7 +164,7 @@ if [ $tgtdrivesize -lt 30720 ]; then
echo '********************************************************************'
echo '* E R R O R *'
echo '* *'
- echo '* Your disk is under 30GB in size. Installation cannot continue. *'
+ echo '* Your disk is under 41GB in size. Installation cannot continue. *'
echo '* Restart installation with a larger disk. *'
echo '* *'
echo '********************************************************************'
@@ -175,7 +177,9 @@ fi
tgtdrive=$(echo $tgtdrive | sed -e 's/!/\//')
# source
-if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
+if test -e /dev/disk/by-label/"OpenStack_Fuel"; then
+ echo "harddrive --partition=LABEL="OpenStack_Fuel" --dir=/" > /tmp/source.ks
+elif test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
echo "harddrive --partition=UUID=will_be_substituted_with_actual_uuid --dir=/" > /tmp/source.ks
else
echo "cdrom" > /tmp/source.ks
@@ -204,16 +208,18 @@ else
fi
echo > /tmp/partition.ks
echo "partition /boot --onpart=/dev/${bootdev}3" >> /tmp/partition.ks
-echo "partition pv.001 --ondisk=${tgtdrive} --size=30000 --grow" >> /tmp/partition.ks
+echo "partition /boot/efi --onpart=/dev/${bootdev}2" >> /tmp/partition.ks
+echo "partition pv.001 --ondisk=${tgtdrive} --size=41000 --grow" >> /tmp/partition.ks
echo "volgroup os pv.001" >> /tmp/partition.ks
echo "logvol swap --vgname=os --recommended --name=swap" >> /tmp/partition.ks
echo "logvol / --vgname=os --size=10000 --name=root --fstype=ext4" >> /tmp/partition.ks
-echo "logvol /var --vgname=os --size=10000 --percent 60 --grow --name=var --fstype=ext4" >> /tmp/partition.ks
-echo "logvol /var/log --vgname=os --size=4096 --percent 40 --grow --name=varlog --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var --vgname=os --size=10000 --percent 30 --grow --name=var --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var/lib/docker --vgname=os --size=17000 --percent 20 --grow --name=varlibdocker --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var/log --vgname=os --size=4096 --percent 50 --grow --name=varlog --fstype=ext4" >> /tmp/partition.ks
# bootloader
-echo "bootloader --location=mbr --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks
+echo "bootloader --location=partition --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks
# Anaconda can not install grub 0.97 on disks which are >4T.
# The reason is that grub does not support such large geometries
@@ -233,6 +239,9 @@ echo "cat /tmp/grub.script | chroot /mnt/sysimage /sbin/grub --no-floppy --batch
%packages --nobase --excludedocs
@Core
+fuel
+fuel-library
+fuel-dockerctl
authconfig
bind-utils
cronie
@@ -241,7 +250,12 @@ curl
daemonize
dhcp
docker-io
+fuel-bootstrap-image
+fuel-createmirror
+fuel-target-centos-images
+fuel-package-updates
fuelmenu
+fuel-docker-images
gdisk
lrzip
lsof
@@ -249,8 +263,10 @@ man
mlocate
nmap-ncat
ntp
+ntpdate
openssh-clients
policycoreutils
+python-daemon
rsync
ruby21-puppet
ruby21-rubygem-netaddr
@@ -266,6 +282,7 @@ vim-enhanced
virt-what
wget
yum
+yum-plugin-priorities
%include /tmp/post_partition.ks
@@ -285,6 +302,8 @@ echo -e "* soft core unlimited\n* hard core unlimited" >> /etc/security/limits.c
%post --nochroot --log=/mnt/sysimage/root/anaconda-post-before-chroot.log
#!/bin/sh
+set -x
+
SOURCE="/mnt/sysimage/tmp/source"
for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
@@ -342,6 +361,7 @@ function save_cfg {
else
echo GATEWAY=$gw >> /etc/sysconfig/network
fi
+ [ -n "$build_images" -a "$build_images" != "0" ] && echo -e "$build_images" > /root/.build_images
}
# Default FQDN
@@ -356,6 +376,7 @@ gw=$gw
device="eth0"
hwaddr=`ifconfig $device | grep -i hwaddr | sed -e 's#^.*hwaddr[[:space:]]*##I'`
dhcp_interface=$dhcp_interface
+build_images=$build_images
save_cfg
# Mounting installation source
@@ -366,7 +387,9 @@ echo
mkdir -p ${SOURCE}
mkdir -p ${FS}
-if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
+if test -e /dev/disk/by-label/"OpenStack_Fuel"; then
+ mount /dev/disk/by-label/"OpenStack_Fuel" ${SOURCE}
+elif test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
mount /dev/disk/by-uuid/will_be_substituted_with_actual_uuid ${FS}
mount -o loop ${FS}/nailgun.iso ${SOURCE}
fi
@@ -390,61 +413,47 @@ cp ${SOURCE}/.treeinfo ${repodir}/centos/x86_64
# Copying Ubuntu files
mkdir -p ${repodir}/ubuntu/x86_64/images
-cp -r ${SOURCE}/ubuntu/conf ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/db ${repodir}/ubuntu/x86_64
cp -r ${SOURCE}/ubuntu/dists ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/indices ${repodir}/ubuntu/x86_64
cp -r ${SOURCE}/ubuntu/pool ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux ${repodir}/ubuntu/x86_64/images
-cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz ${repodir}/ubuntu/x86_64/images
+
+# We do not ship debian-installer kernel and initrd on ISO.
+# But we still need to be able to create ubuntu cobbler distro
+# which requires kernel and initrd to be available. So, we
+# just touch these files to work around cobbler's limitation.
+touch ${repodir}/ubuntu/x86_64/images/linux
+touch ${repodir}/ubuntu/x86_64/images/initrd.gz
# make links for backward compatibility
ln -s ${repodir}/centos ${wwwdir}/centos
ln -s ${repodir}/ubuntu ${wwwdir}/ubuntu
-# Copying bootstrap image
-mkdir -p ${wwwdir}/bootstrap
-cp -r ${SOURCE}/bootstrap/initramfs.img ${wwwdir}/bootstrap
-cp -r ${SOURCE}/bootstrap/linux ${wwwdir}/bootstrap
-
-# Copying target images
-cp -r ${SOURCE}/targetimages ${wwwdir}
-
-mkdir -p /root/.ssh
-chmod 700 /root/.ssh
-cp ${SOURCE}/bootstrap/bootstrap.rsa /root/.ssh
-chmod 600 /root/.ssh/bootstrap.rsa
-
# --------------------------
# UNPACKING PUPPET MANIFESTS
# --------------------------
# create folders
-mkdir -p /etc/puppet/${OPENSTACK_VERSION}/manifests/
-mkdir -p /etc/puppet/${OPENSTACK_VERSION}/modules/
-rm -rf /etc/puppet/modules/
+#mkdir -p /etc/puppet/${OPENSTACK_VERSION}/manifests/
+#mkdir -p /etc/puppet/${OPENSTACK_VERSION}/modules/
+#rm -rf /etc/puppet/modules/
# TODO(ikalnitsky): investigate why we need this
-cp ${SOURCE}/puppet-slave.tgz ${wwwdir}/
+#cp ${SOURCE}/puppet-slave.tgz ${wwwdir}/
# place modules and manifests
-tar zxf ${SOURCE}/puppet-slave.tgz -C /etc/puppet/${OPENSTACK_VERSION}/modules
-cp /etc/puppet/${OPENSTACK_VERSION}/modules/osnailyfacter/examples/site.pp /etc/puppet/${OPENSTACK_VERSION}/manifests/site.pp
+#tar zxf ${SOURCE}/puppet-slave.tgz -C /etc/puppet/${OPENSTACK_VERSION}/modules
+#cp /etc/puppet/${OPENSTACK_VERSION}/modules/osnailyfacter/examples/site.pp /etc/puppet/${OPENSTACK_VERSION}/manifests/site.pp
cp ${SOURCE}/centos-versions.yaml ${SOURCE}/ubuntu-versions.yaml /etc/puppet/${OPENSTACK_VERSION}/manifests/
# make links for backward compatibility
-pushd /etc/puppet
-ln -s ${OPENSTACK_VERSION}/manifests/ /etc/puppet/manifests
-ln -s ${OPENSTACK_VERSION}/modules/ /etc/puppet/modules
-popd
+#pushd /etc/puppet
+#ln -s ${OPENSTACK_VERSION}/manifests/ /etc/puppet/manifests
+#ln -s ${OPENSTACK_VERSION}/modules/ /etc/puppet/modules
+#popd
cp ${SOURCE}/send2syslog.py /bin/send2syslog.py
mkdir -p /var/lib/hiera
touch /var/lib/hiera/common.yaml /etc/puppet/hiera.yaml
-# Deploy docker images and ctl tools if we built ISO with docker containers support
-[ -d "${SOURCE}/docker" ] && cp -r ${SOURCE}/docker ${wwwdir}/docker
-
# Prepare local repository specification
rm /etc/yum.repos.d/CentOS*.repo
cat > /etc/yum.repos.d/nailgun.repo << EOF
@@ -461,6 +470,24 @@ sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/subscription-manager.conf
# Disable GSSAPI in ssh server config
sed -i -e "/^\s*GSSAPICleanupCredentials yes/d" -e "/^\s*GSSAPIAuthentication yes/d" /etc/ssh/sshd_config
+# Enable MOTD banner in sshd
+sed -i -e "s/^\s*PrintMotd no/PrintMotd yes/g" /etc/ssh/sshd_config
+
+# Add note regarding local repos creation to MOTD
+cat >> /etc/motd << EOF
+
+All environments use online repositories by default.
+Use the following commands to create local repositories
+on master node and change default repository settings:
+
+* CentOS: fuel-package-updates (see --help for options)
+* Ubuntu: fuel-createmirror (see --help for options)
+
+Please refer to the following guide for more information:
+https://docs.mirantis.com/openstack/fuel/fuel-6.1/reference-architecture.html#fuel-rep-mirror
+
+EOF
+
# Copying bootstrap_admin_node.sh, chmod it and
# adding /etc/init/bootstrap_admin_node.conf
cp ${SOURCE}/bootstrap_admin_node.sh /usr/local/sbin/bootstrap_admin_node.sh
@@ -546,10 +573,7 @@ rm -rf ${SOURCE}
umount -f ${FS} || true
rm -rf ${FS}
-# Enabling/configuring NTPD and ntpdate services
-echo "server 127.127.1.0" >> /etc/ntp.conf
-echo "fudge 127.127.1.0 stratum 10" >> /etc/ntp.conf
-echo "tos orphan 7" >> /etc/ntp.conf
+echo "tos orphan 7" >> /etc/ntp.conf
# Do not show error message on ntpdate failure. Customers should not be confused
# if admin node does not have access to the internet time servers.
@@ -571,4 +595,4 @@ cp -f /etc/skel/.bash* /root/
# Blacklist i2c_piix4 module for VirtualBox so it does not create kernel errors
[[ $(virt-what) = "virtualbox" ]] && echo "blacklist i2c_piix4" > /etc/modprobe.d/blacklist-i2c-piix4.conf
-%end
+%end \ No newline at end of file
diff --git a/fuel/build/f_isoroot/f_kscfg/ks.cfg.orig b/fuel/build/f_isoroot/f_kscfg/ks.cfg.orig
index bddf99c87..cf8cf80d1 100644
--- a/fuel/build/f_isoroot/f_kscfg/ks.cfg.orig
+++ b/fuel/build/f_isoroot/f_kscfg/ks.cfg.orig
@@ -26,10 +26,12 @@ skipx
drives=""
removable_drives=""
for drv in `ls -1 /sys/block | grep "sd\|hd\|vd\|cciss"`; do
- if (grep -q 0 /sys/block/${drv}/removable); then
- drives="${drives} ${drv}"
- else
- removable_drives="${removable_drives} ${drv}"
+ if !(blkid | grep -q "${drv}.*Fuel"); then
+ if (grep -q 0 /sys/block/${drv}/removable); then
+ drives="${drives} ${drv}"
+ else
+ removable_drives="${removable_drives} ${drv}"
+ fi
fi
done
default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'`
@@ -152,9 +154,9 @@ if [ "$format_confirmed" != "yes" ] ; then
chvt 1
fi
-# verify tgtdrive is at least 30GB
+# verify tgtdrive is at least 41GB
tgtdrivesize=$(( $(cat "/sys/class/block/${tgtdrive}/size") / 2 / 1024 ))
-if [ $tgtdrivesize -lt 30720 ]; then
+if [ $tgtdrivesize -lt 41984 ]; then
exec < /dev/tty3 > /dev/tty3 2>&1
chvt 3
clear
@@ -162,7 +164,7 @@ if [ $tgtdrivesize -lt 30720 ]; then
echo '********************************************************************'
echo '* E R R O R *'
echo '* *'
- echo '* Your disk is under 30GB in size. Installation cannot continue. *'
+ echo '* Your disk is under 41GB in size. Installation cannot continue. *'
echo '* Restart installation with a larger disk. *'
echo '* *'
echo '********************************************************************'
@@ -175,7 +177,9 @@ fi
tgtdrive=$(echo $tgtdrive | sed -e 's/!/\//')
# source
-if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
+if test -e /dev/disk/by-label/"OpenStack_Fuel"; then
+ echo "harddrive --partition=LABEL="OpenStack_Fuel" --dir=/" > /tmp/source.ks
+elif test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
echo "harddrive --partition=UUID=will_be_substituted_with_actual_uuid --dir=/" > /tmp/source.ks
else
echo "cdrom" > /tmp/source.ks
@@ -204,16 +208,18 @@ else
fi
echo > /tmp/partition.ks
echo "partition /boot --onpart=/dev/${bootdev}3" >> /tmp/partition.ks
-echo "partition pv.001 --ondisk=${tgtdrive} --size=30000 --grow" >> /tmp/partition.ks
+echo "partition /boot/efi --onpart=/dev/${bootdev}2" >> /tmp/partition.ks
+echo "partition pv.001 --ondisk=${tgtdrive} --size=41000 --grow" >> /tmp/partition.ks
echo "volgroup os pv.001" >> /tmp/partition.ks
echo "logvol swap --vgname=os --recommended --name=swap" >> /tmp/partition.ks
echo "logvol / --vgname=os --size=10000 --name=root --fstype=ext4" >> /tmp/partition.ks
-echo "logvol /var --vgname=os --size=10000 --percent 60 --grow --name=var --fstype=ext4" >> /tmp/partition.ks
-echo "logvol /var/log --vgname=os --size=4096 --percent 40 --grow --name=varlog --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var --vgname=os --size=10000 --percent 30 --grow --name=var --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var/lib/docker --vgname=os --size=17000 --percent 20 --grow --name=varlibdocker --fstype=ext4" >> /tmp/partition.ks
+echo "logvol /var/log --vgname=os --size=4096 --percent 50 --grow --name=varlog --fstype=ext4" >> /tmp/partition.ks
# bootloader
-echo "bootloader --location=mbr --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks
+echo "bootloader --location=partition --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks
# Anaconda can not install grub 0.97 on disks which are >4T.
# The reason is that grub does not support such large geometries
@@ -233,6 +239,9 @@ echo "cat /tmp/grub.script | chroot /mnt/sysimage /sbin/grub --no-floppy --batch
%packages --nobase --excludedocs
@Core
+fuel
+fuel-library
+fuel-dockerctl
authconfig
bind-utils
cronie
@@ -241,7 +250,12 @@ curl
daemonize
dhcp
docker-io
+fuel-bootstrap-image
+fuel-createmirror
+fuel-target-centos-images
+fuel-package-updates
fuelmenu
+fuel-docker-images
gdisk
lrzip
lsof
@@ -249,8 +263,10 @@ man
mlocate
nmap-ncat
ntp
+ntpdate
openssh-clients
policycoreutils
+python-daemon
rsync
ruby21-puppet
ruby21-rubygem-netaddr
@@ -266,6 +282,7 @@ vim-enhanced
virt-what
wget
yum
+yum-plugin-priorities
%include /tmp/post_partition.ks
@@ -285,6 +302,8 @@ echo -e "* soft core unlimited\n* hard core unlimited" >> /etc/security/limits.c
%post --nochroot --log=/mnt/sysimage/root/anaconda-post-before-chroot.log
#!/bin/sh
+set -x
+
SOURCE="/mnt/sysimage/tmp/source"
for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
@@ -342,6 +361,7 @@ function save_cfg {
else
echo GATEWAY=$gw >> /etc/sysconfig/network
fi
+ [ -n "$build_images" -a "$build_images" != "0" ] && echo -e "$build_images" > /root/.build_images
}
# Default FQDN
@@ -356,6 +376,7 @@ gw=$gw
device="eth0"
hwaddr=`ifconfig $device | grep -i hwaddr | sed -e 's#^.*hwaddr[[:space:]]*##I'`
dhcp_interface=$dhcp_interface
+build_images=$build_images
save_cfg
# Mounting installation source
@@ -366,7 +387,9 @@ echo
mkdir -p ${SOURCE}
mkdir -p ${FS}
-if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
+if test -e /dev/disk/by-label/"OpenStack_Fuel"; then
+ mount /dev/disk/by-label/"OpenStack_Fuel" ${SOURCE}
+elif test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
mount /dev/disk/by-uuid/will_be_substituted_with_actual_uuid ${FS}
mount -o loop ${FS}/nailgun.iso ${SOURCE}
fi
@@ -390,61 +413,47 @@ cp ${SOURCE}/.treeinfo ${repodir}/centos/x86_64
# Copying Ubuntu files
mkdir -p ${repodir}/ubuntu/x86_64/images
-cp -r ${SOURCE}/ubuntu/conf ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/db ${repodir}/ubuntu/x86_64
cp -r ${SOURCE}/ubuntu/dists ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/indices ${repodir}/ubuntu/x86_64
cp -r ${SOURCE}/ubuntu/pool ${repodir}/ubuntu/x86_64
-cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux ${repodir}/ubuntu/x86_64/images
-cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz ${repodir}/ubuntu/x86_64/images
+
+# We do not ship debian-installer kernel and initrd on ISO.
+# But we still need to be able to create ubuntu cobbler distro
+# which requires kernel and initrd to be available. So, we
+# just touch these files to work around cobbler's limitation.
+touch ${repodir}/ubuntu/x86_64/images/linux
+touch ${repodir}/ubuntu/x86_64/images/initrd.gz
# make links for backward compatibility
ln -s ${repodir}/centos ${wwwdir}/centos
ln -s ${repodir}/ubuntu ${wwwdir}/ubuntu
-# Copying bootstrap image
-mkdir -p ${wwwdir}/bootstrap
-cp -r ${SOURCE}/bootstrap/initramfs.img ${wwwdir}/bootstrap
-cp -r ${SOURCE}/bootstrap/linux ${wwwdir}/bootstrap
-
-# Copying target images
-cp -r ${SOURCE}/targetimages ${wwwdir}
-
-mkdir -p /root/.ssh
-chmod 700 /root/.ssh
-cp ${SOURCE}/bootstrap/bootstrap.rsa /root/.ssh
-chmod 600 /root/.ssh/bootstrap.rsa
-
# --------------------------
# UNPACKING PUPPET MANIFESTS
# --------------------------
# create folders
-mkdir -p /etc/puppet/${OPENSTACK_VERSION}/manifests/
-mkdir -p /etc/puppet/${OPENSTACK_VERSION}/modules/
-rm -rf /etc/puppet/modules/
+#mkdir -p /etc/puppet/${OPENSTACK_VERSION}/manifests/
+#mkdir -p /etc/puppet/${OPENSTACK_VERSION}/modules/
+#rm -rf /etc/puppet/modules/
# TODO(ikalnitsky): investigate why we need this
-cp ${SOURCE}/puppet-slave.tgz ${wwwdir}/
+#cp ${SOURCE}/puppet-slave.tgz ${wwwdir}/
# place modules and manifests
-tar zxf ${SOURCE}/puppet-slave.tgz -C /etc/puppet/${OPENSTACK_VERSION}/modules
-cp /etc/puppet/${OPENSTACK_VERSION}/modules/osnailyfacter/examples/site.pp /etc/puppet/${OPENSTACK_VERSION}/manifests/site.pp
+#tar zxf ${SOURCE}/puppet-slave.tgz -C /etc/puppet/${OPENSTACK_VERSION}/modules
+#cp /etc/puppet/${OPENSTACK_VERSION}/modules/osnailyfacter/examples/site.pp /etc/puppet/${OPENSTACK_VERSION}/manifests/site.pp
cp ${SOURCE}/centos-versions.yaml ${SOURCE}/ubuntu-versions.yaml /etc/puppet/${OPENSTACK_VERSION}/manifests/
# make links for backward compatibility
-pushd /etc/puppet
-ln -s ${OPENSTACK_VERSION}/manifests/ /etc/puppet/manifests
-ln -s ${OPENSTACK_VERSION}/modules/ /etc/puppet/modules
-popd
+#pushd /etc/puppet
+#ln -s ${OPENSTACK_VERSION}/manifests/ /etc/puppet/manifests
+#ln -s ${OPENSTACK_VERSION}/modules/ /etc/puppet/modules
+#popd
cp ${SOURCE}/send2syslog.py /bin/send2syslog.py
mkdir -p /var/lib/hiera
touch /var/lib/hiera/common.yaml /etc/puppet/hiera.yaml
-# Deploy docker images and ctl tools if we built ISO with docker containers support
-[ -d "${SOURCE}/docker" ] && cp -r ${SOURCE}/docker ${wwwdir}/docker
-
# Prepare local repository specification
rm /etc/yum.repos.d/CentOS*.repo
cat > /etc/yum.repos.d/nailgun.repo << EOF
@@ -461,6 +470,24 @@ sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/subscription-manager.conf
# Disable GSSAPI in ssh server config
sed -i -e "/^\s*GSSAPICleanupCredentials yes/d" -e "/^\s*GSSAPIAuthentication yes/d" /etc/ssh/sshd_config
+# Enable MOTD banner in sshd
+sed -i -e "s/^\s*PrintMotd no/PrintMotd yes/g" /etc/ssh/sshd_config
+
+# Add note regarding local repos creation to MOTD
+cat >> /etc/motd << EOF
+
+All environments use online repositories by default.
+Use the following commands to create local repositories
+on master node and change default repository settings:
+
+* CentOS: fuel-package-updates (see --help for options)
+* Ubuntu: fuel-createmirror (see --help for options)
+
+Please refer to the following guide for more information:
+https://docs.mirantis.com/openstack/fuel/fuel-6.1/reference-architecture.html#fuel-rep-mirror
+
+EOF
+
# Copying bootstrap_admin_node.sh, chmod it and
# adding /etc/init/bootstrap_admin_node.conf
cp ${SOURCE}/bootstrap_admin_node.sh /usr/local/sbin/bootstrap_admin_node.sh
@@ -540,10 +567,7 @@ rm -rf ${SOURCE}
umount -f ${FS} || true
rm -rf ${FS}
-# Enabling/configuring NTPD and ntpdate services
-echo "server 127.127.1.0" >> /etc/ntp.conf
-echo "fudge 127.127.1.0 stratum 10" >> /etc/ntp.conf
-echo "tos orphan 7" >> /etc/ntp.conf
+echo "tos orphan 7" >> /etc/ntp.conf
# Do not show error message on ntpdate failure. Customers should not be confused
# if admin node does not have access to the internet time servers.
diff --git a/fuel/build/f_isoroot/f_odlpluginbuild/Makefile b/fuel/build/f_isoroot/f_odlpluginbuild/Makefile
new file mode 100644
index 000000000..ce9cd73e1
--- /dev/null
+++ b/fuel/build/f_isoroot/f_odlpluginbuild/Makefile
@@ -0,0 +1,38 @@
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+
+TOP := $(shell pwd)
+DOCKNAME = fuelrepo
+DOCKVERSION = 1.0
+ODL_BRANCH="juno/lithium-sr1"
+ODL_REPO="https://github.com/stackforge/fuel-plugin-opendaylight.git"
+
+.PHONY: all
+all: .odlbuild
+
+.PHONY: clean
+clean:
+ # Deliberately not cleaning nailgun directory to speed up multiple builds
+ @rm -f ../release/opnfv/opendaylight*.rpm
+
+.PHONY: release
+release:.odlbuild
+ @rm -f ../release/opnfv/opendaylight*.rpm
+ @mkdir -p ../release/opnfv
+ @cp opendaylight*.rpm ../release/opnfv/
+
+.odlbuild:
+ rm -rf fuel-plugin-opendaylight
+ sudo apt-get -y install build-essential ruby-dev rubygems-integration python-pip git rpm createrepo dpkg-dev
+ sudo gem install fpm
+ sudo pip install fuel-plugin-builder
+ git clone -b ${ODL_BRANCH} ${ODL_REPO}
+ INCLUDE_DEPENDENCIES=true fpb --debug --build fuel-plugin-opendaylight/
+ mv fuel-plugin-opendaylight/opendaylight*.rpm .
+ rm -rf fuel-plugin-opendaylight
diff --git a/fuel/build/f_isoroot/f_predeployment/Makefile b/fuel/build/f_isoroot/f_predeployment/Makefile
deleted file mode 100644
index a5252df96..000000000
--- a/fuel/build/f_isoroot/f_predeployment/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:
- @mkdir -p release/opnfv
- @cp pre-deploy.sh release/opnfv
- @cp sysinfo.sh release/opnfv
- @cp transform_yaml.py release/opnfv
- @chmod 755 release/opnfv/*
-
-.PHONY: clean
-clean:
- @rm -rf release
-
-
-.PHONY: release
-release:clean all
- @cp -Rvp release/* ../release
diff --git a/fuel/build/f_isoroot/f_predeployment/README b/fuel/build/f_isoroot/f_predeployment/README
deleted file mode 100644
index 3eef9f216..000000000
--- a/fuel/build/f_isoroot/f_predeployment/README
+++ /dev/null
@@ -1,18 +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 the start of the interactive frontend that will add OPNFV configuration into
-the astute.yaml of the nodes. Currently just a test setup - prepare an installation
-up to the point of "deploy changes", but run "./pre-deploy.sh <envid> fragment.yaml"
-before actually hitting deploy, which will make sure to add the example fragment to
-the nodes.
-
-Note that the only part of the fragment.yaml that actually is acted on is the hosts
-part at this time.
diff --git a/fuel/build/f_isoroot/f_predeployment/pre-deploy.sh b/fuel/build/f_isoroot/f_predeployment/pre-deploy.sh
deleted file mode 100755
index c5c6c42c0..000000000
--- a/fuel/build/f_isoroot/f_predeployment/pre-deploy.sh
+++ /dev/null
@@ -1,401 +0,0 @@
-#!/bin/bash -e
-##############################################################################
-# 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
-##############################################################################
-
-
-error_exit () {
- echo "$@" >&2
- exit 1
-}
-
-get_env() {
- local env_id=${1:-""}
-
- if [ -z $env_id ]; then
- local n_envs=$(fuel env --list | grep -v -E "^id|^--|^ *$" | wc -l)
- if [ $n_envs -ne 1 ]; then
- echo "Usage: $0 [<env-id>]" >&2
- error_exit "If only a single environment is present it can be left" \
- "out. Otherwise the environment must be selected"
- fi
- env_id=$(fuel env --list | grep -v -E "^id|^--" | awk '{print $1}')
- else
- if ! fuel --env $env_id environment 2>/dev/null grep -v -E "^id|^--" | \
- grep -q ^$env_id; then
- error_exit "No such environment ID: $env_id"
- fi
- fi
- echo $env_id
-}
-
-get_node_uid () {
- cat $1 | grep "^uid: " | sed "s/^uid: '//" | sed "s/'$//"
-}
-
-get_node_role () {
- cat $1 | grep "^role: " | sed "s/^role: //"
-}
-
-get_next_cic () {
- file=$1
-
- last=`cat $file | sed 's/.*://' | grep "cic-" | sed 's/cic\-.*sl//' | sort -n | tail -1`
- if [ -z "$last" ]; then
- next=1
- else
- next=$[$last + 2]
- fi
- echo $next
-}
-
-get_next_compute () {
- file=$1
-
- last=`cat $file | sed 's/.*://' | grep "cmp-" | sed 's/cmp\-.*sl//' | sort -n | tail -1`
- if [ -z "$last" ]; then
- next=7
- else
- next=$[$last + 2]
- fi
- echo $next
-}
-
-modify_hostnames () {
- env=$1
- file=$2
- for line in `cat $file`
- do
- old=`echo $line | sed 's/:.*//'`
- new=`echo $line | sed 's/.*://'`
- echo "Applying: $old -> $new"
-
- for dfile in deployment_$env/*.yaml
- do
- sed -i "s/$old/$new/g" $dfile
- done
-
- for pfile in provisioning_$env/*.yaml
- do
- sed -i "s/$old/$new/g" $pfile
- done
- done
-}
-
-setup_hostnames () {
- ENV=$1
- cd ${CONFIGDIR}
- touch hostnames.$ENV
-
- for dfile in deployment_$ENV/*.yaml
- do
- uid=`get_node_uid $dfile`
- hostname=`grep "^node-$uid:" hostnames.$ENV | sed 's/.*://'`
- if [ -z $hostname ]; then
-
- pfile=provisioning_$ENV/node-$uid.yaml
- role=`get_node_role $dfile`
-
- case $role in
- primary-controller)
- hostname="cic-pod0-sh0-sl`get_next_cic hostnames.$ENV`"
- ;;
- controller)
- hostname="cic-pod0-sh0-sl`get_next_cic hostnames.$ENV`"
- ;;
- compute)
- hostname="cmp-pod0-sh0-sl`get_next_compute hostnames.$ENV`"
- ;;
- *)
- echo "Unknown node type for UID $uid"
- exit 1
- ;;
- esac
-
- echo "node-$uid:$hostname" >> hostnames.$ENV
- else
- echo "Already got hostname $hostname for node-$uid"
-
- fi
- done
-
- rm -f hostnames.$ENV.old
- mv hostnames.$ENV hostnames.$ENV.old
- sort hostnames.$ENV.old | uniq > hostnames.$ENV
- modify_hostnames $ENV hostnames.$ENV
-}
-
-
-
-get_provisioning_info () {
- ENV=$1
- mkdir -p ${CONFIGDIR}
- cd ${CONFIGDIR}
- rm -Rf provisioning_$ENV
- echo "Getting provisioning info..."
- fuel --env $ENV provisioning --default
- if [ $? -ne 0 ]; then
- echo "Error: Could not get provisioning info for env $ENV">&2
- exit 1
- fi
-}
-
-get_deployment_info () {
- ENV=$1
- mkdir -p ${CONFIGDIR}
- cd ${CONFIGDIR}
- rm -Rf deployment_$ENV
- echo "Getting deployment info..."
- fuel --env $ENV deployment --default
- if [ $? -ne 0 ]; then
- echo "Error: Could not get deployment info for env $ENV">&2
- exit 1
- fi
-}
-
-transform_yaml () {
- ENV=$1
- cd ${CONFIGDIR}
- for dfile in deployment_$ENV/*.yaml
- do
- /opt/opnfv/transform_yaml.py $dfile
- done
-}
-
-commit_changes () {
- ENV=$1
- cd ${CONFIGDIR}
-
- fuel --env $ENV deployment --upload
- fuel --env $ENV provisioning --upload
-}
-
-add_yaml_fragment () {
- ENV=$1
- FRAGMENT=${CONFIGDIR}/fragment.yaml.$ENV
-
- cd ${CONFIGDIR}
- for dfile in deployment_$ENV/*.yaml
- do
- cnt=`grep "^opnfv:" $dfile | wc -l `
- if [ $cnt -eq 0 ]; then
- echo "Adding fragment to $dfile"
- cat $FRAGMENT >> $dfile
- else
- echo "Already have fragment in $dfile"
- fi
- done
-}
-
-
-ip_valid() {
- IP_ADDRESS="$1"
- # Check if the format looks right_
- echo "$IP_ADDRESS" | egrep -qE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' || return 1
- #check that each octect is less than or equal to 255:
- echo $IP_ADDRESS | awk -F'.' '$1 <=255 && $2 <= 255 && $3 <=255 && $4 <= 255 {print "Y" } ' | grep -q Y || return 1
- return 0
-}
-
-
-generate_ntp_entry() {
- FILE=$1
- read -p "NTP server:" NTP_SERVER
- if [ -z "$NTP_SERVER" ]; then
- return 1
- elif confirm_yes "Are you sure you want to add this entry (y/n): "; then
- echo "Confirmed"
- echo " server $NTP_SERVER" >> $FILE
- fi
-}
-
-generate_hostfile_entry() {
- FILE=$1
- read -p "Name:" HOST_NAME
- if [ -z "$HOST_NAME" ]; then
- return 1
- else
- read -p "FQDN:" HOST_FQDN
- read -p "IP: " HOST_IP
- while ! ip_valid "$HOST_IP"
- do
- echo "This is not a valid IP! Try again."
- read -p "IP: " HOST_IP
- done
- fi
- if confirm_yes "Are you sure you want to add this entry (y/n): "; then
- echo "Confirmed"
- echo " - name: $HOST_NAME" >> $FILE
- echo " address: $HOST_IP" >> $FILE
- echo " fqdn: $HOST_FQDN" >> $FILE
- else
- echo "Not confirmed"
- fi
- return 0
-}
-
-generate_dns_entry() {
- FILE=$1
- PROMPT=$2
- read -p "${PROMPT}:" DNS_IP
- if [ -z "$DNS_IP" ]; then
- return 1
- else
- while ! ip_valid "$DNS_IP"
- do
- echo "This is not a valid IP! Try again."
- read -p "${PROMPT}: " DNS_IP
- done
- fi
- if confirm_yes "Are you sure you want to add this entry (y/n): "; then
- echo "Confirmed"
- echo " - $DNS_IP" >> $FILE
- else
- echo "Not confirmed"
- fi
- return 0
-}
-
-confirm_yes() {
- prompt=$1
- while true
- do
- read -p "$prompt" YESNO
- case $YESNO in
- [Yy])
- return 0
- ;;
- [Nn])
- return 1
- ;;
- esac
- done
-}
-
-generate_yaml_fragment() {
- ENV=$1
- FRAGMENT=${CONFIGDIR}/fragment.yaml.$ENV
-
- if [ -f $FRAGMENT ]; then
- echo "Manual configuration already performed, reusing previous data from $FRAGMENT."
- echo "Press return to continue or ^C to stop."
- read ans
- return
- fi
-
- echo "opnfv:" > ${FRAGMENT}
-
- clear
- echo -e "\n\nPre-deployment configuration\n\n"
-
- echo -e "\n\nIPs for the DNS servers to go into /etc/resolv.conf. You will be"
- echo -e "prompted for one IP at the time. Press return on an empty line"
- echo -e "to complete your input. If no DNS server is specified, the IP of"
- echo -e "the Fuel master will be used instead.\n"
-
- DNSCICYAML=${CONFIGDIR}/cicdns.yaml.$ENV
- rm -f $DNSCICYAML
-
- echo -e "\n\n"
-
- while generate_dns_entry $DNSCICYAML "IP for CIC name servers"
- do
- :
- done
-
- if [ -f $DNSCICYAML ]; then
- echo " dns:" >> $FRAGMENT
- echo " controller:" >> $FRAGMENT
- cat $DNSCICYAML >> $FRAGMENT
- fi
-
-
- DNSCMPYAML=${CONFIGDIR}/cmpdns.yaml.$ENV
- rm -f $DNSCMPYAML
-
- echo -e "\n\n"
-
- while generate_dns_entry $DNSCMPYAML "IP for compute node name servers"
- do
- :
- done
-
-
- if [ -f $DNSCMPYAML ]; then
- if [ ! -f $DNSCICYAML ]; then
- echo " dns:" >> $FRAGMENT
- fi
- echo " compute:" >> $FRAGMENT
- cat $DNSCMPYAML >> $FRAGMENT
- fi
-
- echo -e "\n\nHosts file additions for controllers and compute nodes. You will be"
- echo -e "prompted for name, FQDN and IP for each entry. Press return when prompted"
- echo -e "for a name when you have completed your input.\n"
-
-
- HOSTYAML=${CONFIGDIR}/hosts.yaml.$ENV
- rm -f $HOSTYAML
- while generate_hostfile_entry $HOSTYAML
- do
- :
- done
-
- if [ -f $HOSTYAML ]; then
- echo " hosts:" >> $FRAGMENT
- cat $HOSTYAML >> $FRAGMENT
- fi
-
- echo -e "\n\nNTP upstream configuration for controllers.You will be"
- echo -e "prompted for a NTP server each entry. Press return when prompted"
- echo -e "for a NTP serverwhen you have completed your input.\n"
-
-
- NTPYAML=${CONFIGDIR}/ntp.yaml.$ENV
- rm -f $NTPYAML
- while generate_ntp_entry $NTPYAML
- do
- :
- done
-
- if [ -f $NTPYAML ]; then
- echo " ntp:" >> $FRAGMENT
- echo " controller: |" >> $FRAGMENT
- cat $NTPYAML >> $FRAGMENT
-
- echo " compute: |" >> $FRAGMENT
- for ctl in `find $CONFIGDIR/deployment_$ENV -name '*controller*.yaml'`
- do
- fqdn=`grep "^fqdn:" $ctl | sed 's/fqdn: *//'`
- echo " server $fqdn" >> $FRAGMENT
- done
- fi
-
- # If nothing added make sure we get an empty opnfv hash
- # instead of a NULL hash.
- if [ $(wc -l $FRAGMENT | awk '{print $1}') -le 1 ]; then
- echo "opnfv: {}" >$FRAGMENT
- fi
-}
-
-ENV=$(get_env "$@")
-
-CONFIGDIR="/var/lib/opnfv"
-mkdir -p $CONFIGDIR
-
-get_deployment_info $ENV
-# Uncomment the below to enable the control_bond example
-#transform_yaml $ENV
-get_provisioning_info $ENV
-generate_yaml_fragment $ENV
-# The feature to change hostnames from node-<n> to cmp- or cic- is disabled.
-# To turn it on, uncomment the following line.
-#setup_hostnames $ENV
-add_yaml_fragment $ENV
-commit_changes $ENV
diff --git a/fuel/build/f_isoroot/f_predeployment/sysinfo.sh b/fuel/build/f_isoroot/f_predeployment/sysinfo.sh
deleted file mode 100755
index e99cac039..000000000
--- a/fuel/build/f_isoroot/f_predeployment/sysinfo.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-##############################################################################
-# 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
-##############################################################################
-
-dockerctl shell cobbler cobbler system list | grep -v default | xargs -n 1 host | sort | sed 's/\..* /\t/'
diff --git a/fuel/build/f_isoroot/f_predeployment/transform_yaml.py b/fuel/build/f_isoroot/f_predeployment/transform_yaml.py
deleted file mode 100755
index 14eec4cc6..000000000
--- a/fuel/build/f_isoroot/f_predeployment/transform_yaml.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/python
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-# stefan.k.berg@ericsson.com
-# jonas.bjurel@ericsson.com
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Remove control and management network transformations from file.
-# Only to be used together with f_control_bond_example (enable in
-# pre-deploy.sh)
-
-import yaml
-import re
-import sys
-import os
-
-if len(sys.argv) != 2:
- sys.stderr.write("Usage: "+sys.argv[0]+" <filename>\n")
- sys.exit(1)
-
-filename = sys.argv[1]
-if not os.path.exists(filename):
- sys.stderr.write("ERROR: The file "+filename+" could not be opened\n")
- sys.exit(1)
-
-ignore_values = [ "eth0", "eth1", "br-mgmt", "br-fw-admin" ]
-
-infile = open(filename, 'r')
-doc = yaml.load(infile)
-infile.close()
-
-out={}
-
-for scheme in doc:
- if scheme == "network_scheme":
- mytransformation = {}
- for operation in doc[scheme]:
- if operation == "transformations":
- # We need the base bridges for l23network to be happy,
- # remove everything else.
- mytrans = [ { "action": "add-br", "name": "br-mgmt" },
- { "action": "add-br", "name": "br-fw-admin" } ]
- for trans in doc[scheme][operation]:
- delete = 0
- for ignore in ignore_values:
- matchObj = re.search(ignore,str(trans))
- if matchObj:
- delete = 1
- if delete == 0:
- mytrans.append(trans)
- else:
- pass
- #print "Deleted", trans
-
- mytransformation[operation] = mytrans
- else:
- mytransformation[operation] = doc[scheme][operation]
- out[scheme] = mytransformation
- else:
- out[scheme] = doc[scheme]
-
-outfile = open(filename, 'w')
-outfile.write(yaml.dump(out, default_flow_style=False))
-outfile.close()
diff --git a/fuel/build/f_isoroot/f_repobuild/Makefile b/fuel/build/f_isoroot/f_repobuild/Makefile
new file mode 100644
index 000000000..6bfbd35c1
--- /dev/null
+++ b/fuel/build/f_isoroot/f_repobuild/Makefile
@@ -0,0 +1,56 @@
+##############################################################################
+# 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
+##############################################################################
+
+SHELL := /bin/bash
+TOP := $(shell pwd)
+DOCKNAME = fuelrepo
+DOCKVERSION = 1.0
+
+# try to choose close ubuntu mirror which support rsync protocol
+# https://bugs.launchpad.net/fuel/+bug/1459252
+MIRROR_URLS := $(shell curl -s http://mirrors.ubuntu.com/mirrors.txt)
+MIRROR_HOSTS := $(shell for url in ${MIRROR_URLS}; do echo $$url | cut -d'/' -f3; done)
+RSYNC_HOST := $(shell for host in ${MIRROR_HOSTS}; do rsync -4 --contimeout 5 --no-motd --list-only "$${host}::ubuntu/." &> /dev/null && echo $$host && break; done)
+
+.PHONY: all
+all: .nailgun
+
+.nailgun:
+ sudo apt-get update
+ sudo apt-get upgrade -y
+ sudo apt-get install -y rsync python python-yaml dpkg-dev openssl
+ rm -rf tmpiso tmpdir
+ mkdir tmpiso
+ fuseiso ${ISOCACHE} tmpiso
+ cp tmpiso/ubuntu/pool/main/f/fuel-createmirror/fuel-createmirror_6.1*.deb .
+ fusermount -u tmpiso
+ rm -rf tmpiso
+ sudo dpkg -i fuel-createmirror_6.1*.deb
+ sudo sed -i 's/DOCKER_MODE=true/DOCKER_MODE=false/' /etc/fuel-createmirror/common.cfg
+ sudo sed -i 's/DEBUG="no"/DEBUG="yes"/' /etc/fuel-createmirror/ubuntu.cfg
+ sudo sed -i 's/MIRROR_UBUNTU_HOST="archive.ubuntu.com"/MIRROR_UBUNTU_HOST="${RSYNC_HOST}"/' /etc/fuel-createmirror/common.cfg
+ rm -Rf nailgun
+ sudo mkdir -p /var/www
+ sudo su - -c /opt/fuel-createmirror-6.1/fuel-createmirror
+ sudo chmod -R 755 /var/www/nailgun
+ cp -Rp /var/www/nailgun .
+ touch .nailgun
+
+.PHONY: clean
+clean:
+ # Deliberately not cleaning nailgun directory to speed up multiple builds
+ @rm -rf ../release/opnfv/nailgun fuel-createmirror_6.1*.deb
+
+.PHONY: release
+release:.nailgun
+ @rm -Rf ../release/opnfv/nailgun
+ @mkdir -p ../release/opnfv
+ @cp -Rp nailgun ../release/opnfv/nailgun
+
diff --git a/fuel/build/f_l23network/Makefile b/fuel/build/f_l23network/Makefile
deleted file mode 100644
index 0949737bc..000000000
--- a/fuel/build/f_l23network/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/fuel/build/f_l23network/README b/fuel/build/f_l23network/README
deleted file mode 100644
index 9aa4718a2..000000000
--- a/fuel/build/f_l23network/README
+++ /dev/null
@@ -1,35 +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
-##############################################################################
-
-Addition to add entries to /etc/hosts through Astute.
-
-The astute.yaml file should contain entries as those below to have them picked up during deployment:
-
-opnfv:
- hosts:
- - name: test1
- address: 192.168.100.100
- fqdn: test1.opnfv.org
- - name: test2
- address: 192.168.100.101
- fqdn: test2.opnfv.org
- - name: test3
- address: 192.168.100.102
- fqdn: test3.opnfv.org
-
-The suggested method for adding this information is to prepare for deployment with the Fuel GUI or CLI,
-but before actually deploying:
-
-1. Download the current deployment for all hosts: fuel --env 1 deployment --default
-2. Iterate through the hosts in "deployment_1" and add hosts configuration in the above format to their
- respective yaml file.
-3. Upload the modifed deployment information: fuel --env 1 deployment --upload
-
-After deploying, the additions will be included in /etc/astute.yaml of each host.
diff --git a/fuel/build/f_l23network/puppet/modules/l23network/lib/puppet/parser/functions/extras_to_hosts.rb b/fuel/build/f_l23network/puppet/modules/l23network/lib/puppet/parser/functions/extras_to_hosts.rb
deleted file mode 100644
index 33bfad8fd..000000000
--- a/fuel/build/f_l23network/puppet/modules/l23network/lib/puppet/parser/functions/extras_to_hosts.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# array_or_string_to_array.rb
-#
-
-module Puppet::Parser::Functions
- newfunction(:extras_to_hosts, :type => :rvalue, :doc => <<-EOS
- convert extras array passed from Astute into
- hash for puppet `host` create_resources call
- EOS
- ) do |args|
- hosts=Hash.new
- extras=args[0]
- extras.each do |extras|
- hosts[extras['name']]={:ip=>extras['address'],:host_aliases=>[extras['fqdn']]}
- notice("Generating extras host entry #{extras['name']} #{extras['address']} #{extras['fqdn']}")
- end
- return hosts
- end
-end
-
-# vim: set ts=2 sw=2 et :
diff --git a/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp b/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp
deleted file mode 100644
index 05cff8d60..000000000
--- a/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp
+++ /dev/null
@@ -1,18 +0,0 @@
-class l23network::hosts_file (
- $nodes,
- $extras=[],
- $hosts_file = "/etc/hosts"
-) {
-
- # OPNFV addition: Add additional lines in /etc/hosts through Astute additions
-
- $host_resources = nodes_to_hosts($nodes)
- $extras_host_resources = extras_to_hosts($extras)
- Host {
- ensure => present,
- target => $hosts_file
- }
-
- create_resources(host, $host_resources)
- create_resources(host, $extras_host_resources)
-}
diff --git a/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp.orig b/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp.orig
deleted file mode 100644
index 2295e3f9a..000000000
--- a/fuel/build/f_l23network/puppet/modules/l23network/manifests/hosts_file.pp.orig
+++ /dev/null
@@ -1,16 +0,0 @@
-class l23network::hosts_file (
- $nodes,
- $hosts_file = "/etc/hosts"
-) {
-
- #Move original hosts file
-
- $host_resources = nodes_to_hosts($nodes)
-
- Host {
- ensure => present,
- target => $hosts_file
- }
-
- create_resources(host, $host_resources)
-}
diff --git a/fuel/build/f_l23network/testing/README b/fuel/build/f_l23network/testing/README
deleted file mode 100644
index b68eddf22..000000000
--- a/fuel/build/f_l23network/testing/README
+++ /dev/null
@@ -1,12 +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
-##############################################################################
-
-In order to test the functionality without performing a full deployment, run "puppet apply" on the fake_init.pp
-which will call only the l23network::hosts_file class.
diff --git a/fuel/build/f_l23network/testing/fake_init.pp b/fuel/build/f_l23network/testing/fake_init.pp
deleted file mode 100644
index bc6b163f9..000000000
--- a/fuel/build/f_l23network/testing/fake_init.pp
+++ /dev/null
@@ -1,13 +0,0 @@
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-if $::fuel_settings['nodes'] {
- $nodes_hash = $::fuel_settings['nodes']
- $extras_hash = $::fuel_settings['opnfv']['hosts']
-
- class {'l23network::hosts_file':
- nodes => $nodes_hash,
- extras => $extras_hash
- }
-
- include l23network::hosts_file
-}
diff --git a/fuel/build/f_ntp/Makefile b/fuel/build/f_ntp/Makefile
deleted file mode 100644
index 0949737bc..000000000
--- a/fuel/build/f_ntp/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/fuel/build/f_ntp/README b/fuel/build/f_ntp/README
deleted file mode 100644
index 2bade72d6..000000000
--- a/fuel/build/f_ntp/README
+++ /dev/null
@@ -1,33 +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
-##############################################################################
-
-Addition to add ntp.conf separately for compute hosts and controller hosts through Astute.
-
-The astute.yaml file should contain entries as those below to have them picked up during deployment:
-
-opnfv:
- ntp:
- controller: |
- line 1
- line 2
- compute: |
- line 1
- line 2
-
-The suggested method for adding this information is to prepare for deployment with the Fuel GUI or CLI,
-but before actually deploying:
-
-1. Download the current deployment for all hosts: fuel --env 1 deployment --default
-2. Iterate through the hosts in "deployment_1" and add hosts configuration in the above format to their
- respective yaml file.
-3. Upload the modifed deployment information: fuel --env 1 deployment --upload
-
-After deploying, the additions will be included in /etc/astute.yaml of each host.
-
diff --git a/fuel/build/f_ntp/puppet/modules/opnfv/manifests/ntp.pp b/fuel/build/f_ntp/puppet/modules/opnfv/manifests/ntp.pp
deleted file mode 100644
index c5dce1be0..000000000
--- a/fuel/build/f_ntp/puppet/modules/opnfv/manifests/ntp.pp
+++ /dev/null
@@ -1,80 +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: Ntp
-#
-# Add Ntp content passed through astute.yaml into ntp.conf depending on the role
-#
-# Suitable yaml content:
-# <begin>
-# opnfv:
-# ntp:
-# controller: |
-# line 1
-# line 2
-# compute: |
-# line 1
-# line 2
-# <end>
-#
-#
-#
-
-class opnfv::ntp(
- $file='/etc/ntp.conf'
-) {
-
- case $::operatingsystem {
- centos, redhat: {
- $service_name = 'ntpd'
- }
- debian, ubuntu: {
- $service_name = 'ntp'
- }
- }
-
- if $::fuel_settings['role'] {
- if ($::fuel_settings['opnfv'] and
- $::fuel_settings['opnfv']['ntp']) {
- case $::fuel_settings['role'] {
- /controller/: {
- if $::fuel_settings['opnfv']['ntp']['controller'] {
- $template = 'opnfv/ntp.conf.controller.erb'
- $file_content = $::fuel_settings['opnfv']['ntp']['controller']
- }
- }
- /compute/: {
- if $::fuel_settings['opnfv']['ntp']['compute'] {
- $template = 'opnfv/ntp.conf.compute.erb'
- $file_content = $::fuel_settings['opnfv']['ntp']['compute']
- }
- }
- }
- }
- }
-
- if $file_content {
- package { 'ntp':
- ensure => installed,
- }
-
- file { $file:
- content => template($template),
- notify => Service['ntp'],
- }
-
- service { 'ntp':
- ensure => running,
- name => $service_name,
- enable => true,
- require => [ Package['ntp'], File[$file]]
- }
- }
-}
diff --git a/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.compute.erb b/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.compute.erb
deleted file mode 100644
index 37ecfd72d..000000000
--- a/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.compute.erb
+++ /dev/null
@@ -1,21 +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
-##############################################################################
-
-tinker panic 0
-driftfile /var/lib/ntp/ntp.drift
-statistics loopstats peerstats clockstats
-filegen loopstats file loopstats type day enable
-filegen peerstats file peerstats type day enable
-filegen clockstats file clockstats type day enable
-restrict -4 default kod notrap nomodify nopeer noquery
-restrict -6 default kod notrap nomodify nopeer noquery
-restrict 127.0.0.1
-restrict ::1
-<%= @file_content %>
diff --git a/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.controller.erb b/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.controller.erb
deleted file mode 100644
index 37ecfd72d..000000000
--- a/fuel/build/f_ntp/puppet/modules/opnfv/templates/ntp.conf.controller.erb
+++ /dev/null
@@ -1,21 +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
-##############################################################################
-
-tinker panic 0
-driftfile /var/lib/ntp/ntp.drift
-statistics loopstats peerstats clockstats
-filegen loopstats file loopstats type day enable
-filegen peerstats file peerstats type day enable
-filegen clockstats file clockstats type day enable
-restrict -4 default kod notrap nomodify nopeer noquery
-restrict -6 default kod notrap nomodify nopeer noquery
-restrict 127.0.0.1
-restrict ::1
-<%= @file_content %>
diff --git a/fuel/build/f_ntp/testing/README b/fuel/build/f_ntp/testing/README
deleted file mode 100644
index 6d80b0a94..000000000
--- a/fuel/build/f_ntp/testing/README
+++ /dev/null
@@ -1,12 +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
-##############################################################################
-
-In order to test the functionality without performing a full deployment, run "puppet apply" on the
-fake_init.pp which will call only the opnfv::ntp class.
diff --git a/fuel/build/f_ntp/testing/fake_init.pp b/fuel/build/f_ntp/testing/fake_init.pp
deleted file mode 100644
index b9af21836..000000000
--- a/fuel/build/f_ntp/testing/fake_init.pp
+++ /dev/null
@@ -1,13 +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
-##############################################################################
-
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-include opnfv::ntp
diff --git a/fuel/build/f_odl_docker/Makefile b/fuel/build/f_odl_docker/Makefile
deleted file mode 100755
index 6135e71e5..000000000
--- a/fuel/build/f_odl_docker/Makefile
+++ /dev/null
@@ -1,51 +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)
-BUILDTAG := loving_daniel
-
-# Edit this to match the GENESIS / OPNFV in your environment
-export OPNFV_PUPPET := $(BUILD_BASE)/../../common/puppet-opnfv
-include ../config.mk
-
-.PHONY: all
-all:
- @mkdir -p puppet/modules/opnfv/odl_docker
- @rm -rf tmp
- @mkdir -p tmp
- @cp -Rvp ${OPNFV_PUPPET}/manifests/templates/dockerfile tmp/.
- @docker build -t ${BUILDTAG} tmp/dockerfile/.
- @docker save ${BUILDTAG} > puppet/modules/opnfv/odl_docker/odl_docker_image.tar
- @wget ${DOCKER_REPO}/${DOCKER_TAG} -O puppet/modules/opnfv/odl_docker/docker-latest
- @echo "OPFNV_PUPPET is: ${OPNFV_PUPPET}"
- @cp -Rvp ${OPNFV_PUPPET}/manifests/templates/dockerfile/container_scripts puppet/modules/opnfv
-
-.PHONY: clean
-clean:
- @rm -rf tmp
- @rm -rf release
-
-.PHONY: build-clean
-build-clean:
- @rm -rf tmp
- @rm -rf release
- @rm -rf puppet/modules/opnfv/odl_docker/odl_docker_image.tar
- @rm -rf puppet/modules/opnfv/odl_docker/docker-latest
-
-.PHONY: validate-cache
-validate-cache:
- @echo "No cache validation schema available for $(shell pwd)"
- @echo "Continuing ..."
-
-.PHONY: release
-release:
- # Fetch PP from OPNFV Common
- @cp -Rvp ${OPNFV_PUPPET}/manifests/odl_docker.pp ${PUPPET_DEST}
- @cp -Rvp puppet/modules/* $(PUPPET_DEST)
diff --git a/fuel/build/f_odl_docker/dockerfile/Dockerfile b/fuel/build/f_odl_docker/dockerfile/Dockerfile
deleted file mode 100755
index e3c7ee5fe..000000000
--- a/fuel/build/f_odl_docker/dockerfile/Dockerfile
+++ /dev/null
@@ -1,72 +0,0 @@
-####################################################################
-#
-# Dockerfile to build a ODL (Karaf) Docker Container
-#
-# Copyright daniel.smith@ericsson.com
-# License: Apache GPL
-#
-####################################################################
-
-
-#Set the base image - note: the current release of Karaf is using Jdk7 and alot of 12.04, so we will use it rather than 14.04 and backport a ton of stuff
-FROM ubuntu:12.04
-
-# Maintainer Info
-MAINTAINER Daniel Smith
-
-#Run apt-get update one start just to check for updates when building
-RUN echo "Updating APT"
-RUN apt-get update
-RUN echo "Adding wget"
-RUN apt-get install -y wget
-RUN apt-get install -y net-tools
-RUN apt-get install -y openjdk-7-jre
-RUN apt-get install -y openjdk-7-jdk
-RUN apt-get install -y openssh-server
-RUN apt-get install -y vim
-RUN apt-get install -y expect
-RUN apt-get install -y daemontools
-RUN mkdir -p /opt/odl_source
-RUN bash -c 'echo "export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64" >> ~/.bashrc'
-
-
-#Now lets got and fetch the ODL distribution
-RUN echo "Fetching ODL"
-RUN wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.3-Helium-SR3/distribution-karaf-0.2.3-Helium-SR3.tar.gz -O /opt/odl_source/distribution-karaf-0.2.3-Helium-SR3.tar.gz
-
-RUN echo "Untarring ODL inplace"
-RUN mkdir -p /opt/odl
-RUN tar zxvf /opt/odl_source/distribution-karaf-0.2.3-Helium-SR3.tar.gz -C /opt/odl
-
-RUN echo "Installing DLUX and other features into ODL"
-COPY tmp/dockerfile/container_scripts/start_odl_docker.sh /etc/init.d/start_odl_docker.sh
-COPY tmp/dockerfile/container_scripts/speak.sh /etc/init.d/speak.sh
-RUN chmod 777 /etc/init.d/start_odl_docker.sh
-RUN chmod 777 /etc/init.d/speak.sh
-
-
-# Expose the ports
-# PORTS FOR BASE SYSTEM AND DLUX
-EXPOSE 8101
-EXPOSE 6633
-EXPOSE 1099
-EXPOSE 43506
-EXPOSE 8181
-EXPOSE 8185
-EXPOSE 9000
-EXPOSE 39378
-EXPOSE 33714
-EXPOSE 44444
-EXPOSE 6653
-
-# PORTS FOR OVSDB AND ODL CONTROL
-EXPOSE 12001
-EXPOSE 6640
-EXPOSE 8080
-EXPOSE 7800
-EXPOSE 55130
-EXPOSE 52150
-EXPOSE 36826
-
-# set the ENTRYPOINT - An entry point allows us to run this container as an exectuable
-CMD ["/etc/init.d/start_odl_docker.sh"]
diff --git a/fuel/build/f_odl_docker/dockerfile/container_scripts/check_feature.sh b/fuel/build/f_odl_docker/dockerfile/container_scripts/check_feature.sh
deleted file mode 100755
index 3e5d0b2bb..000000000
--- a/fuel/build/f_odl_docker/dockerfile/container_scripts/check_feature.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/expect
-spawn /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/client
-expect "root>"
-send "feature:list | grep -i odl-restconf\r"
-send "\r\r\r"
-expect "root>"
-send "logout\r"
-
diff --git a/fuel/build/f_odl_docker/dockerfile/container_scripts/speak.sh b/fuel/build/f_odl_docker/dockerfile/container_scripts/speak.sh
deleted file mode 100755
index 3ba07a844..000000000
--- a/fuel/build/f_odl_docker/dockerfile/container_scripts/speak.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/expect
-# Ericsson Research Canada
-#
-# Author: Daniel Smith <daniel.smith@ericsson.com>
-#
-# Simple expect script to start up ODL client and load feature set for DLUX and OVSDB
-#
-# NOTE: THIS WILL BE REPLACED WITH A PROGRAMATIC METHOD SHORTLY
-# DEPRECATED AFTER ARNO
-
-spawn /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/client
-expect "root>"
-send "feature:install odl-base-all odl-aaa-authn odl-restconf odl-nsf-all odl-adsal-northbound odl-mdsal-apidocs odl-ovsdb-openstack odl-ovsdb-northbound odl-dlux-core"
-send "\r\r\r"
-expect "root>"
-send "logout\r"
-
diff --git a/fuel/build/f_odl_docker/dockerfile/container_scripts/start_odl_docker.sh b/fuel/build/f_odl_docker/dockerfile/container_scripts/start_odl_docker.sh
deleted file mode 100755
index 1c72dda52..000000000
--- a/fuel/build/f_odl_docker/dockerfile/container_scripts/start_odl_docker.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-# Ericsson Research Canada
-#
-# Author: Daniel Smith <daniel.smith@ericsson.com>
-#
-# Start up script for calling karaf / ODL inside a docker container.
-#
-# This script will also call a couple expect scripts to load the feature set that we want
-
-
-#ENV
-export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
-
-#MAIN
-echo "Starting up the da Sheilds..."
-/opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/karaf server &
-echo "Sleeping 5 bad hack"
-sleep 10
-echo "should see stuff listening now"
-netstat -na
-echo " should see proess running for karaf"
-ps -efa
-echo " Starting the packages we want"
-/etc/init.d/speak.sh
-echo "Printout the status - if its right, you should see 8181 appear now"
-netstat -na
-ps -efa
-
-
-
-## This is a loop that keeps our container going currently, prinout the "status of karaf" to the docker logs every minute
-## Cheap - but effective
-while true;
-do
- echo "Checking status of ODL:"
- /opt/odl/distribution-karaf-0.2.3-Helium-SR3/bin/status
- sleep 60
-done
diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp b/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp
deleted file mode 100644
index c286127a4..000000000
--- a/fuel/build/f_odl_docker/puppet/modules/opnfv/manifests/odl_docker.pp
+++ /dev/null
@@ -1,77 +0,0 @@
-class opnfv::odl_docker
-{
- case $::fuel_settings['role'] {
- /controller/: {
-
- file { '/opt':
- ensure => 'directory',
- }
-
- file { '/opt/opnfv':
- ensure => 'directory',
- owner => 'root',
- group => 'root',
- mode => 777,
- }
-
- file { '/opt/opnfv/odl':
- ensure => 'directory',
- }
-
- file { '/opt/opnfv/odl/odl_docker_image.tar':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/odl_docker/odl_docker_image.tar',
- mode => 750,
- }
-
- file { '/opt/opnfv/odl/docker-latest':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/odl_docker/docker-latest',
- mode => 750,
- }
-
- file { '/opt/opnfv/odl/start_odl_conatiner.sh':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/scripts/start_odl_container.sh',
- mode => 750,
- }
- file { '/opt/opnfv/odl/stage_odl.sh':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/scripts/stage_odl.sh',
- mode => 750,
- }
- file { '/opt/opnfv/odl/config_net_odl.sh':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/scripts/config_net_odl.sh',
- mode => 750,
- }
- file { '/opt/opnfv/odl/change.sh':
- ensure => present,
- source => '/etc/puppet/modules/opnfv/scripts/change.sh',
- mode => 750,
- }
-
-
- # fix failed to find the cgroup root issue
- # https://github.com/docker/docker/issues/8791
- case $::operatingsystem {
- 'ubuntu': {
- package {'cgroup-lite':
- ensure => present,
- }
-
- service {'cgroup-lite':
- ensure => running,
- enable => true,
- require => Package['cgroup-lite'],
- }
- }
- 'centos': {
- package {'docker-io':
- ensure => latest,
- }
- }
- }
- }
- }
-}
diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/change.sh b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/change.sh
deleted file mode 100644
index f7f3d6e78..000000000
--- a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/change.sh
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/bin/bash
-# script to remove bridges and reset networking for ODL
-
-
-#VARS
-MODE=0
-DNS=8.8.8.8
-
-#ENV
-source ~/openrc
-
-# GET IPS for that node
-function get_ips {
- BR_MGMT=`grep address /etc/network/ifcfg_backup/ifcfg-br-mgmt | awk -F" " '{print $2}'`
- BR_STORAGE=`grep address /etc/network/ifcfg_backup/ifcfg-br-storage | awk -F" " '{print $2}'`
- BR_FW_ADMIN=`grep address /etc/network/ifcfg_backup/ifcfg-br-fw-admin | awk -F" " '{print $2}'`
- BR_EX=`grep address /etc/network/ifcfg_backup/ifcfg-br-ex | awk -F" " '{print $2}'`
- DEF_NETMASK=255.255.255.0
- DEF_GW=172.30.9.1
-}
-
-function backup_ifcfg {
- echo " backing up "
- mkdir -p /etc/network/ifcfg_backup
- mv /etc/network/interfaces.d/ifcfg-br-ex /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-br-fw-admin /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-br-mgmt /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-br-storage /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-br-prv /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-eth0 /etc/network/ifcfg_backup/.
- mv /etc/network/interfaces.d/ifcfg-eth1 /etc/network/ifcfg_backup/.
- rm -rf /etc/network/interfaces.d/ifcfg-eth1.300
- rm -rf /etc/network/interfaces.d/ifcfg-eth1.301
- rm -rf /etc/network/interfaces.d/ifcfg-eth1
- rm -rf /etc/network/interfaces.d/ifcfg-eth0
-
-}
-
-
-function create_ifcfg_br_mgmt {
- echo "migrating br_mgmt"
- echo "auto eth1.300" >> /etc/network/interfaces.d/ifcfg-eth1.300
- echo "iface eth1.300 inet static" >> /etc/network/interfaces.d/ifcfg-eth1.300
- echo " address $BR_MGMT" >> /etc/network/interfaces.d/ifcfg-eth1.300
- echo " netmask $DEF_NETMASK" >> /etc/network/interfaces.d/ifcfg-eth1.300
-}
-
-function create_ifcfg_br_storage {
- echo "migration br_storage"
- echo "auto eth1.301" >> /etc/network/interfaces.d/ifcfg-eth1.301
- echo "iface eth1.301 inet static" >> /etc/network/interfaces.d/ifcfg-eth1.301
- echo " address $BR_STORAGE" >> /etc/network/interfaces.d/ifcfg-eth1.301
- echo " netmask $DEF_NETMASK" >> /etc/network/interfaces.d/ifcfg-eth1.301
-}
-
-function create_ifcfg_br_fw_admin {
- echo " migratinng br_fw_admin"
- echo "auto eth1" >> /etc/network/interfaces.d/ifcfg-eth1
- echo "iface eth1 inet static" >> /etc/network/interfaces.d/ifcfg-eth1
- echo " address $BR_FW_ADMIN" >> /etc/network/interfaces.d/ifcfg-eth1
- echo " netmask $DEF_NETMASK" >> /etc/network/interfaces.d/ifcfg-eth1
-}
-
-function create_ifcfg_eth0 {
- echo "migratinng br-ex to eth0 - temporarily"
- echo "auto eth0" >> /etc/network/interfaces.d/ifcfg-eth0
- echo "iface eth0 inet static" >> /etc/network/interfaces.d/ifcfg-eth0
- echo " address $BR_EX" >> /etc/network/interfaces.d/ifcfg-eth0
- echo " netmask $DEF_NETMASK" >> /etc/network/interfaces.d/ifcfg-eth0
- echo " gateway $DEF_GW" >> /etc/network/interfaces.d/ifcfg-eth0
-}
-
-function set_mode {
- if [ -d "/var/lib/glance/images" ]
- then
- echo " controller "
- MODE=0
- else
- echo " compute "
- MODE=1
- fi
-}
-
-
-function stop_ovs {
- echo "Stopping OpenVSwitch"
- service openvswitch-switch stop
-
-}
-
-function start_ovs {
- echo "Starting OVS"
- service openvswitch-switch start
- ovs-vsctl show
-}
-
-
-function clean_ovs {
- echo "cleaning OVS DB"
- stop_ovs
- rm -rf /var/log/openvswitch/*
- mkdir -p /opt/opnfv/odl/ovs_back
- cp -pr /etc/openvswitch/* /opt/opnfv/odl/ovs_back/.
- rm -rf /etc/openvswitch/conf.db
- echo "restarting OVS - you should see Nothing there"
- start_ovs
-}
-
-
-
-function reboot_me {
- reboot
-}
-
-function allow_challenge {
- sed -i -e 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
- service ssh restart
-}
-
-function clean_neutron {
- subnets=( `neutron subnet-list | awk -F" " '{print $2}' | grep -v id | sed '/^$/d'` )
- networks=( `neutron net-list | awk -F" " '{print $2}' | grep -v id | sed '/^$/d'` )
- ports=( `neutron port-list | awk -F" " '{print $2}' | grep -v id | sed '/^$/d'` )
- routers=( `neutron router-list | awk -F" " '{print $2}' | grep -v id | sed '/^$/d'` )
-
- #display all elements
- echo "SUBNETS: ${subnets[@]} "
- echo "NETWORKS: ${networks[@]} "
- echo "PORTS: ${ports[@]} "
- echo "ROUTERS: ${routers[@]} "
-
-
- # get port and subnet for each router
- for i in "${routers[@]}"
- do
- routerport=( `neutron router-port-list $i | awk -F" " '{print $2}' | grep -v id | sed '/^$/d' `)
- routersnet=( `neutron router-port-list $i | awk -F" " '{print $8}' | grep -v fixed | sed '/^$/d' | sed 's/,$//' | sed -e 's/^"//' -e 's/"$//' `)
- done
-
- echo "ROUTER PORTS: ${routerport[@]} "
- echo "ROUTER SUBNET: ${routersnet[@]} "
-
- #remove router subnets
- echo "router-interface-delete"
- for i in "${routersnet[@]}"
- do
- neutron router-interface-delete ${routers[0]} $i
- done
-
- #remove subnets
- echo "subnet-delete"
- for i in "${subnets[@]}"
- do
- neutron subnet-delete $i
- done
-
- #remove nets
- echo "net-delete"
- for i in "${networks[@]}"
- do
- neutron net-delete $i
- done
-
- #remove routers
- echo "router-delete"
- for i in "${routers[@]}"
- do
- neutron router-delete $i
- done
-
- #remove ports
- echo "port-delete"
- for i in "${ports[@]}"
- do
- neutron port-delete $i
- done
-
- #remove subnets
- echo "subnet-delete second pass"
- for i in "${subnets[@]}"
- do
- neutron subnet-delete $i
- done
-
-}
-
-function set_dns {
- sed -i -e 's/nameserver 10.20.0.2/nameserver $DNS/g' /etc/resolv.conf
-}
-
-
-#OUTPUT
-
-function check {
- echo $BR_MGMT
- echo $BR_STORAGE
- echo $BR_FW_ADMIN
- echo $BR_EX
-}
-
-### MAIN
-
-
-set_mode
-backup_ifcfg
-get_ips
-create_ifcfg_br_mgmt
-create_ifcfg_br_storage
-create_ifcfg_br_fw_admin
-if [ $MODE == "0" ]
-then
- create_ifcfg_eth0
-fi
-allow_challenge
-clean_ovs
-check
-reboot_me
-
-
diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/config_net_odl.sh b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/config_net_odl.sh
deleted file mode 100755
index 145da806b..000000000
--- a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/config_net_odl.sh
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/bin/bash
-#
-# Author: Daniel Smith (Ericsson)
-#
-# Script to update neutron configuration for OVSDB/ODL integratino
-#
-# Usage - Set / pass CONTROL_HOST to your needs
-#
-### SET THIS VALUE TO MATCH YOUR SYSTEM
-CONTROL_HOST=192.168.0.2
-BR_EX_IP=172.30.9.70
-
-# ENV
-source ~/openrc
-# VARS
-ML2_CONF=/etc/neutron/plugins/ml2/ml2_conf.ini
-MODE=0
-
-
-# FUNCTIONS
-# Update ml2_conf.ini
-function update_ml2conf {
- echo "Backing up and modifying ml2_conf.ini"
- cp $ML2_CONF $ML2_CONF.bak
- sed -i -e 's/mechanism_drivers =openvswitch/mechanism_drivers = opendaylight/g' $ML2_CONF
- sed -i -e 's/tenant_network_types = flat,vlan,gre,vxlan/tenant_network_types = vxlan/g' $ML2_CONF
- sed -i -e 's/bridge_mappings=physnet2:br-prv/bridge_mappings=physnet1:br-ex/g' $ML2_CONF
- echo "[ml2_odl]" >> $ML2_CONF
- echo "password = admin" >> $ML2_CONF
- echo "username = admin" >> $ML2_CONF
- echo "url = http://${CONTROL_HOST}:8080/controller/nb/v2/neutron" >> $ML2_CONF
-}
-
-function reset_neutrondb {
- echo "Reseting DB"
- mysql -e "drop database if exists neutron_ml2;"
- mysql -e "create database neutron_ml2 character set utf8;"
- mysql -e "grant all on neutron_ml2.* to 'neutron'@'%';"
- neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head
-}
-
-function restart_neutron {
- echo "Restarting Neutron Server"
- service neutron-server restart
- echo "Should see Neutron runing now"
- service neutron-server status
- echo "Shouldnt be any nets, but should work (return empty)"
- neutron net-list
-}
-
-function stop_neutron {
- echo "Stopping Neutron / OVS components"
- service neutron-plugin-openvswitch-agent stop
- if [ $MODE == "0" ]
- then
- service neutron-server stop
- fi
-}
-
-function disable_agent {
- echo "Disabling Neutron Plugin Agents from running"
- service neutron-plugin-openvswitch-agent stop
- echo 'manual' > /etc/init/neutron-plugin-openvswitch-agent.override
-}
-
-
-
-function verify_ML2_working {
- echo "checking that we can talk via ML2 properly"
- curl -u admin:admin http://${CONTROL_HOST}:8080/controller/nb/v2/neutron/networks > /tmp/check_ml2
- if grep "network" /tmp/check_ml2
- then
- echo "Success - ML2 to ODL is working"
- else
- echo "im sorry Jim, but its dead"
- fi
-
-}
-
-
-function set_mode {
- if [ -d "/var/lib/glance/images" ]
- then
- echo "Controller Mode"
- MODE=0
- else
- echo "Compute Mode"
- MODE=1
- fi
-}
-
-function stop_ovs {
- echo "Stopping OpenVSwitch"
- service openvswitch-switch stop
-
-}
-
-function start_ovs {
- echo "Starting OVS"
- service openvswitch-vswitch start
- ovs-vsctl show
-}
-
-
-function control_setup {
- echo "Modifying Controller"
- stop_neutron
- stop_ovs
- disable_agent
- rm -rf /var/log/openvswitch/*
- mkdir -p /opt/opnfv/odl/ovs_back
- mv /etc/openvswitch/conf.db /opt/opnfv/odl/ovs_back/.
- mv /etc/openvswitch/.conf*lock* /opt/opnfv/odl/ovs_back/.
- rm -rf /etc/openvswitch/conf.db
- rm -rf /etc/openvswitch/.conf*
- service openvswitch-switch start
- ovs-vsctl add-br br-ex
- ovs-vsctl add-port br-ex eth0
- ovs-vsctl set interface br-ex type=external
- ifconfig br-ex 172.30.9.70/24 up
- service neutron-server restart
-
- echo "setting up networks"
- ip link add link eth1 name br-mgmt type vlan id 300
- ifconfig br-mgmt `grep address /etc/network/interfaces.d/ifcfg-br-mgmt | awk -F" " '{print $2}'`/24 up arp
- ip link add link eth1 name br-storage type vlan id 301
- ip link add link eth1 name br-prv type vlan id 1000
- ifconfig br-storage `grep address /etc/network/interfaces.d/ifcfg-br-storage | awk -F" " '{print $2}'`/24 up arp
- ifconfig eth1 `grep address /etc/network/interfaces.d/ifcfg-br-fw-admin | awk -F" " '{print $2}'`/24 up arp
-
- echo "Setting ODL Manager IP"
- ovs-vsctl set-manager tcp:192.168.0.2:6640
-
- echo "Verifying ODL ML2 plugin is working"
- verify_ML2_working
-
- # BAD HACK - Should be parameterized - this is to catch up
- route add default gw 172.30.9.1
-
-}
-
-function clean_ovs {
- echo "cleaning OVS DB"
- stop_ovs
- rm -rf /var/log/openvswitch/*
- mkdir -p /opt/opnfv/odl/ovs_back
- cp -pr /etc/openvswitch/* /opt/opnfv/odl/ovs_back/.
- rm -rf /etc/openvswitch/conf.db
- echo "restarting OVS - you should see Nothing there"
- start_ovs
-}
-
-function compute_setup {
- echo "Modifying Compute"
- echo "Disabling neutron openvswitch plugin"
- stop_neutron
- disable_agent
- ip link add link eth1 name br-mgmt type vlan id 300
- ifconfig br-mgmt `grep address /etc/network/interfaces.d/ifcfg-br-mgmt | awk -F" " '{print $2}'`/24 up arp
- ip link add link eth1 name br-storage type vlan id 301
- ip link add link eth1 name br-prv type vlan id 1000
- ifconfig br-storage `grep address /etc/network/interfaces.d/ifcfg-br-storage | awk -F" " '{print $2}'`/24 up arp
- ifconfig eth1 `grep address /etc/network/interfaces.d/ifcfg-br-fw-admin | awk -F" " '{print $2}'`/24 up arp
-
- echo "set manager, and route for ODL controller"
- ovs-vsctl set-manager tcp:192.168.0.2:6640
- route add 172.17.0.1 gw 192.168.0.2
- verify_ML2_working
-}
-
-
-# MAIN
-echo "Starting to make call"
-update_ml2conf
-echo "Check Mode"
-set_mode
-
-if [ $MODE == "0" ];
-then
- echo "Calling control setup"
- control_setup
-elif [ $MODE == "1" ];
-then
- echo "Calling compute setup"
- compute_setup
-
-else
- echo "Something is bad - call for help"
- exit
-fi
-
-
diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/stage_odl.sh b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/stage_odl.sh
deleted file mode 100755
index fa14b47d4..000000000
--- a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/stage_odl.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-# Author: Daniel Smith (Ericsson)
-# Stages ODL Controlleer
-# Inputs: odl_docker_image.tar
-# Usage: ./stage_odl.sh
-
-# ENVS
-source ~/.bashrc
-source ~/openrc
-
-LOCALPATH=/opt/opnfv/odl
-DOCKERBIN=docker-latest
-ODLIMGNAME=odl_docker_image.tar
-DNS=8.8.8.8
-HOST_IP=`ifconfig br-ex | grep -i "inet addr" | awk -F":" '{print $2}' | awk -F" " '{print $1}'`
-
-
-
-# DEBUG ECHOS
-echo $LOCALPATH
-echo $DOCKERBIN
-echo $ODLIMGNAME
-echo $DNS
-echo $HOST_IP
-
-
-# Set DNS to someting external and default GW - ODL requires a connection to the internet
-sed -i -e 's/nameserver 10.20.0.2/nameserver 8.8.8.8/g' /etc/resolv.conf
-route delete default gw 10.20.0.2
-route add default gw 172.30.9.1
-
-# Start Docker daemon and in background
-echo "Starting Docker"
-chmod +x $LOCALPATH/$DOCKERBIN
-$LOCALPATH/$DOCKERBIN -d &
-#courtesy sleep for virtual env
-sleep 2
-
-# Import the ODL Container
-echo "Importing ODL Container"
-$LOCALPATH/$DOCKERBIN load -i $LOCALPATH/$ODLIMGNAME
-
-# Start ODL, load DLUX and OVSDB modules
-echo "Removing any old install found - file not found is ok here"
-$LOCALPATH/$DOCKERBIN rm odl_docker
-echo "Starting up ODL controller in Daemon mode - no shell possible"
-$LOCALPATH/$DOCKERBIN run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel
-
-# Following, you should see the docker ps listed and a port opened
-echo " you should reach ODL controller at http://HOST_IP:8181/dlux/index.html"
-$LOCALPATH/$DOCKERBINNAME ps -a
-netstat -lnt
-
-
diff --git a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh b/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh
deleted file mode 100755
index 347ac7488..000000000
--- a/fuel/build/f_odl_docker/puppet/modules/opnfv/scripts/start_odl_container.sh
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/bash
-# Ericsson Canada Inc.
-# Authoer: Daniel Smith
-#
-# A helper script to install and setup the ODL docker conatiner on the controller
-#
-#
-# Inputs: odl_docker_image.tar
-#
-# Usage: ./start_odl_docker.sh
-echo "DEPRECATED - USE stage_odl.sh instead - this will be removed shortly once automated deployment is working - SR1"
-
-
-# ENVS
-source ~/.bashrc
-source ~/openrc
-
-# VARS
-
-# Switch for Dev mode - uses apt-get on control to cheat and get docker installed locally rather than from puppet source
-
-DEV=1
-
-# Switch for 1:1 port mapping of EXPOSED ports in Docker to the host, if set to 0, then random ports will be used - NOTE: this doesnt work for all web services X port on Host --> Y port in Container,
-# especially for SSL/HTTPS cases. Be aware.
-
-MATCH_PORT=1
-
-LOCALPATH=/opt/opnfv/odl
-DOCKERBINNAME=docker-latest
-DOCKERIMAGENAME=odl_docker_image.tar
-DNS=8.8.8.8
-HOST_IP=`ifconfig br-fw-admin | grep -i "inet addr" | awk -F":" '{print $2}' | awk -F" " '{print $1}'`
-
-
-# Set this to "1" if you want to have your docker container startup into a shell
-
-
-ENABLE_SHELL=1
-
-
-echo " Fetching Docker "
-if [ "$DEV" -eq "1" ];
-# If testing Locally (on a control node) you can set DEV=1 to enable apt-get based install on the control node (not desired target, but good for testing).
-then
- echo "Dev Mode - Fetching from Internet";
- echo " this wont work in production builds";
- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
- mkdir -p $LOCALPATH
- wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O $LOCALPATH/$DOCKERBINNAME
- wget http://ftp.us.debian.org/debian/pool/main/d/docker.io/docker.io_1.3.3~dfsg1-2_amd64.deb
- chmod 777 $LOCALPATH/$DOCKERBINNAME
- echo "done ";
-else
- echo "Using Binaries delivered from Puppet"
- echo "Starting Docker in Daemon mode"
- chmod +x $LOCALPATH/$DOCKERBINNAME
- $LOCALPATH/$DOCKERBINNAME -d &
-
- # wait until docker will be fully initialized
- # before any further action against just started docker
- sleep 5
-fi
-
-
-# We need to perform some cleanup of the Openstack Environment
-echo "TODO -- This should be automated in the Fuel deployment at some point"
-echo "However, the timing should come after basic tests are running, since this "
-echo " part will remove the subnet router association that is deployed automativally"
-echo " via fuel. Refer to the ODL + Openstack Integration Page "
-
-# Import the ODL container into docker
-
-echo "Importing ODL container into docker"
-$LOCALPATH/$DOCKERBINNAME load -i $LOCALPATH/$DOCKERIMAGENAME
-
-echo " starting up ODL - DLUX and Mapping Ports"
-if [ "$MATCH_PORT" -eq "1" ]
-then
- echo "Starting up Docker..."
- $LOCALPATH/$DOCKERBINNAME rm odl_docker
-fi
-
-if [ "$ENABLE_SHELL" -eq "1" ];
-then
- echo "Starting Container in Interactive Mode (/bin/bash will be provided, you will need to run ./start_odl_docker.sh inside the container yourself)"
- $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -t loving_daniel /bin/bash
-else
- echo "Starting Conatiner in Daemon mode - no shell will be provided and docker attach will not provide shell)"
- $LOCALPATH/$DOCKERBINNAME run --name odl_docker -p 8181:8181 -p 8185:8185 -p 9000:9000 -p 1099:1099 -p 8101:8101 -p 6633:6633 -p 43506:43506 -p 44444:44444 -p 6653:6653 -p 12001:12001 -p 6400:6400 -p 6640:6640 -p 8080:8080 -p 7800:7800 -p 55130:55130 -p 52150:52150 -p 36826:26826 -i -d -t loving_daniel
- echo "should see the process listed here in docker ps -a"
- $LOCALPATH/$DOCKERBINNAME ps -a;
- echo "Match Port enabled, you can reach the DLUX login at: "
- echo "http://$HOST_IP:8181/dlux.index.html"
-fi
diff --git a/fuel/build/f_odl_docker/scripts/config_net_odl.sh b/fuel/build/f_odl_docker/scripts/config_net_odl.sh
deleted file mode 100644
index d292acd93..000000000
--- a/fuel/build/f_odl_docker/scripts/config_net_odl.sh
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/bin/bash
-#
-# Author: Daniel Smith (Ericsson)
-#
-# Script to update neutron configuration for OVSDB/ODL integratino
-#
-# Usage - Set / pass CONTROL_HOST to your needs
-#
-CONTROL_HOST=172.30.9.70
-
-# ENV
-source ~/openrc
-
-# VARS
-ML2_CONF=/etc/neutron/plugins/ml2/ml2_conf.ini
-MODE=0
-
-
-# FUNCTIONS
-
-# Update ml2_conf.ini
-function update_ml2conf {
- echo "Backing up and modifying ml2_conf.ini"
- cp $ML2_CONF $ML2_CONF.bak
- sed -i -e 's/mechanism_drivers =openvswitch/mechanism_drivers = opendaylight/g' $ML2_CONF
- sed -i -e 's/tenant_network_types = flat,vlan,gre,vxlan/tenant_network_types = vxlan/g' $ML2_CONF
- cat "[ml2_odl]" >> $ML2_CONF
- cat "password = admin" >> $ML2_CONF
- cat "username = admin" >> $ML2_CONF
- cat "url = http://${CONTROL_HOST}:8080/controller/nb/v2/neutron" >> $ML2_CONF
-}
-
-function reset_neutrondb {
- echo "Reseting DB"
- mysql -e "drop database if exists neutron_ml2;"
- mysql -e "create database neutron_ml2 character set utf8;"
- mysql -e "grant all on neutron_ml2.* to 'neutron'@'%';"
- neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head
-}
-
-function restart_neutron {
- echo "Restarting Neutron Server"
- service neutron-server restart
- echo "Should see Neutron runing now"
- service neutron-server status
- echo "Shouldnt be any nets, but should work (return empty)"
- neutron net-list
-}
-
-function stop_neutron {
- echo "Stopping Neutron / OVS components"
- service neutron-plugin-openvswitch-agent stop
- if [ $MODE == "0" ]
- then
- service neutron-server stop
- fi
-}
-
-
-
-function verify_ML2_working {
- echo "checking that we can talk via ML2 properly"
- curl -u admin:admin http://${CONTROL_HOST}:8080/controller/nb/v2/neutron/networks > /tmp/check_ml2
- if grep "network" /tmp/check_ml2
- then
- echo "Success - ML2 to ODL is working"
- else
- echo "im sorry Jim, but its dead"
- fi
-
-}
-
-
-function set_mode {
- if ls -l /var/lib/glance/images
- then
- echo "Controller Mode"
- MODE=0
- else
- echo "Compute Mode"
- MODE=1
- fi
-}
-
-function stop_ovs {
- echo "Stopping OpenVSwitch"
- service openvswitch-switch stop
-
-}
-
-function control_setup {
- echo "Modifying Controller"
- stop_neutron
- stop_ovs
- rm -rf /var/log/openvswitch/*
- mkdir -p /opt/opnfv/odl/ovs_back
- mv /etc/openvswitch/conf.db /opt/opnfv/odl/ovs_back/.
- mv /etc/openvswitch/.conf*lock* /opt/opnfv/odl/ovs_back/.
- service openvswitch-switch start
- ovs-vsctl set-manager tcp:172.30.9.70:6640
- ovs-vsctl add-br br-eth0
- ovs-vsctl add-br br-ex
- ovs-vsctl add-port br-eth0 eth0
- ovs-vsctl add-port br-eth0 br-eth0--br-ex
- ovs-vsctl add-port br-ex br-ex--br-eth0
- ovs-vsctl set interface br-ex--br-eth0 type=patch
- ovs-vsctl set interface br-eth0--br-ex type=patch
- ovs-vsctl set interface br-ex--br-eth0 options:peer=br-eth0--br-ex
- ovs-vsctl set interface br-eth0--br-ex options:peer=br-ex--br-eth0
- ifconfig br-ex 172.30.9.70/24 up
- service neutron-server restart
-
- echo "setting up networks"
- ip link add link eth1 name br-mgmt type vlan id 300
- ip link add link eth1 name br-storage type vlan id 301
- /etc/init.d/networking restart
-
-
- echo "Reset Neutron DB"
- #reset_neutrondb
- echo "Restarting Neutron Components"
- #restart_neutron
- echo "Verifying ODL ML2 plugin is working"
- verify_ML2_working
-
-}
-
-function compute_setup {
- echo "do compute stuff here"
- echo "stopping neutron openvswitch plugin"
- stop_neutron
- ip link add link eth1 name br-mgmt type vlan id 300
- ifconfig br-mgmt `grep address /etc/network/interfaces.d/ifcfg-br-mgmt | awk -F" " '{print $2}'`/24
- ip link add link eth1 name br-storage type vlan id 301
- ifconfig br-storage `grep address /etc/network/interfaces.d/ifcfg-br-storage | awk -F" " '{print $2}'`/24
- ifconfig eth1 `grep address /etc/network/interfaces.d/ifcfg-br-fw-mgmt | awk -F" " '{print $2}'`/24
- echo "set manager, and route for ODL controller"
- ovs-vsctl set-manager tcp:192.168.0.2:6640
- route add 172.17.0.1 gw 192.168.0.2
- verify_ML2_working
-}
-
-
-# MAIN
-echo "Starting to make call"
-update_ml2conf
-echo "Check Mode"
-set_mode
-
-if [ $MODE == "0" ];
-then
- echo "Calling control setup"
- control_setup
-elif [ $MODE == "1" ];
-then
- echo "Calling compute setup"
- compute_setup
-
-else
- echo "Something is bad - call for help"
- exit
-fi
-
-
diff --git a/fuel/build/f_odl_docker/scripts/config_neutron_for_odl.sh b/fuel/build/f_odl_docker/scripts/config_neutron_for_odl.sh
deleted file mode 100644
index 3b688aee5..000000000
--- a/fuel/build/f_odl_docker/scripts/config_neutron_for_odl.sh
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/bin/bash
-CONTROL_HOST=172.17.0.3
-
-# ENV
-source ~/openrc
-
-
-
-# VARS
-ML2_CONF=/etc/neutron/plugins/ml2/ml2_conf.ini
-MODE=0
-
-
-# FUCNTIONS
-
-
-# Update ml2_conf.ini
-function update_ml2conf {
- echo "Backing up and modifying ml2_conf.ini"
- cp $ML2_CONF $ML2_CONF.bak
- sed -i -e 's/mechanism_drivers =openvswitch/mechanism_drivers = opendaylight/g' $ML2_CONF
-#!/bin/bash
-CONTROL_HOST=172.17.0.3
-
-# ENV
-source ~/openrc
-
-
-
-# VARS
-ML2_CONF=/etc/neutron/plugins/ml2/ml2_conf.ini
-MODE=0
-
-
-# FUCNTIONS
-
-
-# Update ml2_conf.ini
-function update_ml2conf {
- echo "Backing up and modifying ml2_conf.ini"
- cp $ML2_CONF $ML2_CONF.bak
- sed -i -e 's/mechanism_drivers =openvswitch/mechanism_drivers = opendaylight/g' $ML2_CONF
- sed -i -e 's/tenant_network_types = flat,vlan,gre,vxlan/tenant_network_types = vxlan/g' $ML2_CONF
- cat "[ml2_odl]" >> $ML2_CONF
- cat "password = admin" >> $ML2_CONF
- cat "username = admin" >> $ML2_CONF
- cat "url = http://${CONTROL_HOST}:8080/controller/nb/v2/neutron" >> $ML2_CONF
-}
-
-function reset_neutrondb {
- echo "Reseting DB"
- mysql -e "drop database if exists neutron_ml2;"
- mysql -e "create database neutron_ml2 character set utf8;"
- mysql -e "grant all on neutron_ml2.* to 'neutron'@'%';"
- neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head
-}
-
-function restart_neutron {
- echo "Restarting Neutron Server"
- service neutron-server restart
- echo "Should see Neutron runing now"
- service neutron-server status
- echo "Shouldnt be any nets, but should work (return empty)"
- neutron net-list
-}
-
-function stop_neutron {
- echo "Stopping Neutron / OVS components"
- service neutron-plugin-openvswitch-agent stop
- if [ $MODE == "0" ]
- then
- service neutron-server stop
- fi
-}
-
-
-
-function verify_ML2_working {
- echo "checking that we can talk via ML2 properly"
- curl -u admin:admin http://${CONTROL_HOST}:8080/controller/nb/v2/neutron/networks > /tmp/check_ml2
- if grep "network" /tmp/check_ml2
- then
- echo "Success - ML2 to ODL is working"
- else
- echo "im sorry Jim, but its dead"
- fi
-
-}
-
-
-function set_mode {
- if df -k | grep glance
- then
- echo "Controller Mode"
- MODE=0
- else
- echo "Compute Mode"
- MODE=1
- fi
-}
-
-function stop_ovs {
- echo "Stopping OpenVSwitch"
- service openvswitch-switch stop
-
-}
-
-function control_setup {
- echo "do control stuff here"
- echo "Reset Neutron DB"
- #reset_neutrondb
- echo "Restarting Neutron Components"
- #restart_neutron
- echo "Verifying ODL ML2 plugin is working"
- verify_ML2_working
-
-}
-
-function compute_setup {
- echo "do compute stuff here"
- stop_neutron
- verify_ML2_working
-}
-
-
-# MAIN
-echo "Starting to make call"
-#update_ml2conf
-echo "Check Mode"
-set_mode
-
-if [ $MODE == "0" ];
-then
- echo "Calling control setup"
- control_setup
-elif [ $MODE == "1" ];
-then
- echo "Calling compute setup"
- compute_setup
-
-else
- echo "Something is bad - call for help"
- exit
-fi
-
-
diff --git a/fuel/build/f_odl_docker/scripts/prep_nets_for_odl.sh b/fuel/build/f_odl_docker/scripts/prep_nets_for_odl.sh
deleted file mode 100755
index dd4fc9fc9..000000000
--- a/fuel/build/f_odl_docker/scripts/prep_nets_for_odl.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/bash
-# a "cheat" way to install docker on the controller
-# can only be used if you have a connecting out to the internet
-
-# Usage: ./install_docker.sh <ip of default route to remove> <ip of default gw to add>
-
-OLDGW=$1
-#!/bin/bash
-# a "cheat" way to install docker on the controller
-# can only be used if you have a connecting out to the internet
-
-# Usage: ./install_docker.sh <ip of default route to remove> <ip of default gw to add>
-
-OLDGW=$1
-NEWGW=$2
-IMAGEPATH=/opt/opnfv
-IMAGENAME=odl_docker_image.tar
-SOURCES=/etc/apt/sources.list
-
-
-if [ "$#" -ne 2]; then
- echo "Two args not provided, will not touch networking"
-else
-
- # Fix routes
- echo "Fixing routes"
- #DEBUG
- netstat -rn
-
- echo "delete old def route"
- route delete default gw $1
- echo "adding new def route"
- route add default gw $2
-
- echo " you should see a good nslookup now"
- nslookup www.google.ca
-#!/bin/bash
-# a "cheat" way to install docker on the controller
-# can only be used if you have a connecting out to the internet
-
-# Usage: ./install_docker.sh <ip of default route to remove> <ip of default gw to add>
-
-OLDGW=$1
-NEWGW=$2
-IMAGEPATH=/opt/opnfv
-IMAGENAME=odl_docker_image.tar
-SOURCES=/etc/apt/sources.list
-
-
-if [ "$#" -ne 2]; then
- echo "Two args not provided, will not touch networking"
-else
-
- # Fix routes
- echo "Fixing routes"
- #DEBUG
- netstat -rn
-
- echo "delete old def route"
- route delete default gw $1
- echo "adding new def route"
- route add default gw $2
-
- echo " you should see a good nslookup now"
- nslookup www.google.ca
-fi
-
-
-if egrep "mirrors.txt" $SOURCES
-then
- echo "Sources was already updated, not touching"
-else
- echo "adding the closests mirrors and docker mirror to the mix"
- echo "deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse" >> /etc/apt/sources.list
- echo "deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse" >> /etc/apt/sources.list
- echo "deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse" >> /etc/apt/sources.list
- echo "deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse" >> /etc/apt/sources.list
- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
- echo "deb https://get.docker.com/ubuntu docker main " > /etc/apt/sources.list.d/docker.list
-fi
-
-echo "Updating"
-apt-get update
-echo "Installing Docker"
-apt-get install -y lxc-docker
-
-echo "Loading ODL Docker Image"
-docker load -i $IMAGEPATH/$IMAGENAME
-
-
diff --git a/fuel/build/f_odl_docker/scripts/setup_ovs_for_odl.sh b/fuel/build/f_odl_docker/scripts/setup_ovs_for_odl.sh
deleted file mode 100644
index 42c9451bc..000000000
--- a/fuel/build/f_odl_docker/scripts/setup_ovs_for_odl.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-
-
-ok .. so they created br-int
-
-so lets add a physical nic to it
-
-
-# First - Removal all the bridges you find
-
-for i in $(ovs-vsctl list-br)
-do
- if [ "$i" == "br-int" ];
- then
- echo "skipped br-int"
- elif [ "$i" == "br-prv"];
- then
- echo "skipped br-pr"
- else
- ovs-vsctl del-br $i
- fi
-done
diff --git a/fuel/build/f_opnfv_puppet/Makefile b/fuel/build/f_opnfv_puppet/Makefile
deleted file mode 100644
index 0949737bc..000000000
--- a/fuel/build/f_opnfv_puppet/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/fuel/build/f_opnfv_puppet/README b/fuel/build/f_opnfv_puppet/README
deleted file mode 100644
index 35bea5a00..000000000
--- a/fuel/build/f_opnfv_puppet/README
+++ /dev/null
@@ -1,12 +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 the top level "OPNFV" Puppet class which (hopefully) only will be used to include
-an appropriate set of sub-classes which themselves will be self-contained.
diff --git a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/add_packages.pp b/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/add_packages.pp
deleted file mode 100644
index ccb39392f..000000000
--- a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/add_packages.pp
+++ /dev/null
@@ -1,9 +0,0 @@
-# Class: opnfv::add_packages
-#
-# Ensure added packages are installed:
-#
-
-class opnfv::add_packages {
- if $::osfamily == 'Debian' {
- }
-}
diff --git a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/init.pp b/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/init.pp
deleted file mode 100644
index 54f1c86bf..000000000
--- a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/init.pp
+++ /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
-##############################################################################
-
-# == Class: opnfv
-#
-# This class is used to perform OPNFV inclusions and settings on top of
-# the vanilla Fuel installation.
-#
-# Currently all logic is self contained, i.e. it is sufficient to
-# "include opnfv" from site.pp.
-
-class opnfv {
- # Configure resolv.conf if parameters passed through astute
- include opnfv::resolver
- # Setup OPNFV style NTP config
- include opnfv::ntp
- # Make sure all added packages are installed
- include opnfv::add_packages
- # Setup OpenDaylight
- include opnfv::odl_docker
-}
diff --git a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/opncheck.pp b/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/opncheck.pp
deleted file mode 100644
index 0822f0233..000000000
--- a/fuel/build/f_opnfv_puppet/puppet/modules/opnfv/manifests/opncheck.pp
+++ /dev/null
@@ -1,21 +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::opncheck
-#
-# Make sure that /opt/opnfv/pre-deploy.sh has been run by
-# verifying there is an "opnfv:" level in the astute.yaml.
-
-class opnfv::opncheck()
-{
- unless $::fuel_settings['opnfv'] {
- fail("Error: You have not run /opt/opnfv/pre-deploy.sh on the Fuel master prior to deploying!")
- }
-}
diff --git a/fuel/build/f_osnaily/Makefile b/fuel/build/f_osnaily/Makefile
deleted file mode 100644
index 0949737bc..000000000
--- a/fuel/build/f_osnaily/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/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp b/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp
deleted file mode 100644
index 05cd9e02a..000000000
--- a/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp
+++ /dev/null
@@ -1,366 +0,0 @@
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-$openstack_version = {
- 'keystone' => 'installed',
- 'glance' => 'installed',
- 'horizon' => 'installed',
- 'nova' => 'installed',
- 'novncproxy' => 'installed',
- 'cinder' => 'installed',
-}
-
-tag("${::fuel_settings['deployment_id']}::${::fuel_settings['environment']}")
-
-#Stages configuration
-stage {'zero': } ->
-stage {'opncheck': } ->
-stage {'first': } ->
-stage {'openstack-custom-repo': } ->
-stage {'netconfig': } ->
-stage {'corosync_setup': } ->
-stage {'openstack-firewall': } -> Stage['main']
-
-class begin_deployment ()
-{
- $role = $::fuel_settings['role']
- notify { "***** Beginning deployment of node ${::hostname} with role $role *****": }
-}
-
-class {'begin_deployment': stage => 'zero' }
-
-stage {'glance-image':
- require => Stage['main'],
-}
-
-if $::fuel_settings['nodes'] {
- $nodes_hash = $::fuel_settings['nodes']
-# OPNFV addition to add to hosts file
- if ($::fuel_settings['opnfv'] and
- $::fuel_settings['opnfv']['hosts']) {
- $extras_hash = $::fuel_settings['opnfv']['hosts']
- } else {
- $extras_hash = undef
- }
-
- $dns_nameservers=$::fuel_settings['dns_nameservers']
- $node = filter_nodes($nodes_hash,'name',$::hostname)
- if empty($node) {
- fail("Node $::hostname is not defined in the hash structure")
- }
-
- $default_gateway = $node[0]['default_gateway']
-
- $base_syslog_hash = $::fuel_settings['base_syslog']
- $syslog_hash = $::fuel_settings['syslog']
-
- $disable_offload = $::fuel_settings['disable_offload']
- if $disable_offload {
- L23network::L3::Ifconfig<||> {
- ethtool => {
- 'K' => ['gso off', 'gro off'],
- }
- }
- }
-
- $use_neutron = $::fuel_settings['quantum']
-
- if (!empty(filter_nodes($::fuel_settings['nodes'], 'role', 'ceph-osd')) or
- $::fuel_settings['storage']['volumes_ceph'] or
- $::fuel_settings['storage']['images_ceph'] or
- $::fuel_settings['storage']['objects_ceph']
- ) {
- $use_ceph = true
- } else {
- $use_ceph = false
- }
-
-
- if $use_neutron {
- prepare_network_config($::fuel_settings['network_scheme'])
- #
- $internal_int = get_network_role_property('management', 'interface')
- $internal_address = get_network_role_property('management', 'ipaddr')
- $internal_netmask = get_network_role_property('management', 'netmask')
- #
- $public_int = get_network_role_property('ex', 'interface')
- if $public_int {
- $public_address = get_network_role_property('ex', 'ipaddr')
- $public_netmask = get_network_role_property('ex', 'netmask')
-
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- L23network::L3::Ifconfig<| title == $public_int |> {
- default_gateway => true
- }
- } else {
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- $fw_admin_int = get_network_role_property('fw-admin', 'interface')
- L23network::L3::Ifconfig<| title == $fw_admin_int |> {
- default_gateway => true
- }
- }
- #
- $storage_address = get_network_role_property('storage', 'ipaddr')
- $storage_netmask = get_network_role_property('storage', 'netmask')
- } else {
- $internal_address = $node[0]['internal_address']
- $internal_netmask = $node[0]['internal_netmask']
- $public_address = $node[0]['public_address']
- $public_netmask = $node[0]['public_netmask']
- $storage_address = $node[0]['storage_address']
- $storage_netmask = $node[0]['storage_netmask']
- $public_br = $node[0]['public_br']
- $internal_br = $node[0]['internal_br']
- $public_int = $::fuel_settings['public_interface']
- $internal_int = $::fuel_settings['management_interface']
-
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- L23network::L3::Ifconfig<| title == $public_int |> {
- default_gateway => true
- }
-
- }
-}
-
-if ($::fuel_settings['neutron_mellanox']) {
- $mellanox_mode = $::fuel_settings['neutron_mellanox']['plugin']
-} else {
- $mellanox_mode = 'disabled'
-}
-
-# This parameter specifies the verbosity level of log messages
-# in openstack components config.
-# Debug would have set DEBUG level and ignore verbose settings, if any.
-# Verbose would have set INFO level messages
-# In case of non debug and non verbose - WARNING, default level would have set.
-$verbose = true
-$debug = $::fuel_settings['debug']
-
-### Storage Settings ###
-# Determine if any ceph parts have been asked for.
-# This will ensure that monitors are set up on controllers, even if no
-# ceph-osd roles during deployment
-
-
-### Syslog ###
-#TODO(bogdando) move logging options to astute.yaml
-# Enable error messages reporting to rsyslog. Rsyslog must be installed in this case.
-$use_syslog = $::fuel_settings['use_syslog'] ? { default=>true }
-# Syslog facilities for main openstack services
-# should vary (reserved usage)
-# local1 is reserved for openstack-dashboard
-$syslog_log_facility_glance = 'LOG_LOCAL2'
-$syslog_log_facility_cinder = 'LOG_LOCAL3'
-$syslog_log_facility_neutron = 'LOG_LOCAL4'
-$syslog_log_facility_nova = 'LOG_LOCAL6'
-$syslog_log_facility_keystone = 'LOG_LOCAL7'
-# could be the same
-# local0 is free for use
-$syslog_log_facility_murano = 'LOG_LOCAL0'
-$syslog_log_facility_heat = 'LOG_LOCAL0'
-$syslog_log_facility_sahara = 'LOG_LOCAL0'
-$syslog_log_facility_ceilometer = 'LOG_LOCAL0'
-$syslog_log_facility_ceph = 'LOG_LOCAL0'
-
-### Monit ###
-# Monit for compute nodes.
-# If enabled, will install monit and configure its watchdogs to track
-# nova-compute/api/network (and openvswitch service, if neutron enabled)
-# at compute nodes.
-# TODO(bogdando) set to true once monit package shipped with Fuel ISO
-$use_monit = false
-
-$nova_rate_limits = {
- 'POST' => 100000,
- 'POST_SERVERS' => 100000,
- 'PUT' => 1000, 'GET' => 100000,
- 'DELETE' => 100000
-}
-$cinder_rate_limits = {
- 'POST' => 100000,
- 'POST_SERVERS' => 100000,
- 'PUT' => 100000, 'GET' => 100000,
- 'DELETE' => 100000
-}
-
-###
-class advanced_node_netconfig {
- $sdn = generate_network_config()
- notify {"SDN: ${sdn}": }
-}
-
-case $::operatingsystem {
- 'redhat' : {
- $queue_provider = 'qpid'
- $custom_mysql_setup_class = 'pacemaker_mysql'
- }
- default: {
- $queue_provider='rabbitmq'
- $custom_mysql_setup_class='galera'
- }
-}
-
-class os_common {
- # OPNFV check if pre_deploy.sh has been run, otherwise fail
- class {'opnfv::opncheck': stage => 'opncheck' }
- if ($::fuel_settings['neutron_mellanox']) {
- if ($::mellanox_mode != 'disabled') {
- class { 'mellanox_openstack::ofed_recompile' :
- stage => 'zero',
- }
- }
- if ($::fuel_settings['storage']['iser']) {
- class { 'mellanox_openstack::iser_rename':
- stage => 'zero',
- storage_parent => $::fuel_settings['neutron_mellanox']['storage_parent'],
- iser_interface_name => $::fuel_settings['neutron_mellanox']['iser_interface_name'],
- }
- Class['mellanox_openstack::ofed_recompile'] -> Class['mellanox_openstack::iser_rename']
- }
- }
- class {"l23network::hosts_file": stage => 'netconfig', nodes => $nodes_hash, extras => $extras_hash }
- class {'l23network': use_ovs=>$use_neutron, stage=> 'netconfig'}
- if $use_neutron {
- class {'advanced_node_netconfig': stage => 'netconfig' }
- } else {
- class {'osnailyfacter::network_setup': stage => 'netconfig'}
- }
-
- if ($::osfamily == 'RedHat') {
- package {'irqbalance': ensure => present} -> service {'irqbalance': ensure => running }
- }
-
- class { 'openstack::firewall':
- stage => 'openstack-firewall',
- nova_vnc_ip_range => $::fuel_settings['management_network_range'],
- }
-
- $base_syslog_rserver = {
- 'remote_type' => 'tcp',
- 'server' => $base_syslog_hash['syslog_server'],
- 'port' => $base_syslog_hash['syslog_port']
- }
-
- # setting kernel reserved ports
- # defaults are 49000,35357,41055,58882
- class { 'openstack::reserved_ports':
- stage => 'netconfig',
- }
-
- # setting service down time and report interval
- # to 60 and 180 for Nova respectively to allow kernel
- # to kill dead connections
- # (see zendesk #1158 as well)
- $nova_report_interval = '60'
- $nova_service_down_time = '180'
-
- $syslog_rserver = {
- 'remote_type' => $syslog_hash['syslog_transport'],
- 'server' => $syslog_hash['syslog_server'],
- 'port' => $syslog_hash['syslog_port'],
- }
- if $syslog_hash['syslog_server'] != "" and $syslog_hash['syslog_port'] != "" and $syslog_hash['syslog_transport'] != "" {
- $rservers = [$base_syslog_rserver, $syslog_rserver]
- } else {
- $rservers = [$base_syslog_rserver]
- }
-
- if $use_syslog {
- class { "::openstack::logging":
- stage => 'first',
- role => 'client',
- show_timezone => true,
- # log both locally include auth, and remote
- log_remote => true,
- log_local => true,
- log_auth_local => true,
- # keep four weekly log rotations, force rotate if 300M size have exceeded
- rotation => 'weekly',
- keep => '4',
- # should be > 30M
- limitsize => '300M',
- # remote servers to send logs to
- rservers => $rservers,
- # should be true, if client is running at virtual node
- virtual => str2bool($::is_virtual),
- # Rabbit doesn't support syslog directly
- rabbit_log_level => 'NOTICE',
- debug => $debug,
- }
- }
-
- class { 'osnailyfacter::atop':
- stage => 'first',
- }
-
- class { 'osnailyfacter::ssh': }
-
- #case $role {
- # /controller/: { $hostgroup = 'controller' }
- # /swift-proxy/: { $hostgroup = 'swift-proxy' }
- # /storage/:{ $hostgroup = 'swift-storage' }
- # /compute/: { $hostgroup = 'compute' }
- # /cinder/: { $hostgroup = 'cinder' }
- # default: { $hostgroup = 'generic' }
- #}
-
- # if $nagios != 'false' {
- # class {'nagios':
- # proj_name => $proj_name,
- # services => [
- # 'host-alive','nova-novncproxy','keystone', 'nova-scheduler',
- # 'nova-consoleauth', 'nova-cert', 'haproxy', 'nova-api', 'glance-api',
- # 'glance-registry','horizon', 'rabbitmq', 'mysql',
- # ],
- # whitelist => ['127.0.0.1', $nagios_master],
- # hostgroup => $hostgroup ,
- # }
- # }
-
- # Workaround for fuel bug with firewall
- firewall {'003 remote rabbitmq ':
- sport => [ 4369, 5672, 15672, 41055, 55672, 61613 ],
- source => $::fuel_settings['master_ip'],
- proto => 'tcp',
- action => 'accept',
- require => Class['openstack::firewall'],
- }
-
- firewall {'004 remote puppet ':
- sport => [ 8140 ],
- source => $master_ip,
- proto => 'tcp',
- action => 'accept',
- require => Class['openstack::firewall'],
- }
-
- class { 'puppet::pull' :
- modules_source => $::fuel_settings['puppet_modules_source'],
- manifests_source => $::fuel_settings['puppet_manifests_source'],
- }
-} # OS_COMMON ENDS
-
-
-
-node default {
- case $::fuel_settings['deployment_mode'] {
- "singlenode": {
- include "osnailyfacter::cluster_simple"
- class {'os_common':}
- class {'opnfv':}
- }
- "multinode": {
- include "osnailyfacter::cluster_simple"
- class {'os_common':}
- class {'opnfv':}
- }
- /^(ha|ha_compact)$/: {
- include "osnailyfacter::cluster_ha"
- class {'os_common':}
- class {'opnfv':}
- }
- "rpmcache": { include osnailyfacter::rpmcache }
- }
-}
diff --git a/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp.orig b/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp.orig
deleted file mode 100644
index 9ed557af3..000000000
--- a/fuel/build/f_osnaily/puppet/modules/osnailyfacter/examples/site.pp.orig
+++ /dev/null
@@ -1,353 +0,0 @@
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-$openstack_version = {
- 'keystone' => 'installed',
- 'glance' => 'installed',
- 'horizon' => 'installed',
- 'nova' => 'installed',
- 'novncproxy' => 'installed',
- 'cinder' => 'installed',
-}
-
-tag("${::fuel_settings['deployment_id']}::${::fuel_settings['environment']}")
-
-#Stages configuration
-stage {'zero': } ->
-stage {'first': } ->
-stage {'openstack-custom-repo': } ->
-stage {'netconfig': } ->
-stage {'corosync_setup': } ->
-stage {'openstack-firewall': } -> Stage['main']
-
-class begin_deployment ()
-{
- $role = $::fuel_settings['role']
- notify { "***** Beginning deployment of node ${::hostname} with role $role *****": }
-}
-
-class {'begin_deployment': stage => 'zero' }
-
-stage {'glance-image':
- require => Stage['main'],
-}
-
-if $::fuel_settings['nodes'] {
- $nodes_hash = $::fuel_settings['nodes']
- $dns_nameservers=$::fuel_settings['dns_nameservers']
- $node = filter_nodes($nodes_hash,'name',$::hostname)
- if empty($node) {
- fail("Node $::hostname is not defined in the hash structure")
- }
-
- $default_gateway = $node[0]['default_gateway']
-
- $base_syslog_hash = $::fuel_settings['base_syslog']
- $syslog_hash = $::fuel_settings['syslog']
-
- $disable_offload = $::fuel_settings['disable_offload']
- if $disable_offload {
- L23network::L3::Ifconfig<||> {
- ethtool => {
- 'K' => ['gso off', 'gro off'],
- }
- }
- }
-
- $use_neutron = $::fuel_settings['quantum']
-
- if (!empty(filter_nodes($::fuel_settings['nodes'], 'role', 'ceph-osd')) or
- $::fuel_settings['storage']['volumes_ceph'] or
- $::fuel_settings['storage']['images_ceph'] or
- $::fuel_settings['storage']['objects_ceph']
- ) {
- $use_ceph = true
- } else {
- $use_ceph = false
- }
-
-
- if $use_neutron {
- prepare_network_config($::fuel_settings['network_scheme'])
- #
- $internal_int = get_network_role_property('management', 'interface')
- $internal_address = get_network_role_property('management', 'ipaddr')
- $internal_netmask = get_network_role_property('management', 'netmask')
- #
- $public_int = get_network_role_property('ex', 'interface')
- if $public_int {
- $public_address = get_network_role_property('ex', 'ipaddr')
- $public_netmask = get_network_role_property('ex', 'netmask')
-
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- L23network::L3::Ifconfig<| title == $public_int |> {
- default_gateway => true
- }
- } else {
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- $fw_admin_int = get_network_role_property('fw-admin', 'interface')
- L23network::L3::Ifconfig<| title == $fw_admin_int |> {
- default_gateway => true
- }
- }
- #
- $storage_address = get_network_role_property('storage', 'ipaddr')
- $storage_netmask = get_network_role_property('storage', 'netmask')
- } else {
- $internal_address = $node[0]['internal_address']
- $internal_netmask = $node[0]['internal_netmask']
- $public_address = $node[0]['public_address']
- $public_netmask = $node[0]['public_netmask']
- $storage_address = $node[0]['storage_address']
- $storage_netmask = $node[0]['storage_netmask']
- $public_br = $node[0]['public_br']
- $internal_br = $node[0]['internal_br']
- $public_int = $::fuel_settings['public_interface']
- $internal_int = $::fuel_settings['management_interface']
-
- # TODO(Xarses): remove this after completing merge of
- # multiple-cluster-networks
- L23network::L3::Ifconfig<| title == $public_int |> {
- default_gateway => true
- }
-
- }
-}
-
-if ($::fuel_settings['neutron_mellanox']) {
- $mellanox_mode = $::fuel_settings['neutron_mellanox']['plugin']
-} else {
- $mellanox_mode = 'disabled'
-}
-
-# This parameter specifies the verbosity level of log messages
-# in openstack components config.
-# Debug would have set DEBUG level and ignore verbose settings, if any.
-# Verbose would have set INFO level messages
-# In case of non debug and non verbose - WARNING, default level would have set.
-$verbose = true
-$debug = $::fuel_settings['debug']
-
-### Storage Settings ###
-# Determine if any ceph parts have been asked for.
-# This will ensure that monitors are set up on controllers, even if no
-# ceph-osd roles during deployment
-
-
-### Syslog ###
-#TODO(bogdando) move logging options to astute.yaml
-# Enable error messages reporting to rsyslog. Rsyslog must be installed in this case.
-$use_syslog = $::fuel_settings['use_syslog'] ? { default=>true }
-# Syslog facilities for main openstack services
-# should vary (reserved usage)
-# local1 is reserved for openstack-dashboard
-$syslog_log_facility_glance = 'LOG_LOCAL2'
-$syslog_log_facility_cinder = 'LOG_LOCAL3'
-$syslog_log_facility_neutron = 'LOG_LOCAL4'
-$syslog_log_facility_nova = 'LOG_LOCAL6'
-$syslog_log_facility_keystone = 'LOG_LOCAL7'
-# could be the same
-# local0 is free for use
-$syslog_log_facility_murano = 'LOG_LOCAL0'
-$syslog_log_facility_heat = 'LOG_LOCAL0'
-$syslog_log_facility_sahara = 'LOG_LOCAL0'
-$syslog_log_facility_ceilometer = 'LOG_LOCAL0'
-$syslog_log_facility_ceph = 'LOG_LOCAL0'
-
-### Monit ###
-# Monit for compute nodes.
-# If enabled, will install monit and configure its watchdogs to track
-# nova-compute/api/network (and openvswitch service, if neutron enabled)
-# at compute nodes.
-# TODO(bogdando) set to true once monit package shipped with Fuel ISO
-$use_monit = false
-
-$nova_rate_limits = {
- 'POST' => 100000,
- 'POST_SERVERS' => 100000,
- 'PUT' => 1000, 'GET' => 100000,
- 'DELETE' => 100000
-}
-$cinder_rate_limits = {
- 'POST' => 100000,
- 'POST_SERVERS' => 100000,
- 'PUT' => 100000, 'GET' => 100000,
- 'DELETE' => 100000
-}
-
-###
-class advanced_node_netconfig {
- $sdn = generate_network_config()
- notify {"SDN: ${sdn}": }
-}
-
-case $::operatingsystem {
- 'redhat' : {
- $queue_provider = 'qpid'
- $custom_mysql_setup_class = 'pacemaker_mysql'
- }
- default: {
- $queue_provider='rabbitmq'
- $custom_mysql_setup_class='galera'
- }
-}
-
-class os_common {
- if ($::fuel_settings['neutron_mellanox']) {
- if ($::mellanox_mode != 'disabled') {
- class { 'mellanox_openstack::ofed_recompile' :
- stage => 'zero',
- }
- }
- if ($::fuel_settings['storage']['iser']) {
- class { 'mellanox_openstack::iser_rename':
- stage => 'zero',
- storage_parent => $::fuel_settings['neutron_mellanox']['storage_parent'],
- iser_interface_name => $::fuel_settings['neutron_mellanox']['iser_interface_name'],
- }
- Class['mellanox_openstack::ofed_recompile'] -> Class['mellanox_openstack::iser_rename']
- }
- }
-
- class {"l23network::hosts_file": stage => 'netconfig', nodes => $nodes_hash }
- class {'l23network': use_ovs=>$use_neutron, stage=> 'netconfig'}
- if $use_neutron {
- class {'advanced_node_netconfig': stage => 'netconfig' }
- } else {
- class {'osnailyfacter::network_setup': stage => 'netconfig'}
- }
-
- if ($::osfamily == 'RedHat') {
- package {'irqbalance': ensure => present} -> service {'irqbalance': ensure => running }
- }
-
- class { 'openstack::firewall':
- stage => 'openstack-firewall',
- nova_vnc_ip_range => $::fuel_settings['management_network_range'],
- }
-
- $base_syslog_rserver = {
- 'remote_type' => 'tcp',
- 'server' => $base_syslog_hash['syslog_server'],
- 'port' => $base_syslog_hash['syslog_port']
- }
-
- # setting kernel reserved ports
- # defaults are 49000,35357,41055,58882
- class { 'openstack::reserved_ports':
- stage => 'netconfig',
- }
-
- # setting service down time and report interval
- # to 60 and 180 for Nova respectively to allow kernel
- # to kill dead connections
- # (see zendesk #1158 as well)
- $nova_report_interval = '60'
- $nova_service_down_time = '180'
-
- $syslog_rserver = {
- 'remote_type' => $syslog_hash['syslog_transport'],
- 'server' => $syslog_hash['syslog_server'],
- 'port' => $syslog_hash['syslog_port'],
- }
- if $syslog_hash['syslog_server'] != "" and $syslog_hash['syslog_port'] != "" and $syslog_hash['syslog_transport'] != "" {
- $rservers = [$base_syslog_rserver, $syslog_rserver]
- } else {
- $rservers = [$base_syslog_rserver]
- }
-
- if $use_syslog {
- class { "::openstack::logging":
- stage => 'first',
- role => 'client',
- show_timezone => true,
- # log both locally include auth, and remote
- log_remote => true,
- log_local => true,
- log_auth_local => true,
- # keep four weekly log rotations, force rotate if 300M size have exceeded
- rotation => 'weekly',
- keep => '4',
- # should be > 30M
- limitsize => '300M',
- # remote servers to send logs to
- rservers => $rservers,
- # should be true, if client is running at virtual node
- virtual => str2bool($::is_virtual),
- # Rabbit doesn't support syslog directly
- rabbit_log_level => 'NOTICE',
- debug => $debug,
- }
- }
-
- class { 'osnailyfacter::atop':
- stage => 'first',
- }
-
- class { 'osnailyfacter::ssh': }
-
- #case $role {
- # /controller/: { $hostgroup = 'controller' }
- # /swift-proxy/: { $hostgroup = 'swift-proxy' }
- # /storage/:{ $hostgroup = 'swift-storage' }
- # /compute/: { $hostgroup = 'compute' }
- # /cinder/: { $hostgroup = 'cinder' }
- # default: { $hostgroup = 'generic' }
- #}
-
- # if $nagios != 'false' {
- # class {'nagios':
- # proj_name => $proj_name,
- # services => [
- # 'host-alive','nova-novncproxy','keystone', 'nova-scheduler',
- # 'nova-consoleauth', 'nova-cert', 'haproxy', 'nova-api', 'glance-api',
- # 'glance-registry','horizon', 'rabbitmq', 'mysql',
- # ],
- # whitelist => ['127.0.0.1', $nagios_master],
- # hostgroup => $hostgroup ,
- # }
- # }
-
- # Workaround for fuel bug with firewall
- firewall {'003 remote rabbitmq ':
- sport => [ 4369, 5672, 15672, 41055, 55672, 61613 ],
- source => $::fuel_settings['master_ip'],
- proto => 'tcp',
- action => 'accept',
- require => Class['openstack::firewall'],
- }
-
- firewall {'004 remote puppet ':
- sport => [ 8140 ],
- source => $master_ip,
- proto => 'tcp',
- action => 'accept',
- require => Class['openstack::firewall'],
- }
-
- class { 'puppet::pull' :
- modules_source => $::fuel_settings['puppet_modules_source'],
- manifests_source => $::fuel_settings['puppet_manifests_source'],
- }
-} # OS_COMMON ENDS
-
-
-
-node default {
- case $::fuel_settings['deployment_mode'] {
- "singlenode": {
- include "osnailyfacter::cluster_simple"
- class {'os_common':}
- }
- "multinode": {
- include "osnailyfacter::cluster_simple"
- class {'os_common':}
- }
- /^(ha|ha_compact)$/: {
- include "osnailyfacter::cluster_ha"
- class {'os_common':}
- }
- "rpmcache": { include osnailyfacter::rpmcache }
- }
-}
diff --git a/fuel/build/f_resolvconf/Makefile b/fuel/build/f_resolvconf/Makefile
deleted file mode 100644
index 0949737bc..000000000
--- a/fuel/build/f_resolvconf/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/fuel/build/f_resolvconf/README b/fuel/build/f_resolvconf/README
deleted file mode 100644
index 5ff570f0a..000000000
--- a/fuel/build/f_resolvconf/README
+++ /dev/null
@@ -1,36 +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
-##############################################################################
-
-Addition to generate resolv.conf separately for compute hosts and controller
-hosts through Astute.
-
-The astute.yaml file should contain entries as those below to have them picked
-up during deployment:
-
-opnfv:
- dns:
- compute:
- - 100.100.100.2
- - 100.100.100.3
- controller:
- - 100.100.100.102
- - 100.100.100.104
-
-The suggested method for adding this information is to prepare for deployment
-with the Fuel GUI or CLI, but before actually deploying:
-
-1. Download the current deployment for all hosts: fuel --env 1 deployment --default
-2. Iterate through the hosts in "deployment_1" and add hosts configuration in
- the above format to their respective yaml file.
-3. Upload the modifed deployment information: fuel --env 1 deployment --upload
-
-After deploying, the additions will be included in /etc/astute.yaml of each
-host.
-
diff --git a/fuel/build/f_resolvconf/puppet/modules/opnfv/manifests/resolver.pp b/fuel/build/f_resolvconf/puppet/modules/opnfv/manifests/resolver.pp
deleted file mode 100644
index 44f36a237..000000000
--- a/fuel/build/f_resolvconf/puppet/modules/opnfv/manifests/resolver.pp
+++ /dev/null
@@ -1,73 +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::resolver
-#
-# Add resolver content passed through astute.yaml into resolv.conf
-# depending on the role
-#
-# Suitable yaml content:
-# <begin>
-# opnfv:
-# dns:
-# compute:
-# - 100.100.100.2
-# - 100.100.100.3
-# controller:
-# - 100.100.100.102
-# - 100.100.100.104
-# <end>
-#
-#
-#
-
-class opnfv::resolver()
-{
- if $::fuel_settings['role'] {
- if $::fuel_settings['role'] == 'primary-controller' {
- $role = 'controller'
- } else {
- $role = $::fuel_settings['role']
- }
-
- if ($::fuel_settings['opnfv']
- and $::fuel_settings['opnfv']['dns']
- and $::fuel_settings['opnfv']['dns'][$role]) {
- $nameservers=$::fuel_settings['opnfv']['dns'][$role]
-
- file { '/etc/resolv.conf':
- owner => root,
- group => root,
- mode => '0644',
- content => template('opnfv/resolv.conf.erb'),
- }
-
- # /etc/resolv.conf is re-generated at each boot by resolvconf, so we
- # need to store there as well.
-
- case $::operatingsystem {
- 'ubuntu': {
- file { '/etc/resolvconf/resolv.conf.d/head':
- owner => root,
- group => root,
- mode => '0644',
- content => template('opnfv/resolv.conf.erb'),
- }
- }
- 'centos': {
- exec { 'for file in ifcfg-eth*; do grep -q -F "PEERDNS=" $file || echo "PEERDNS=no" >> $file; done ':
- provider => 'shell',
- cwd => '/etc/sysconfig/network-scripts',
- }
- }
- }
- }
- }
-}
diff --git a/fuel/build/f_resolvconf/puppet/modules/opnfv/templates/resolv.conf.erb b/fuel/build/f_resolvconf/puppet/modules/opnfv/templates/resolv.conf.erb
deleted file mode 100644
index 7a29dcaf7..000000000
--- a/fuel/build/f_resolvconf/puppet/modules/opnfv/templates/resolv.conf.erb
+++ /dev/null
@@ -1,15 +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
-##############################################################################
-
-# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
-# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
-# Modified by OPNFV.
-<% @nameservers.each do |ns| %>nameserver <%= ns %>
-<% end -%>
diff --git a/fuel/build/f_resolvconf/testing/README b/fuel/build/f_resolvconf/testing/README
deleted file mode 100644
index 6846a8dc9..000000000
--- a/fuel/build/f_resolvconf/testing/README
+++ /dev/null
@@ -1,13 +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
-##############################################################################
-
-In order to test the functionality without performing a full deployment,
-run "puppet apply" on the fake_init.pp which will call only the
-opnfv::resolvconf class.
diff --git a/fuel/build/f_resolvconf/testing/fake_init.pp b/fuel/build/f_resolvconf/testing/fake_init.pp
deleted file mode 100644
index 496dcd216..000000000
--- a/fuel/build/f_resolvconf/testing/fake_init.pp
+++ /dev/null
@@ -1,13 +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
-##############################################################################
-
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-include opnfv::resolvconf
diff --git a/fuel/build/fuel-agent_1.patch b/fuel/build/fuel-agent_1.patch
new file mode 100644
index 000000000..b0808966f
--- /dev/null
+++ b/fuel/build/fuel-agent_1.patch
@@ -0,0 +1,36 @@
+*** build/repos/nailgun/fuel_agent/fuel_agent/manager.py.orig Thu Sep 24 11:08:38 2015
+--- build/repos/nailgun/fuel_agent/fuel_agent/manager.py Thu Sep 24 11:10:25 2015
+***************
+*** 541,546 ****
+--- 541,552 ----
+ fs_options=fs.options,
+ fs_label=fs.label,
+ dev=str(fs.device))
++ if fs.type == 'ext4':
++ LOG.debug('Trying to disable journaling for ext4 '
++ 'in order to speed up the build')
++ utils.execute('tune2fs', '-O', '^has_journal',
++ str(fs.device))
++
+
+ # mounting all images into chroot tree
+ self.mount_target(chroot, treat_mtab=False, pseudo=False)
+***************
+*** 631,636 ****
+--- 637,652 ----
+ self.umount_target(chroot, pseudo=False, try_lazy_umount=False)
+
+ for image in self.driver.image_scheme.images:
++ # find fs with the same loop device object
++ # as image.target_device
++ fs = self.driver.partition_scheme.fs_by_device(
++ image.target_device)
++
++ if fs.type == 'ext4':
++ LOG.debug('Trying to re-enable journaling for ext4')
++ utils.execute('tune2fs', '-O', 'has_journal',
++ str(fs.device))
++
+ LOG.debug('Deattaching loop device from file: %s',
+ image.img_tmp_file)
+ bu.deattach_loop(str(image.target_device))
diff --git a/fuel/build/fuel-main_1.patch b/fuel/build/fuel-main_1.patch
deleted file mode 100644
index 24b25b2c7..000000000
--- a/fuel/build/fuel-main_1.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-diff --git a/docker/astute/Dockerfile b/docker/astute/Dockerfile
-index 55f617a..cd05f19 100644
---- a/docker/astute/Dockerfile
-+++ b/docker/astute/Dockerfile
-@@ -5,7 +5,7 @@
- FROM fuel/centos
- MAINTAINER Matthew Mosesohn mmosesohn@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y ruby21-nailgun-mcagents sysstat
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y ruby21-nailgun-mcagents sysstat
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/cobbler/Dockerfile b/docker/cobbler/Dockerfile
-index 0c80abd..3a3d966 100644
---- a/docker/cobbler/Dockerfile
-+++ b/docker/cobbler/Dockerfile
-@@ -5,7 +5,7 @@
- FROM fuel/centos
- MAINTAINER Matthew Mosesohn mmosesohn@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*;echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y httpd cobbler dnsmasq xinetd tftp-server; ln -s /etc/dnsmasq.conf /etc/cobbler.dnsmasq.conf
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*;echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y httpd cobbler dnsmasq xinetd tftp-server; ln -s /etc/dnsmasq.conf /etc/cobbler.dnsmasq.conf
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/mcollective/Dockerfile b/docker/mcollective/Dockerfile
-index e70e87d..d6554b7 100644
---- a/docker/mcollective/Dockerfile
-+++ b/docker/mcollective/Dockerfile
-@@ -4,7 +4,7 @@ MAINTAINER Aleksandr Didenko adidenko@mirantis.com
-
- WORKDIR /root
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y sudo ruby21-mcollective
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y sudo ruby21-mcollective
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/ostf/Dockerfile b/docker/ostf/Dockerfile
-index 43f911e..8da9108 100644
---- a/docker/ostf/Dockerfile
-+++ b/docker/ostf/Dockerfile
-@@ -5,7 +5,7 @@
- FROM fuel/centos
- MAINTAINER Matthew Mosesohn mmosesohn@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*;echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all; yum --quiet install -y python-fuelclient supervisor postgresql-libs
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*;echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all; yum --quiet install -y python-fuelclient supervisor postgresql-libs
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/postgres/Dockerfile b/docker/postgres/Dockerfile
-index b2930db..63cc4c2 100644
---- a/docker/postgres/Dockerfile
-+++ b/docker/postgres/Dockerfile
-@@ -3,7 +3,7 @@ FROM fuel/centos
-
- MAINTAINER Aleksandr Didenko adidenko@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all;yum --quiet install -y sudo
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all;yum --quiet install -y sudo
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/rabbitmq/Dockerfile b/docker/rabbitmq/Dockerfile
-index 201648f..4f3b67c 100644
---- a/docker/rabbitmq/Dockerfile
-+++ b/docker/rabbitmq/Dockerfile
-@@ -3,7 +3,7 @@
- FROM fuel/centos
- MAINTAINER Aleksandr Didenko adidenko@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y rabbitmq-server
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all; yum --quiet install -y rabbitmq-server
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/rsync/Dockerfile b/docker/rsync/Dockerfile
-index ef737bd..b6eefd1 100644
---- a/docker/rsync/Dockerfile
-+++ b/docker/rsync/Dockerfile
-@@ -5,7 +5,7 @@
- FROM fuel/centos
- MAINTAINER Matthew Mosesohn mmosesohn@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all;yum --quiet install -y ruby21-puppet xinetd rsync logrotate
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo;yum clean all;yum --quiet install -y ruby21-puppet xinetd rsync logrotate
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
-diff --git a/docker/rsyslog/Dockerfile b/docker/rsyslog/Dockerfile
-index 5efd623..8721b39 100644
---- a/docker/rsyslog/Dockerfile
-+++ b/docker/rsyslog/Dockerfile
-@@ -2,7 +2,7 @@ FROM fuel/centos
-
- MAINTAINER Aleksandr Didenko adidenko@mirantis.com
-
--RUN rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all;yum --quiet install -y anacron rsyslog
-+RUN sleep 15; rm -rf /etc/yum.repos.d/*; echo -e "[nailgun]\nname=Nailgun Local Repo\nbaseurl=http://$(route -n | awk '/^0.0.0.0/ { print $2 }'):_PORT_/os/x86_64/\ngpgcheck=0" > /etc/yum.repos.d/nailgun.repo; yum clean all;yum --quiet install -y anacron rsyslog
-
- ADD etc /etc
- ADD start.sh /usr/local/bin/start.sh
diff --git a/fuel/build/fuel-main_2.patch b/fuel/build/fuel-main_2.patch
deleted file mode 100644
index 72588cba4..000000000
--- a/fuel/build/fuel-main_2.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-*** fuel-main/sandbox.mk.orig 2015-02-13 12:12:55.362989171 +0100
---- fuel-main/sandbox.mk 2015-02-13 14:50:39.103017653 +0100
-***************
-*** 71,77 ****
---- 71,83 ----
- echo "Updating apt package database"
- sudo chroot $(SANDBOX_UBUNTU) apt-get update
- echo "Installing additional packages: $(SANDBOX_DEB_PKGS)"
-+ test -e $(SANDBOX_UBUNTU)/sbin/start.orig || mv $(SANDBOX_UBUNTU)/sbin/start $(SANDBOX_UBUNTU)/sbin/start.orig
-+ echo "#!/bin/sh" > $(SANDBOX_UBUNTU)/sbin/start
-+ echo "exit 0" >> $(SANDBOX_UBUNTU)/sbin/start
-+ chmod 755 $(SANDBOX_UBUNTU)/sbin/start
- test -n "$(SANDBOX_DEB_PKGS)" && sudo chroot $(SANDBOX_UBUNTU) apt-get install --yes $(SANDBOX_DEB_PKGS)
-+ test -e $(SANDBOX_UBUNTU)/sbin/start.orig && (cp $(SANDBOX_UBUNTU)/sbin/start.orig $(SANDBOX_UBUNTU)/sbin/start; \
-+ rm $(SANDBOX_UBUNTU)/sbin/start.orig)
- echo "SANDBOX_UBUNTU_UP: done"
- endef
-
diff --git a/fuel/build/fuel-main_3.patch b/fuel/build/fuel-main_3.patch
new file mode 100644
index 000000000..8341d72d6
--- /dev/null
+++ b/fuel/build/fuel-main_3.patch
@@ -0,0 +1,19 @@
+*** prepare-build-env.sh.orig Tue Sep 8 08:47:46 2015
+--- prepare-build-env.sh Tue Sep 8 08:48:22 2015
+***************
+*** 41,47 ****
+
+ trusty)
+ GEMPKG="ruby ruby-dev"
+! sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D5A05778
+ echo "deb http://mirror.fuel-infra.org/devops/ubuntu/ ./" | sudo tee /etc/apt/sources.list.d/fuel-devops.list
+ sudo apt-get update && sudo apt-get -y install nodejs nodejs-legacy npm
+ ;;
+--- 41,47 ----
+
+ trusty)
+ GEMPKG="ruby ruby-dev"
+! sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1D2B45A2
+ echo "deb http://mirror.fuel-infra.org/devops/ubuntu/ ./" | sudo tee /etc/apt/sources.list.d/fuel-devops.list
+ sudo apt-get update && sudo apt-get -y install nodejs nodejs-legacy npm
+ ;;
diff --git a/fuel/build/fuel-main_5.patch b/fuel/build/fuel-main_5.patch
new file mode 100644
index 000000000..ec75626d0
--- /dev/null
+++ b/fuel/build/fuel-main_5.patch
@@ -0,0 +1,19 @@
+*** prepare-build-env.sh.orig Tue Sep 8 10:29:08 2015
+--- prepare-build-env.sh Tue Sep 8 10:30:21 2015
+***************
+*** 43,49 ****
+ GEMPKG="ruby ruby-dev"
+ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1D2B45A2
+ echo "deb http://mirror.fuel-infra.org/devops/ubuntu/ ./" | sudo tee /etc/apt/sources.list.d/fuel-devops.list
+! sudo apt-get update && sudo apt-get -y install nodejs nodejs-legacy npm
+ ;;
+
+ precise)
+--- 43,49 ----
+ GEMPKG="ruby ruby-dev"
+ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1D2B45A2
+ echo "deb http://mirror.fuel-infra.org/devops/ubuntu/ ./" | sudo tee /etc/apt/sources.list.d/fuel-devops.list
+! sudo apt-get update && sudo apt-get -y install nodejs nodejs-legacy npm dosfstools xorriso
+ ;;
+
+ precise)
diff --git a/fuel/build/install/apt-ftparchive-deb.conf b/fuel/build/install/apt-ftparchive-deb.conf
index 1101ac95b..0d15aec6f 100644
--- a/fuel/build/install/apt-ftparchive-deb.conf
+++ b/fuel/build/install/apt-ftparchive-deb.conf
@@ -17,9 +17,9 @@ TreeDefault {
};
BinDirectory "pool/main" {
- Packages "dists/precise/main/binary-amd64/Packages";
- BinOverride "./indices/override.precise.main";
- ExtraOverride "./indices/override.precise.extra.main";
+ Packages "dists/trusty/main/binary-amd64/Packages";
+ BinOverride "./indices/override.trusty.main";
+ ExtraOverride "./indices/override.trusty.extra.main";
};
Default {
diff --git a/fuel/build/install/apt-ftparchive-release.conf b/fuel/build/install/apt-ftparchive-release.conf
index 02528829d..02706bd7d 100644
--- a/fuel/build/install/apt-ftparchive-release.conf
+++ b/fuel/build/install/apt-ftparchive-release.conf
@@ -10,9 +10,9 @@
APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
-APT::FTPArchive::Release::Suite "precise";
-APT::FTPArchive::Release::Version "12.04";
-APT::FTPArchive::Release::Codename "precise";
+APT::FTPArchive::Release::Suite "trusty";
+APT::FTPArchive::Release::Version "1.04";
+APT::FTPArchive::Release::Codename "trusty";
APT::FTPArchive::Release::Architectures "amd64";
APT::FTPArchive::Release::Components "main";
-APT::FTPArchive::Release::Description "Ubuntu Precise 12.04 LTS";
+APT::FTPArchive::Release::Description "Ubuntu Trusty Tahr 14.04 LTS";
diff --git a/fuel/build/install/apt-ftparchive-udeb.conf b/fuel/build/install/apt-ftparchive-udeb.conf
index 2acbcf0de..3b5b239a6 100644
--- a/fuel/build/install/apt-ftparchive-udeb.conf
+++ b/fuel/build/install/apt-ftparchive-udeb.conf
@@ -17,8 +17,8 @@ TreeDefault {
};
BinDirectory "pool/debian-installer" {
- Packages "dists/precise/main/debian-installer/binary-amd64/Packages";
- BinOverride "./indices/override.precise.main.debian-installer";
+ Packages "dists/trusty/main/debian-installer/binary-amd64/Packages";
+ BinOverride "./indices/override.trusty.main.debian-installer";
};
Default {
diff --git a/fuel/build/install/install.sh b/fuel/build/install/install.sh
index dbb26d6d5..f0bb84914 100755
--- a/fuel/build/install/install.sh
+++ b/fuel/build/install/install.sh
@@ -122,17 +122,17 @@ prep_make_live() {
ssh-copy-id root@$FUELHOST
sshfs root@1${FUELHOST}:/ $TMP_HOSTMOUNT
- if [ -f $REPO/dists/precise/main/binary-amd64/Packages.backup ]; then
+ if [ -f $REPO/dists/trusty/main/binary-amd64/Packages.backup ]; then
echo "Error - found backup file for Packages!"
exit 1
fi
- if [ -f $REPO/dists/precise/main/binary-amd64/Packages.gz.backup ]; then
+ if [ -f $REPO/dists/trusty/main/binary-amd64/Packages.gz.backup ]; then
echo "Error - found backup file for Packages.gz!"
exit 1
fi
- if [ -f $REPO/dists/precise/Release.backup ]; then
+ if [ -f $REPO/dists/trusty/Release.backup ]; then
echo "Error - found backup file for Release!"
exit 1
fi
@@ -142,20 +142,24 @@ prep_make_live() {
exit 1
fi
- cp $REPO/dists/precise/main/binary-amd64/Packages $REPO/dists/precise/main/binary-amd64/Packages.backup
- cp $REPO/dists/precise/main/binary-amd64/Packages.gz $REPO/dists/precise/main/binary-amd64/Packages.gz.backup
- cp $REPO/dists/precise/Release $REPO/dists/precise/Release.backup
+ cp $REPO/dists/trusty/main/binary-amd64/Packages $REPO/dists/trusty/main/binary-amd64/Packages.backup
+ cp $REPO/dists/trusty/main/binary-amd64/Packages.gz $REPO/dists/trusty/main/binary-amd64/Packages.gz.backup
+ cp $REPO/dists/trusty/Release $REPO/dists/trusty/Release.backup
cp -Rvp $DEST/etc/puppet $DEST/etc/puppet.backup
}
post_make_live() {
- echo "Installing into Puppet:"
- cd $TOP/release/puppet/modules
- for dir in *
- do
- echo " $dir"
- cp -Rp $dir $DEST/etc/puppet/modules
- done
+ if [ -d $TOP/release/puppet/modules ]; then
+ echo "Installing into Puppet:"
+ cd $TOP/release/puppet/modules
+ if [ `ls -1 | wc -l` -gt 0 ]; then
+ for dir in *
+ do
+ echo " $dir"
+ cp -Rp $dir $DEST/etc/puppet/modules
+ done
+ fi
+ fi
}
make_live() {
@@ -210,18 +214,21 @@ iso_copy_puppet() {
tar xzf $DEST/puppet-slave.tgz
cd $TOP/release/puppet/modules
- verify_orig_files $TMP_ISOPUPPET/release/puppet $TOP/release/puppet/modules
# Remove all .orig files before copying as they now have been verfied
- find $TOP/release/puppet/modules -type f -name '*.orig' -exec rm {} \;
-
- for dir in $TOP/release/puppet/modules/*
- do
- echo " $dir"
- cp -Rp $dir $TMP_ISOPUPPET/release/puppet
- done
- cd $TMP_ISOPUPPET/release/puppet
+ if [ -d $TOP/release/puppet/modules ]; then
+ if [ `ls -1 | wc -l` -gt 0 ]; then
+ verify_orig_files $TMP_ISOPUPPET/release/puppet $TOP/release/puppet/modules
+ find $TOP/release/puppet/modules -type f -name '*.orig' -exec rm {} \;
+ for dir in $TOP/release/puppet/modules/*
+ do
+ echo " $dir"
+ cp -Rp $dir $TMP_ISOPUPPET/release/puppet
+ done
+ fi
+ fi
+ cd $TMP_ISOPUPPET/release/puppet
tar czf $DEST/puppet-slave.tgz .
cd $TOP
rm -Rf $TMP_ISOPUPPET
@@ -250,7 +257,7 @@ iso_modify_image () {
make_iso() {
prep_make_iso
copy_packages
- iso_copy_puppet
+ #iso_copy_puppet
iso_modify_image
make_iso_image
}
@@ -263,6 +270,8 @@ copy_packages() {
do
echo " $udeb"
cp $udeb $REPO/pool/debian-installer
+ echo "Did not expect a package here, not supported"
+ exit 1
done
cd $TOP/release/packages/ubuntu/pool/main
@@ -270,6 +279,8 @@ copy_packages() {
do
echo " $deb"
cp $deb $REPO/pool/main
+ echo "Did not expect a package here, not supported"
+ exit 1
done
echo "Running Fuel package patch file"
@@ -277,6 +288,8 @@ copy_packages() {
for line in `cat $TOP/apply_patches | grep -v "^#" | grep -v "^$"`; do
echo "Line is $line"
+ echo "Did not expect a line here, not supported"
+ exit 1
ref=`echo $line | cut -d '>' -f 1`
origpkg=`echo $line| cut -d '>' -f 2`
url=`echo $line | cut -d '>' -f 3`
@@ -315,10 +328,11 @@ copy_packages() {
done
printf "Done running Fuel patch file\n\n"
-
echo "Running add packages file"
for line in `cat $TOP/add_opnfv_packages | grep -v "^#" | grep -v "^$"`; do
echo "Line is $line"
+ echo "Did not expect a line here, not supported"
+ exit 1
ref=`echo $line | cut -d '>' -f 1`
origpkg=`echo $line| cut -d '>' -f 2`
url=`echo $line | cut -d '>' -f 3`
@@ -370,6 +384,8 @@ copy_packages() {
printf "\n\n" | tee -a $REPORTFILE
for line in `cat $TOP/patch-packages/release/patch-replacements`
do
+ echo "Did not expect a line here, not supported"
+ exit 1
frompkg=`echo $line | cut -d ">" -f 1`
topkg=`echo $line | cut -d ">" -f 2`
echo "CM: Applying patch to $frompkg" | tee -a $REPORTFILE
@@ -411,17 +427,19 @@ copy_packages() {
APT_DEB_CONF="$TOP/install/apt-ftparchive-deb.conf"
APT_UDEB_CONF="$TOP/install/apt-ftparchive-udeb.conf"
- apt-ftparchive -c "${APT_REL_CONF}" generate "${APT_DEB_CONF}"
- apt-ftparchive generate "${APT_UDEB_CONF}"
+ echo Not running echo apt-ftparchive -c "${APT_REL_CONF}" generate "${APT_DEB_CONF}"
+ echo Not running apt-ftparchive -c "${APT_REL_CONF}" generate "${APT_DEB_CONF}"
+ echo Not running apt-ftparchive generate "${APT_UDEB_CONF}"
+ echo Not running apt-ftparchive generate "${APT_UDEB_CONF}"
# Fuel also needs this index file
- cat dists/precise/main/binary-amd64/Packages | \
- awk '/^Package:/{pkg=$2}
- /^Version:/{print pkg ": \"" $2 "\""}' > ubuntu-versions.yaml
- cp ubuntu-versions.yaml $DEST
+ # cat dists/trusty/main/binary-amd64/Packages | \
+ # awk '/^Package:/{pkg=$2}
+ # /^Version:/{print pkg ": \"" $2 "\""}' > ubuntu-versions.yaml
+ # cp ubuntu-versions.yaml $DEST
- apt-ftparchive -c "${APT_REL_CONF}" release dists/precise/ > dists/precise/Release
- gzip -9cf dists/precise/Release > dists/precise/Release.gz
+ # apt-ftparchive -c "${APT_REL_CONF}" release dists/trusty/ > dists/trusty/Release
+ # gzip -9cf dists/trusty/Release > dists/trusty/Release.gz
popd > /dev/null
@@ -444,6 +462,8 @@ if [ $MODE = "iso" ]; then
NEWISO=$3
VOLUMEID="$4 $5"
REPORTFILE="${NEWISO}.txt"
+ echo "Opening reportfile at $REPORTFILE"
+ touch $REPORTFILE
if [ ! -f $ORIGISO ]; then
echo "Can't find original MOS 5.1 iso at $ORIGISO"
rm $CONF
diff --git a/fuel/build/install/uninstall.sh b/fuel/build/install/uninstall.sh
index 36b888441..a9e74bc39 100755
--- a/fuel/build/install/uninstall.sh
+++ b/fuel/build/install/uninstall.sh
@@ -31,17 +31,17 @@ DEST=$MOUNT
REPO=$DEST/var/www/nailgun/ubuntu/fuelweb/x86_64
cd $REPO
-if [ ! -f $REPO/dists/precise/main/binary-amd64/Packages.backup ]; then
+if [ ! -f $REPO/dists/trusty/main/binary-amd64/Packages.backup ]; then
echo "Error - didn't find backup file for Packages!"
exit 1
fi
-if [ ! -f $REPO/dists/precise/main/binary-amd64/Packages.gz.backup ]; then
+if [ ! -f $REPO/dists/trusty/main/binary-amd64/Packages.gz.backup ]; then
echo "Error - didn't find backup file for Packages.gz!"
exit 1
fi
-if [ ! -f $REPO/dists/precise/Release.backup ]; then
+if [ ! -f $REPO/dists/trusty/Release.backup ]; then
echo "Error - didn't find backup file for Release!"
exit 1
fi
@@ -71,9 +71,9 @@ cd $REPO
echo "Restoring backups of datafiles"
-rm -f $REPO/dists/precise/main/binary-amd64/Packages $REPO/dists/precise/main/binary-amd64/Packages.gz
-rm -f $REPO/dists/precise/Release $DEST/etc/puppet/manifests/site.pp
-mv $REPO/dists/precise/main/binary-amd64/Packages.backup $REPO/dists/precise/main/binary-amd64/Packages
-mv $REPO/dists/precise/main/binary-amd64/Packages.gz.backup $REPO/dists/precise/main/binary-amd64/Packages.gz
-mv $REPO/dists/precise/Release.backup $REPO/dists/precise/Release
+rm -f $REPO/dists/trusty/main/binary-amd64/Packages $REPO/dists/trusty/main/binary-amd64/Packages.gz
+rm -f $REPO/dists/trusty/Release $DEST/etc/puppet/manifests/site.pp
+mv $REPO/dists/trusty/main/binary-amd64/Packages.backup $REPO/dists/trusty/main/binary-amd64/Packages
+mv $REPO/dists/trusty/main/binary-amd64/Packages.gz.backup $REPO/dists/trusty/main/binary-amd64/Packages.gz
+mv $REPO/dists/trusty/Release.backup $REPO/dists/trusty/Release
mv $DEST/etc/puppet/manifests/site.pp.backup $DEST/etc/puppet/manifests/site.pp
diff --git a/fuel/build/opendaylight/Makefile b/fuel/build/opendaylight/Makefile
deleted file mode 100644
index bd2eeb5a3..000000000
--- a/fuel/build/opendaylight/Makefile
+++ /dev/null
@@ -1,102 +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
-##############################################################################
-
-############################################################################
-# BEGIN of variables to customize
-#
-SHELL = /bin/bash
-
-
-BUILD_DIR := $(shell pwd)
-GIT_DIR := /tmp
-export CONFIG_SPEC_SCRIPT
-export MAVEN_OPTS = -Xmx1024m -XX:MaxPermSize=512m
-MAINTAINER = "Main Tainer <main.tainer@example.org>"
-ODL_SHORT_NAME = odl
-ODL_VERSION = 0.1-1
-DEPEND = openjdk-8-jdk
-TARGET_BUILD_PATH="/tmp/controller/opendaylight/distribution/opendaylight-karaf/target/"
-MAVEN_SPEC = $(BUILD_DIR)/odl_maven/settings.xml
-
-#
-# END of variables to customize
-#############################################################################
-
-.PHONY: all
-all: odl
-
-############################################################################
-# BEGIN of Include definitions
-#
-include ../config.mk
-#
-# END Include definitions
-#############################################################################
-
-.PHONY: setup
-setup:
- rm -f "$(BUILD_BASE)/f_odl"
- ln -s "$(shell readlink -e $(BUILD_DIR))/f_odl" "$(shell readlink -e $(BUILD_BASE))/f_odl"
-
-.PHONY: validate-cache
-validate-cache:
- @REMOTE_ID=$(shell git ls-remote $(ODL_MAIN_REPO) $(ODL_MAIN_TAG)^{} | awk '{print $$(NF-1)}'); \
- if [ -z $$REMOTE_ID ] || [ $$REMOTE_ID = " " ]; \
- then \
- REMOTE_ID=$(shell git ls-remote $(ODL_MAIN_REPO) $(ODL_MAIN_TAG) | awk '{print $$(NF-1)}'); \
- fi; \
- if [ $$REMOTE_ID != $(shell cat $(VERSION_FILE) | grep odl | awk '{print $$NF}') ]; \
- then \
- echo "Cache does not match upstream OpenDaylight, cache must be rebuilt!"; \
- exit 1; \
- fi
-
-.PHONY: odl
-odl:
-
-ifeq ($(ODL_MAIN_REPO),)
- @echo "No config-spec target for ODL, nothing to build"
-else
-
-ifeq ($(shell if [ -e .odl-build.log ];then cat .odl-build.log; fi;),$(ODL_MAIN_TAG))
- @cd /tmp && git clone $(ODL_MAIN_REPO) && cd /tmp/controller && git checkout $(ODL_MAIN_TAG)
-
- @echo "ODL is up to date"
-else
- @if [ ! -d "/tmp/controller" ]; then\
- cd /tmp && git clone $(ODL_MAIN_REPO);\
- fi;
-
- @if [ "$(UNIT_TEST)" = "FALSE" ]; then\
- echo "Building ODL without unit test";\
- cd /tmp/controller &&\
- git checkout $(ODL_MAIN_TAG) &&\
- mvn -D maven.test.skip=true -gs $(MAVEN_SPEC) clean install;\
- else\
- echo "Building ODL with unit test";\
- cd /tmp/controller &&\
- git checkout $(ODL_MAIN_TAG) &&\
- mvn -gs $(MAVEN_SPEC) clean install;\
- fi;
-
- @echo "odl" `git -C /tmp/controller show | grep commit | head -1 | cut -d " " -f2` >> $(VERSION_FILE)
- @./make-odl-deb.sh -N $(ODL_SHORT_NAME)_`cd /tmp/controller; git rev-parse --short HEAD` -n $(ODL_SHORT_NAME) -v "$(ODL_VERSION)" -t "$(ODL_MAIN_TAG)" -m $(MAINTAINER) -d $(DEPEND) -p $(TARGET_BUILD_PATH)
- @echo $(ODL_MAIN_TAG) > .odl-build.log
-endif
-endif
-
-.PHONY: clean $(SUBCLEAN)
-clean: $(SUBCLEAN)
- @rm -Rf /tmp/controller
- @rm -f .odl-build.log
- @./make-odl-deb.sh -C
-
-.PHONY: release
-release:
diff --git a/fuel/build/opendaylight/README b/fuel/build/opendaylight/README
deleted file mode 100644
index 7aa392e92..000000000
--- a/fuel/build/opendaylight/README
+++ /dev/null
@@ -1,52 +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 directory builds the OpenDaylight debian package by cloning the
-opendaylight.org repo, building the odl tag specified in
-"fuel-build/config-spec" and constructing a debian package source tree under
-"f_odl", which automatically is linked into "fuel_build/." for further build processing.
-
-The opendaylight has the following structure:
-.
-+--------+-------------+-----------+
-| | | |
-| Makefile make-odl-deb.sh README
-| (this file)
-|
-+----------+----------+
- | |
- odl_maven/ f_odl/
-
-Makefile:
-Invoked by the git root Makefile, it builds the clones the odl repo from
-odl, checkout the tag/branch indicated in "fuelbuild/config-spec", builds
-odl, and calls "make-odl-deb.sh" to create a debian package source tree.
-
-make-odl-deb.sh:
-Creates the odl debian package source tree in "f_odl" from the odl build
-results.
-
-odl_maven/:
-Contains needed control files for maven OpenDaylight build
-
-f_odl/:
-Contains buildscripts and the generated odl debian package source tree produced
-by the odl build (make-odl-deb.sh) which is later used by the root build system.
-
-NOTE on the controller/ git repo clone:
-The git controller repo clone Contains all artifacts from the odl build, it only
-exists in /tmp inside the build docker container and is not visible anywhere on
-the build host
-
-Note on build caching:
-The latest build results are cached, and will not be rebuilt unless the fuel-build/
-config-spec is changed in respect to odl version or if make clean is applied.
-./.odl-build.log and ./.odl-build.history are used to keep adequate bookmaking to
-track caching and needed cleanout.
diff --git a/fuel/build/opendaylight/f_odl/Makefile b/fuel/build/opendaylight/f_odl/Makefile
deleted file mode 100644
index f7ebd3e73..000000000
--- a/fuel/build/opendaylight/f_odl/Makefile
+++ /dev/null
@@ -1,49 +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
-##############################################################################
-
-include $(BUILD_BASE)/config.mk
-ODL_NAME_SHORT := odl
-PACKAGE := odl_$(shell cd /tmp/controller; git rev-parse --short HEAD)
-VERSION := 0.1-1
-DEB_NAME := $(PACKAGE)_$(VERSION)
-
-.PHONY: all
-all: release/pool/main/$(DEB_NAME).deb
-
-release/pool/main/$(DEB_NAME).deb:
-ifeq ($(ODL_MAIN_REPO),)
- @echo "No config-spec target for ODL, nothing to build"
-else
- @mkdir -p tmp/src
- @mkdir -p release/pool/main
- @cp -rp package/$(DEB_NAME) tmp/src
- @gzip -f9 tmp/src/$(DEB_NAME)/usr/share/doc/$(ODL_NAME_SHORT)/changelog.Debian
- @fakeroot dpkg-deb --build tmp/src/$(DEB_NAME)
- @lintian tmp/src/$(DEB_NAME).deb
- @cp tmp/src/$(DEB_NAME).deb release/pool/main
-endif
-
-.PHONY: clean
-clean:
- @rm -rf tmp
- @rm -rf release
- @rm -f $(DEB_DEST)/$(DEB_NAME).deb
-
-.PHONY: validate-cache
-validate-cache:
- @echo "No cache validation schema available for $(shell pwd)"
- @echo "Continuing ..."
-
-.PHONY: release
-release:release/pool/main/$(DEB_NAME).deb
-ifneq ($(ODL_MAIN_REPO),)
- @cp release/pool/main/$(DEB_NAME).deb $(DEB_DEST)
- @cp -Rvp puppet/modules/* $(PUPPET_DEST)
-endif
diff --git a/fuel/build/opendaylight/f_odl/README b/fuel/build/opendaylight/f_odl/README
deleted file mode 100644
index 077962de4..000000000
--- a/fuel/build/opendaylight/f_odl/README
+++ /dev/null
@@ -1,49 +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 directory adds the OpenDaylight (odl) package and related puppet
-deployment manifest such that it gets built into the .iso image an deployed
-on the stack controller cluster.
-
-The f_odl has the following structure:
-.
-+--------+----------+-----------+------------+
- | | | |
- puppet/ Makefile README odl_<change_id>
- | (this file) /<version>
- | |
- | odl deb pkg src
- modules/
- |
- |
- |
- opnfv/
- |
- |
- |
- manifests/
- |
- |
- |
- odl.pp
-
-Makefile:
-Invoked by the git root Makefile, it builds the odl debian package from the
-debian pkg source directory (inside this directory) and pushes it together
-with the manifests to the fuel build source artifact directory, such that it
-eventually gets built into the new fuel .iso
-
-odl.pp:
-Controls the installation and configuration of odl
-
-odl deb pkg src:
-Is the debian package source directory tree including all needed odl artifacts
-and debian pakage meta data. This debian source package tree is built from
-fuel-build/opendaylight and doesnt exist before it has bee built.
diff --git a/fuel/build/opendaylight/f_odl/puppet/modules/opnfv/manifests/odl.pp b/fuel/build/opendaylight/f_odl/puppet/modules/opnfv/manifests/odl.pp
deleted file mode 100644
index 6165646ce..000000000
--- a/fuel/build/opendaylight/f_odl/puppet/modules/opnfv/manifests/odl.pp
+++ /dev/null
@@ -1,13 +0,0 @@
-class opnfv::odl {
- if $::osfamily == 'Debian' {
-
-
- case $::fuel_settings['role'] {
- /controller/: {
- package { 'odl':
- ensure => installed,
- }
- }
- }
- }
-}
diff --git a/fuel/build/opendaylight/f_odl/testing/README b/fuel/build/opendaylight/f_odl/testing/README
deleted file mode 100644
index 2ef497656..000000000
--- a/fuel/build/opendaylight/f_odl/testing/README
+++ /dev/null
@@ -1,12 +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
-##############################################################################
-
-In order to test the functionality without performing a full deployment, run "puppet apply" on the
-fake_init.pp which will call only the opnfv::odl class.
diff --git a/fuel/build/opendaylight/make-odl-deb.sh b/fuel/build/opendaylight/make-odl-deb.sh
deleted file mode 100755
index 5222087be..000000000
--- a/fuel/build/opendaylight/make-odl-deb.sh
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/bin/bash
-set -e
-##############################################################################
-# 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
-##############################################################################
-
-##############################################################################
-# Default variable declarations
-
-COMMAND=
-PACKAGE_NAME=
-PACKAGE_SHORT_NAME=
-PACKAGE_VERSION=
-TARGET_BUILD_PATH=
-DEPENDENCIES=
-MAINTAINER=
-ARCH="amd64"
-BUILD_HISTORY=".odl-build-history"
-
-##############################################################################
-# subroutine: usage
-# Description: Prints out usage of this script
-
-usage ()
-{
-cat <<EOF
-usage: $0 options
-
-$0 creates a ${PACKAGE_NAME} Debian package
-
-OPTIONS:
- -n Package shoer name
- -N Package name
- -v Version
- -t Tag
- -p Target build path, the path where the built tar ball is to be fetched
- -m Maintainer
- -d Package dependencies
- -h Prints this message
- -C Clean
-
-E.g.: $0 -n my/deb/src/dest/path -N my-package -v 1.0-1 -t myTag -p path/to/the/source -m "Main Tainer <main.tainer.exampe.org> -d myJavaDependence
-EOF
-}
-
-##############################################################################
-# subroutine: clean
-# Description: Cleans up all artifacts from earlier builds
-
-clean ()
-{
-if [ -e $BUILD_HISTORY ]; then
- while read line
- do
- rm -rf $line
- done < $BUILD_HISTORY
- rm ${BUILD_HISTORY}
- exit 0
-fi
-}
-
-##############################################################################
-# make-DEBIAN_control
-# Description: constructs the Debian pack control file
-
-make-DEBIAN_control ()
-{
-cat <<EOF
-Package: $PACKAGE_SHORT_NAME
-Version: $PACKAGE_VERSION
-Section: base
-Priority: optional
-Architecture: $ARCH
-Depends: $DEPENDENCIES
-Maintainer: $MAINTAINER
-Description: OpenDaylight deamon
- This is a daemon for the opendaylight/odl controller service.
-EOF
-}
-
-##############################################################################
-# subroutine: make-DEBIAN_conffiles
-# Description: Constructs the Debian package config files assignment
-
-make-DEBIAN_conffiles ()
-{
-cat <<EOF
-/etc/odl/etc/all.policy
-/etc/odl/etc/config.properties
-/etc/odl/etc/custom.properties
-/etc/odl/etc/distribution.info
-/etc/odl/etc/equinox-debug.properties
-/etc/odl/etc/java.util.logging.properties
-/etc/odl/etc/jmx.acl.cfg
-/etc/odl/etc/jmx.acl.java.lang.Memory.cfg
-/etc/odl/etc/jmx.acl.org.apache.karaf.bundle.cfg
-/etc/odl/etc/jmx.acl.org.apache.karaf.config.cfg
-/etc/odl/etc/jmx.acl.org.apache.karaf.security.jmx.cfg
-/etc/odl/etc/jmx.acl.osgi.compendium.cm.cfg
-/etc/odl/etc/jre.properties
-/etc/odl/etc/keys.properties
-/etc/odl/etc/org.apache.felix.fileinstall-deploy.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.bundle.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.config.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.feature.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.jaas.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.kar.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.shell.cfg
-/etc/odl/etc/org.apache.karaf.command.acl.system.cfg
-/etc/odl/etc/org.apache.karaf.features.cfg
-/etc/odl/etc/org.apache.karaf.features.obr.cfg
-/etc/odl/etc/org.apache.karaf.features.repos.cfg
-/etc/odl/etc/org.apache.karaf.jaas.cfg
-/etc/odl/etc/org.apache.karaf.kar.cfg
-/etc/odl/etc/org.apache.karaf.log.cfg
-/etc/odl/etc/org.apache.karaf.management.cfg
-/etc/odl/etc/org.apache.karaf.shell.cfg
-/etc/odl/etc/org.ops4j.pax.logging.cfg
-/etc/odl/etc/org.ops4j.pax.url.mvn.cfg
-/etc/odl/etc/regions-config.xml
-/etc/odl/etc/shell.init.script
-/etc/odl/etc/startup.properties
-/etc/odl/etc/system.properties
-/etc/odl/etc/users.properties
-/etc/odl/configuration/context.xml
-/etc/odl/configuration/logback.xml
-/etc/odl/configuration/tomcat-logging.properties
-/etc/odl/configuration/tomcat-server.xml
-EOF
-}
-
-##############################################################################
-# subroutine: make-DEBIAN_postinst
-# Description: Constructs the Debian package post installation script
-
-make-DEBIAN_postinst ()
-{
-cat <<EOF
-#!/bin/bash -e
-ln -s /etc/${PACKAGE_SHORT_NAME}/* ${TARGET_INSTALL_PATH}
-echo "OpenDaylight $TAG version $PACKAGE_VERSION has been installed"
-EOF
-}
-
-##############################################################################
-# subroutine: make-DEBIAN_bin
-# Description: Constructs the bin script (normally under /usr/bin)
-
-make-DEBIAN_bin ()
-{
-cat <<EOF
-#!/bin/bash -e
-${TARGET_INSTALL_PATH}bin/karaf $@
-EOF
-}
-
-##############################################################################
-# subroutine: make-DEBIAN_copyright
-# Description: Constructs the copyright text (normally under /usr/share/doc...)
-
-make-DEBIAN_copyright ()
-{
-cat <<EOF
-OpenDaylight - an open source SDN controller
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-EOF
-}
-
-##############################################################################
-# subroutine: make-DEBIAN_changelog
-# Description: Constructs the changelog text (normally under /usr/share/doc...)
-
-make-DEBIAN_changelog ()
-{
-cat <<EOF
-$PACKAGE_SHORT_NAME ($PACKAGE_VERSION) precise-proposed; urgency=low
-
- * Derived from $PACKAGE_NAME $PACHAGE_VERSION
-
- -- $MAINTAINER $(date)
-EOF
-}
-
-##############################################################################
-# MAIN
-
-while getopts "N:n:v:d:Chm:t:p:" OPTION
-do
- case $OPTION in
- h)
- usage
- exit 0
- ;;
-
- N)
- PACKAGE_NAME=$OPTARG
- COMMAND+="-N ${PACKAGE_NAME} "
- ;;
-
- n)
- PACKAGE_SHORT_NAME=$OPTARG
- COMMAND+="-n ${PACKAGE_SHORT_NAME} "
- ;;
-
- v)
- PACKAGE_VERSION=$OPTARG
- COMMAND+="-v ${PACKAGE_VERSION} "
- ;;
-
- p)
- TARGET_BUILD_PATH=$OPTARG
- COMMAND+="-p ${TARGET_BUILD_PATH} "
- ;;
-
- t)
- TAG=$OPTARG
- COMMAND+="-t ${TAG} "
- ;;
-
- m)
- MAINTAINER=$OPTARG
- COMMAND+="-m ${MAINTAINER} "
- ;;
-
- d)
- DEPENDENCIES=$OPTARG
- COMMAND+="-d ${DEPENDENCIES} "
- ;;
-
- A)
- ARCH=$OPTARG
- COMMAND+="-A ${ARCH} "
- ;;
-
- C)
- COMMAND+="-C "
- clean
- exit 0
- ;;
- esac
-done
-
-# Constructing script variables
-DEB_PACK_BASE_PATH="f_${PACKAGE_SHORT_NAME}/package/${PACKAGE_NAME}_${PACKAGE_VERSION}"
-echo ${DEB_PACK_BASE_PATH} >> "$BUILD_HISTORY"
-TARGET_INSTALL_PATH="/usr/share/java/${PACKAGE_SHORT_NAME}/"
-DEB_PACK_CONTENT_PATH="${DEB_PACK_BASE_PATH}/usr/share/java/${PACKAGE_SHORT_NAME}/"
-DEB_PACK_CONFIG_PATH="${DEB_PACK_BASE_PATH}/etc/${PACKAGE_SHORT_NAME}"
-TARGET_TAR=$(ls ${TARGET_BUILD_PATH}*.tar.gz)
-TARGET_TAR="${TARGET_TAR##*/}"
-TAR_PATH="${TARGET_TAR%.*}"
-TAR_PATH="${TAR_PATH%.*}"
-if [ -e $DEB_PACK_BASE_PATH ]; then
- rm -R $DEB_PACK_BASE_PATH
-fi
-
-# Create Deb pack content and configuration
-mkdir -p ${DEB_PACK_CONTENT_PATH}
-cp ${TARGET_BUILD_PATH}${TARGET_TAR} ${DEB_PACK_CONTENT_PATH}
-tar -xzf ${DEB_PACK_CONTENT_PATH}${TARGET_TAR} -C ${DEB_PACK_CONTENT_PATH}
-rm ${DEB_PACK_CONTENT_PATH}${TARGET_TAR}
-mv ${DEB_PACK_CONTENT_PATH}${TAR_PATH}/* ${DEB_PACK_CONTENT_PATH}.
-rm -R ${DEB_PACK_CONTENT_PATH}${TAR_PATH}
-
-# Crate and populate Deb pack config target
-mkdir -p ${DEB_PACK_CONFIG_PATH}/etc
-mv ${DEB_PACK_CONTENT_PATH}etc/* ${DEB_PACK_CONFIG_PATH}/etc/
-rm -R ${DEB_PACK_CONTENT_PATH}etc
-mkdir -p ${DEB_PACK_CONFIG_PATH}/configuration
-mv ${DEB_PACK_CONTENT_PATH}configuration/* ${DEB_PACK_CONFIG_PATH}/configuration/
-rm -R ${DEB_PACK_CONTENT_PATH}configuration
-
-# Set package permisions
-find ${DEB_PACK_CONTENT_PATH} -type d -print -exec chmod 755 {} \;
-find ${DEB_PACK_CONFIG_PATH}/etc/ -type f -print -exec chmod 644 {} \;
-find ${DEB_PACK_CONFIG_PATH}/etc/ -type d -print -exec chmod 755 {} \;
-
-# Create package usr/bin odl script
-mkdir "${DEB_PACK_BASE_PATH}/usr/bin"
-chmod 755 "${DEB_PACK_BASE_PATH}/usr/bin"
-make-DEBIAN_bin > "${DEB_PACK_BASE_PATH}/usr/bin/odl"
-chmod 755 "${DEB_PACK_BASE_PATH}/usr/bin/odl"
-
-# Create Deb pack install meta-data
-mkdir "${DEB_PACK_BASE_PATH}/DEBIAN"
-make-DEBIAN_control > "${DEB_PACK_BASE_PATH}/DEBIAN/control"
-make-DEBIAN_conffiles > "${DEB_PACK_BASE_PATH}/DEBIAN/conffiles"
-mkdir -p "${DEB_PACK_BASE_PATH}/usr/share/doc/${PACKAGE_SHORT_NAME}"
-make-DEBIAN_copyright > "${DEB_PACK_BASE_PATH}/usr/share/doc/${PACKAGE_SHORT_NAME}/copyright"
-make-DEBIAN_changelog > "${DEB_PACK_BASE_PATH}/usr/share/doc/${PACKAGE_SHORT_NAME}/changelog.Debian"
-
-# Create Deb pack post install symlinks and usr/bin scripts
-make-DEBIAN_postinst > "${DEB_PACK_BASE_PATH}/DEBIAN/postinst"
-chmod 755 "${DEB_PACK_BASE_PATH}/DEBIAN/postinst"
-mkdir -p "${DEB_PACK_BASE_PATH}/usr/bin"
diff --git a/fuel/build/opendaylight/odl_maven/settings.xml b/fuel/build/opendaylight/odl_maven/settings.xml
deleted file mode 100644
index 35a444264..000000000
--- a/fuel/build/opendaylight/odl_maven/settings.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
-
- <profiles>
- <profile>
- <id>opendaylight-release</id>
- <repositories>
- <repository>
- <releases>
- <enabled>true</enabled>
- <updatePolicy>never</updatePolicy>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- <id>opendaylight-mirror</id>
- <name>opendaylight-mirror</name>
- <url>http://nexus.opendaylight.org/content/groups/public/</url>
- </repository>
- </repositories>
- </profile>
-
- <profile>
- <id>opendaylight-snapshots</id>
- <repositories>
- <repository>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- <id>opendaylight-snapshot</id>
- <name>opendaylight-snapshot</name>
- <url>http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url>
- </repository>
- </repositories>
- </profile>
- </profiles>
-
- <activeProfiles>
- <activeProfile>opendaylight-release</activeProfile>
- <activeProfile>opendaylight-snapshots</activeProfile>
- </activeProfiles>
-</settings>
diff --git a/fuel/build/patch-packages/Makefile b/fuel/build/patch-packages/Makefile
index bd3a43717..339c9e7cf 100644
--- a/fuel/build/patch-packages/Makefile
+++ b/fuel/build/patch-packages/Makefile
@@ -8,7 +8,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-SUBDIRS := debootstrap novnc neutron-common
+SUBDIRS :=
SUBCLEAN = $(addsuffix .clean,$(SUBDIRS))
.PHONY: $(SUBDIRS) $(SUBCLEAN) clean
diff --git a/fuel/build/patch-packages/debootstrap/Makefile b/fuel/build/patch-packages/debootstrap/Makefile
deleted file mode 100644
index 010931225..000000000
--- a/fuel/build/patch-packages/debootstrap/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 udebPackage
- @rm -rf *.udeb
- @rm -rf patch-replacements
- @rm -rf .udebpackage
-
-.PHONY: release
-release:
- ../tools/udeb_unpack debootstrap-udeb_1.0.4*.udeb $(ORIGISO)
- patch -s -p0 < debootstrap.patch
- ../tools/udeb_pack $(REVSTATE)
- @cp *.udeb $(UDEB_DEST)
diff --git a/fuel/build/patch-packages/debootstrap/debootstrap.patch b/fuel/build/patch-packages/debootstrap/debootstrap.patch
deleted file mode 100644
index 62342c96c..000000000
--- a/fuel/build/patch-packages/debootstrap/debootstrap.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- udebPackage/usr/share/debootstrap/scripts/gutsy.orig 2014-11-10 18:21:37.000000000 +0000
-+++ udebPackage/usr/share/debootstrap/scripts/gutsy 2015-04-15 09:28:44.290437000 +0000
-@@ -112,7 +112,8 @@
-
- p; progress $baseprog $bases INSTCORE "Installing core packages" #2
- ln -sf mawk "$TARGET/usr/bin/awk"
-- x_core_install base-files base-passwd
-+ x_core_install base-passwd
-+ x_core_install base-files
- p; progress $baseprog $bases INSTCORE "Installing core packages" #3
- x_core_install dpkg
-
diff --git a/fuel/build/patch-packages/neutron-common/Makefile b/fuel/build/patch-packages/neutron-common/Makefile
deleted file mode 100644
index e9d43a4c0..000000000
--- a/fuel/build/patch-packages/neutron-common/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-TOP := $(shell pwd)
-
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
- @rm -rf package
- @rm -rf *.deb
- @rm -rf patch-replacements
- @rm -rf .package
-
-.PHONY: release
-release:
- ../tools/deb_unpack neutron-common_*.deb $(ORIGISO)
- patch -s -p0 < quota.patch
- ../tools/deb_pack $(REVSTATE)
- @cp *.deb ../release/packages
- @cat patch-replacements >> ../release/patch-replacements
diff --git a/fuel/build/patch-packages/neutron-common/quota.patch b/fuel/build/patch-packages/neutron-common/quota.patch
deleted file mode 100644
index 6f179f0ab..000000000
--- a/fuel/build/patch-packages/neutron-common/quota.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-*** package/etc/neutron/neutron.conf.orig 2015-05-25 15:50:09.933131041 +0200
---- package/etc/neutron/neutron.conf 2015-05-25 15:55:07.859210010 +0200
-***************
-*** 502,518 ****
- # default_quota = -1
-
- # Number of networks allowed per tenant. A negative value means unlimited.
-! # quota_network = 10
-
- # Number of subnets allowed per tenant. A negative value means unlimited.
-! # quota_subnet = 10
-
- # Number of ports allowed per tenant. A negative value means unlimited.
- # quota_port = 50
-
- # Number of security groups allowed per tenant. A negative value means
- # unlimited.
-! # quota_security_group = 10
-
- # Number of security group rules allowed per tenant. A negative value means
- # unlimited.
---- 502,521 ----
- # default_quota = -1
-
- # Number of networks allowed per tenant. A negative value means unlimited.
-! # This quota modified by OPNFV: 10 -> 50
-! quota_network = 50
-
- # Number of subnets allowed per tenant. A negative value means unlimited.
-! # This quota modified by OPNFV: 10 -> 50
-! quota_subnet = 50
-
- # Number of ports allowed per tenant. A negative value means unlimited.
- # quota_port = 50
-
- # Number of security groups allowed per tenant. A negative value means
- # unlimited.
-! # This quota modified by OPNFV: 10 -> 50
-! quota_security_group = 50
-
- # Number of security group rules allowed per tenant. A negative value means
- # unlimited.
-***************
-*** 538,547 ****
- # quota_health_monitor = -1
-
- # Number of routers allowed per tenant. A negative value means unlimited.
-! # quota_router = 10
-
- # Number of floating IPs allowed per tenant. A negative value means unlimited.
-! # quota_floatingip = 50
-
- # Number of firewalls allowed per tenant. A negative value means unlimited.
- # quota_firewall = 1
---- 541,552 ----
- # quota_health_monitor = -1
-
- # Number of routers allowed per tenant. A negative value means unlimited.
-! # This quota modified by OPNFV: 10 -> 50
-! quota_router = 50
-
- # Number of floating IPs allowed per tenant. A negative value means unlimited.
-! # This quota modified by OPNFV: 50 -> 100
-! quota_floatingip = 100
-
- # Number of firewalls allowed per tenant. A negative value means unlimited.
- # quota_firewall = 1
diff --git a/fuel/build/patch-packages/novnc/Makefile b/fuel/build/patch-packages/novnc/Makefile
deleted file mode 100644
index 16c0196e9..000000000
--- a/fuel/build/patch-packages/novnc/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-# This is a temporary patch which add missing files
-# inside novnc ubuntu package.
-# Related bug: https://bugs.launchpad.net/fuel/+bug/1433894
-TOP := $(shell pwd)
-
-.PHONY: all
-all:
-
-.PHONY: clean
-clean:
- @rm -rf package
- @rm -rf *.deb
- @rm -rf patch-replacements
- @rm -rf .package
-
-.PHONY: release
-release:
- ../tools/deb_unpack novnc_0.5.1*.deb $(ORIGISO)
- ./fix-missing.sh
- ../tools/deb_pack $(REVSTATE)
- @cp *.deb ../release/packages
- @cat patch-replacements >> ../release/patch-replacements
diff --git a/fuel/build/patch-packages/novnc/fix-missing.sh b/fuel/build/patch-packages/novnc/fix-missing.sh
deleted file mode 100755
index 61ef1db14..000000000
--- a/fuel/build/patch-packages/novnc/fix-missing.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-MISSING_FILES="keyboard.js keysymdef.js keysym.js"
-NOVNC_SOURCE="http://raw.githubusercontent.com/kanaka/noVNC/v0.5.1/include"
-
-for file in $MISSING_FILES
-do
- wget -P package/usr/share/novnc/include/ "$NOVNC_SOURCE/$file"
-done
diff --git a/fuel/ci/README b/fuel/ci/README
index 3525d4da9..aab823bc0 100644
--- a/fuel/ci/README
+++ b/fuel/ci/README
@@ -16,8 +16,91 @@ There are two Fuel@OPNF autonomous scripts fo this, complying to the OPNFV CI pi
For more info on usage:
./build.sh -h
-./deploy.sh -h
+sudo ./deploy.sh -h
+python deploy.py -h
-To be able to deploy on a certain metal environment there needs to be a Deplyment Environment Adaptor" executable with propper added to $PATH such that
-deploy.sh can call it by $dea [options] as indicated by ./deploy -h.
+usage: python deploy.py [-h] [-nf] [-nh] [-fo] [-co] [-c] [-iso [ISO_FILE]]
+ [-dea [DEA_FILE]] [-dha [DHA_FILE]] [-s STORAGE_DIR]
+ [-b PXE_BRIDGE] [-p FUEL_PLUGINS_DIR]
+optional arguments:
+ -h, --help show this help message and exit
+ -nf Do not install Fuel Master (and Node VMs when using
+ libvirt)
+ -nh Don't run health check after deployment
+ -fo Install Fuel Master only (and Node VMs when using
+ libvirt)
+ -co Cleanup VMs and Virtual Networks according to what is
+ defined in DHA
+ -c Cleanup after deploy
+ -iso [ISO_FILE] ISO File [default: OPNFV.iso]
+ -dea [DEA_FILE] Deployment Environment Adapter: dea.yaml
+ -dha [DHA_FILE] Deployment Hardware Adapter: dha.yaml
+ -s STORAGE_DIR Storage Directory [default: images]
+ -b PXE_BRIDGE Linux Bridge for booting up the Fuel Master VM
+ [default: pxebr]
+ -p FUEL_PLUGINS_DIR Fuel Plugins directory
+
+
+
+* EXAMPLES:
+
+- Install Fuel Master and deploy OPNFV Cloud from scratch on Hardware Environment:
+
+ sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr
+
+
+- Install Fuel Master and deploy OPNFV Cloud from scratch on Virtual Environment:
+
+ sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images
+
+
+- Deploy OPNFV Cloud on an already active Environment where Fuel Master VM is running so no need to install Fuel again:
+
+ sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml
+
+ => with plugin installation
+ sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml
+
+ => with cleanup after deployment is finished
+ sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -c
+
+ => no healthcheck after deployment is completed
+ sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -nh
+
+
+- Install Fuel Master only (and Node VMs when using virtual environment):
+
+ => for virtual environment:
+ sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images
+
+ => for hardware environment:
+ sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr
+
+
+- Cleanup a running OPNFV environment:
+
+ sudo ./deploy.sh -co -dha ~/CONF/virtual/dha.yaml
+
+
+* WARNINGS:
+
+=> If optional argument -s <storage_dir> is not specified, Autodeployment will use
+"<current_working_dir>/images" as default, and it will create it, if it hasn't been created before
+
+=> If optional argument -b <pxe_bridge> is not specified, Autodeployment will use "pxebr" as default,
+if the bridge does not exist, the application will terminate with an error message
+
+=> If argument -iso [ISO_FILE] is not specified, Autodeployment will use "<current_working_dir>/OPNFV.iso"
+as default, if the iso file does not exist, the application will terminate with an error message
+
+=> If argument -dea [DEA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dea.yaml"
+as default, if DEA file does not exist, the application will terminate with an error message
+
+=> If argument -dha [DHA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dha.yaml"
+as default, if DHA file does not exist, the application will terminate with an error message
+
+=> Optional argument -b PXE_BRIDGE is not required for Autodeployment in virtual environment,
+ even if it is specified it will not be used at all because virtual environment is using a different virtual network setup
+
+=> If optional argument -p FUEL_PLUGINS_DIR is not specified, no external plugins will be installed in Fuel \ No newline at end of file
diff --git a/fuel/ci/build.sh b/fuel/ci/build.sh
index 51ccdae5b..f8e164a76 100755
--- a/fuel/ci/build.sh
+++ b/fuel/ci/build.sh
@@ -80,6 +80,32 @@ EOF
############################################################################
############################################################################
+# Begin of string xor function
+#
+function xor()
+{
+ local res=(`echo "$1" | sed "s/../0x& /g"`)
+ shift 1
+ while [[ "$1" ]]; do
+ local one=(`echo "$1" | sed "s/../0x& /g"`)
+ local count1=${#res[@]}
+ if [ $count1 -lt ${#one[@]} ]
+ then
+ count1=${#one[@]}
+ fi
+ for (( i = 0; i < $count1; i++ ))
+ do
+ res[$i]=$((${one[$i]:-0} ^ ${res[$i]:-0}))
+ done
+ shift 1
+ done
+ printf "%02x" "${res[@]}"
+}
+#
+# END of string xor function
+############################################################################
+
+############################################################################
# BEGIN of variables to customize
#
BUILD_BASE=$(readlink -e ../build/)
@@ -87,7 +113,7 @@ RESULT_DIR="${BUILD_BASE}/release"
BUILD_SPEC="${BUILD_BASE}/config.mk"
CACHE_DIR="cache"
LOCAL_CACHE_ARCH_NAME="fuel-cache"
-REMOTE_CACHE_ARCH_NAME="fuel_cache-$(md5sum ${BUILD_SPEC}| cut -f1 -d " ")"
+
REMOTE_ACCESS_METHD=curl
INCLUDE_DIR=../include
#
@@ -117,6 +143,14 @@ BUILD_DIR=
BUILD_LOG=
BUILD_VERSION=
MAKE_ARGS=
+FUEL_GIT_SRC="$(make -f ../build/config.mk get-fuel-repo | cut -d " " -f1)"
+FUEL_GIT_BRANCH="$(make -f ../build/config.mk get-fuel-repo | cut -d " " -f2)"
+CACHE_MD5=$(md5sum ../build/cache.mk | cut -f1 -d " ")
+CONFIG_MD5=$(md5sum ../build/config.mk | cut -f1 -d " ")
+FUEL_COMMIT_ID=$(git ls-remote $FUEL_GIT_SRC -t $FUEL_GIT_BRANCH | cut -d $'\t' -f1)
+REMOTE_CACHE_ARCH_HASH_TMP="$(xor $CACHE_MD5 $CONFIG_MD5)"
+REMOTE_CACHE_ARCH_HASH="$(xor $REMOTE_CACHE_ARCH_HASH_TMP $FUEL_COMMIT_ID)"
+REMOTE_CACHE_ARCH_NAME="fuel_cache-$REMOTE_CACHE_ARCH_HASH"
#
# END of script assigned variables
############################################################################
@@ -135,53 +169,53 @@ source ${INCLUDE_DIR}/build.sh.debug
while getopts "s:c:v:f:l:r:RtTh" OPTION
do
case $OPTION in
- h)
- usage
- rc=0
- exit $rc
- ;;
-
- s)
- BUILD_SPEC=${OPTARG}
- ;;
-
- c)
- BUILD_CACHE_URI=${OPTARG}
- ;;
-
- l)
- BUILD_LOG=${OPTARG}
- ;;
-
- v)
- BUILD_VERSION=${OPTARG}
- ;;
-
- f)
- BUILD_FLAGS=${OPTARG}
- ;;
-
- r) REMOTE_ACCESS_METHD=${OPTARG}
- ;;
-
- R)
- RECURSIVE=1
- ;;
-
- t)
- INTEGRATION_TEST=1
- ;;
-
- T)
- INTEGRATION_TEST=1
- FULL_INTEGRATION_TEST=1
- ;;
-
- *)
- echo "${OPTION} is not a valid argument"
- rc=100
- exit $rc
- ;;
+ h)
+ usage
+ rc=0
+ exit $rc
+ ;;
+
+ s)
+ BUILD_SPEC=${OPTARG}
+ ;;
+
+ c)
+ BUILD_CACHE_URI=${OPTARG}
+ ;;
+
+ l)
+ BUILD_LOG=${OPTARG}
+ ;;
+
+ v)
+ BUILD_VERSION=${OPTARG}
+ ;;
+
+ f)
+ BUILD_FLAGS=${OPTARG}
+ ;;
+
+ r) REMOTE_ACCESS_METHD=${OPTARG}
+ ;;
+
+ R)
+ RECURSIVE=1
+ ;;
+
+ t)
+ INTEGRATION_TEST=1
+ ;;
+
+ T)
+ INTEGRATION_TEST=1
+ FULL_INTEGRATION_TEST=1
+ ;;
+
+ *)
+ echo "${OPTION} is not a valid argument"
+ rc=100
+ exit $rc
+ ;;
esac
done
@@ -191,44 +225,44 @@ fi
for ((i=0; i<${#BUILD_FLAGS};i++)); do
case ${BUILD_FLAGS:$i:1} in
- s)
- rc=0
- exit $rc
- ;;
-
- f)
- rc=1
- exit $rc
- ;;
-
- t)
- UNIT_TEST=1
- ;;
-
- i)
- INTERACTIVE=1
- ;;
-
- P)
- POPULATE_CACHE=1
- ;;
-
- d)
- DETACH=1
- echo "Detach is not yet supported - exiting ...."
- rc=100
- exit $rc
- ;;
-
- D)
- DEBUG=1
- ;;
-
- *)
- echo "${BUILD_FLAGS:$i:1} is not a valid build flag - exiting ...."
- rc=100
- exit $rc
- ;;
+ s)
+ rc=0
+ exit $rc
+ ;;
+
+ f)
+ rc=1
+ exit $rc
+ ;;
+
+ t)
+ UNIT_TEST=1
+ ;;
+
+ i)
+ INTERACTIVE=1
+ ;;
+
+ P)
+ POPULATE_CACHE=1
+ ;;
+
+ d)
+ DETACH=1
+ echo "Detach is not yet supported - exiting ...."
+ rc=100
+ exit $rc
+ ;;
+
+ D)
+ DEBUG=1
+ ;;
+
+ *)
+ echo "${BUILD_FLAGS:$i:1} is not a valid build flag - exiting ...."
+ rc=100
+ exit $rc
+ ;;
esac
done
@@ -252,13 +286,13 @@ fi
if [ ! -z ${BUILD_LOG} ]; then
if [[ ${RECURSIVE} -ne 1 ]]; then
- set +e
- eval $0 -R $@ > ${BUILD_LOG} 2>&1
- rc=$?
- set -e
- if [ $rc -ne 0]; then
- exit $rc
- fi
+ set +e
+ eval $0 -R $@ > ${BUILD_LOG} 2>&1
+ rc=$?
+ set -e
+ if [ $rc -ne 0]; then
+ exit $rc
+ fi
fi
fi
@@ -284,47 +318,86 @@ echo $$ > ${LOCK_FILE}
if [ ! -z ${BUILD_CACHE_URI} ]; then
if [ ${POPULATE_CACHE} -ne 1 ]; then
- rm -rf ${CACHE_TMP}/cache
- mkdir -p ${CACHE_TMP}/cache
- echo "Downloading cach file ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME} ..."
- set +e
- ${REMOTE_ACCESS_METHD} -o ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz
- rc=$?
- set -e
- if [ $rc -ne 0 ]; then
- echo "Remote cache does not exist, or is not accessible - a new cache will be built ..."
- POPULATE_CACHE=1
- else
- echo "Unpacking cache file ..."
- tar -C ${CACHE_TMP}/cache -xvf ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz
- cp ${CACHE_TMP}/cache/cache/.versions ${BUILD_BASE}/.
- set +e
- make -C ${BUILD_BASE} validate-cache;
- rc=$?
- set -e
-
- if [ $rc -ne 0 ]; then
- echo "Cache invalid - a new cache will be built "
- POPULATE_CACHE=1
- else
- cp -rf ${CACHE_TMP}/cache/cache/. ${BUILD_BASE}
- fi
- rm -rf ${CACHE_TMP}/cache
- fi
+ rm -rf ${CACHE_TMP}/cache
+ mkdir -p ${CACHE_TMP}/cache
+ echo "Downloading cache archive ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME} ..."
+ set +e
+ ${REMOTE_ACCESS_METHD} -o ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz
+ rc=$?
+ set -e
+ if [ $rc -ne 0 ]; then
+ echo "Remote cache does not exist, or is not accessible - a new cache will be built ..."
+ POPULATE_CACHE=1
+ else
+ echo "Unpacking cache archive ..."
+ set +e
+ tar -C ${CACHE_TMP}/cache -xvf ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz
+ rc=$?
+ set -e
+ if [ $rc -ne 0 ]; then
+ echo "WARNING: The cache seems to be corrupt or has trailing garbage, will try to use brute force"
+ echo "Info about the cache below:"
+ set +e
+ file ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz
+ tar -C ${CACHE_TMP}/cache -tvf ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz
+ set -e
+ echo "Current time is: `date`"
+ set +e
+ pushd ${CACHE_TMP}/cache
+ gunzip -dcq ${CACHE_TMP}/cache/${LOCAL_CACHE_ARCH_NAME}.tgz | tar -xvf -
+ rc=$?
+ set -e
+ popd
+ if [ $rc -ne 0 ]; then
+ echo "ERROR: Not able to resolve the cache corruption"
+ POPULATE_CACHE=1
+ else
+ echo "The chache corruption was resolved"
+ cp ${CACHE_TMP}/cache/cache/.versions ${BUILD_BASE}/.
+ set +e
+ make -C ${BUILD_BASE} validate-cache;
+ rc=$?
+ set -e
+ if [ $rc -ne 0 ]; then
+ echo "Cache invalid - a new cache will be built "
+ POPULATE_CACHE=1
+ else
+ echo "Cache is up to date and will be used"
+ cp -rf ${CACHE_TMP}/cache/cache/. ${BUILD_BASE}
+ fi
+ fi
+ else
+ echo "Cache archive is intact"
+ cp ${CACHE_TMP}/cache/cache/.versions ${BUILD_BASE}/.
+ set +e
+ make -C ${BUILD_BASE} validate-cache;
+ rc=$?
+ set -e
+
+ if [ $rc -ne 0 ]; then
+ echo "Cache invalid - a new cache will be built "
+ POPULATE_CACHE=1
+ else
+ echo "Cache is up to date and will be used"
+ cp -rf ${CACHE_TMP}/cache/cache/. ${BUILD_BASE}
+ fi
+ fi
+ rm -rf ${CACHE_TMP}/cache
+ fi
fi
fi
if [ ${POPULATE_CACHE} -eq 1 ]; then
if [ ${DEBUG} -eq 0 ]; then
- set +e
- cd ${BUILD_BASE} && make clean
- rc=$?
- set -e
- if [ $rc -ne 0 ]; then
- echo "Build - make clean failed, exiting ..."
- rc=100
- exit $rc
- fi
+ set +e
+ cd ${BUILD_BASE} && make clean
+ rc=$?
+ set -e
+ if [ $rc -ne 0 ]; then
+ echo "Build - make clean failed, exiting ..."
+ rc=100
+ exit $rc
+ fi
fi
fi
@@ -352,12 +425,12 @@ if [ ${DEBUG} -eq 0 ]; then
rc=$?
set -e
if [ $rc -gt 0 ]; then
- echo "Build: make all failed, exiting ..."
- rc=200
- exit $rc
+ echo "Build: make all failed, exiting ..."
+ rc=200
+ exit $rc
fi
else
-debug_make
+ debug_make
fi
set +e
make -C ${BUILD_BASE} prepare-cache
@@ -377,11 +450,20 @@ cp ${RESULT_DIR}/*.iso* ${BUILD_DIR}
if [ $POPULATE_CACHE -eq 1 ]; then
if [ ! -z ${BUILD_CACHE_URI} ]; then
- echo "Building cache ..."
- tar --dereference -C ${BUILD_BASE} -caf ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${CACHE_DIR}
- echo "Uploading cache ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}"
- ${REMOTE_ACCESS_METHD} -T ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz
- rm ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz
+ echo "Building cache ..."
+ tar --dereference -C ${BUILD_BASE} -caf ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${CACHE_DIR}
+ set +e
+ tar -C ${CACHE_TMP}/cache -tvf ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz
+ rc=$?
+ set -e
+ if [ $rc -ne 0 ]; then
+ echo "WARNING the cache archive generated seems to be corrupt, or containing trailing garbage"
+ else
+ echo "The Cache archive build is intact"
+ fi
+ echo "Uploading cache ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}"
+ ${REMOTE_ACCESS_METHD} -T ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz ${BUILD_CACHE_URI}/${REMOTE_CACHE_ARCH_NAME}.tgz
+ rm ${BUILD_BASE}/${LOCAL_CACHE_ARCH_NAME}.tgz
fi
fi
echo "Success!!!"
diff --git a/fuel/ci/deploy.sh b/fuel/ci/deploy.sh
index df232497b..d5b70d0d6 100755
--- a/fuel/ci/deploy.sh
+++ b/fuel/ci/deploy.sh
@@ -1,12 +1,8 @@
-#!/bin/bash -x
-set -o xtrace
+#!/bin/bash
set -o errexit
-set -o nounset
-set -o pipefail
-
-WORKSPACE=$(readlink -e ..)
-ISO_LOCATION="$(readlink -f $(find $WORKSPACE -iname 'fuel*iso' -type f))"
-INTERFACE="fuel"
-
-cd "${WORKSPACE}/deploy"
-./deploy_fuel.sh "$ISO_LOCATION" $INTERFACE 2>&1 | tee deploy_fuel.log
+topdir=$(dirname $(readlink -f $BASH_SOURCE))
+deploydir=$(cd ${topdir}/../deploy; pwd)
+pushd ${deploydir} > /dev/null
+echo -e "python deploy.py $@\n"
+python deploy.py $@
+popd > /dev/null \ No newline at end of file
diff --git a/fuel/deploy/README b/fuel/deploy/README
new file mode 100644
index 000000000..167078bf8
--- /dev/null
+++ b/fuel/deploy/README
@@ -0,0 +1,186 @@
+
+======== PREREQUISITES ========
+
+the following dependencies and python modules are required to be installed:
+
+- for Ubuntu:
+
+sudo apt-get install -y libvirt-bin qemu-kvm python-pip fuseiso mkisofs
+sudo apt-get install -y python-dev libz-dev libxml2-dev libxslt-dev
+sudo pip install pyyaml netaddr paramiko lxml scp pycrypto ecdsa
+
+During libvirt install the user is added to the libvirtd group, so you have to
+logout then login back again
+
+
+======== PREPARE and RUN the OPNFV Autodeployment ========
+
+
+--- Step.1 Prepare the DEA and DHA configuration files and the OPNFV ISO file
+
+Make sure that you are using the right DEA - Deployment Environment Adapter and
+DHA - Deployment Hardware Adapter configuration files, the ones provided are only templates
+you will have to modify them according to your needs
+
+- If wou wish to deploy OPNFV cloud environment on top of KVM/Libvirt
+ virtualization use as example the following configuration files:
+
+ * SR1 configuration files
+
+ => templates/virtual_environment/conf/ha
+ dea.yaml
+ dha.yaml
+
+
+ * ARNO configuration files
+
+ => templates/virtual_environment/old_conf/ha
+ dea.yaml
+ dha.yaml
+
+ => templates/virtual_environment/old_conf/multinode
+ dea.yaml
+ dha.yaml
+
+
+- If you wish to deploy OPNFV cloud environment on hardware
+ use as example the following configuration files:
+
+ * SR1 configuration files
+
+ => templates/hardware_environment/conf/ericsson_montreal_lab/ha
+ dea.yaml
+ dha.yaml
+
+ => templates/hardware_environment/conf/linux_foundation_lab/pod1/ha
+ dea.yaml
+ dha.yaml
+
+ => templates/hardware_environment/conf/linux_foundation_lab/pod2/ha
+ dea.yaml
+ dha.yaml
+
+
+ * ARNO configuration files
+
+ => templates/hardware_environment/old_conf/ericsson_montreal_lab/ha
+ dea.yaml
+ dha.yaml
+
+ => templates/hardware_environment/old_conf/ericsson_montreal_lab/multinode
+ dea.yaml
+ dha.yaml
+
+ => templates/hardware_environment/old_conf/linux_foundation_lab/ha
+ dea.yaml
+ dha.yaml
+
+ => templates/hardware_environment/old_conf/linux_foundation_lab/multinode
+ dea.yaml
+ dha.yaml
+
+
+--- Step.2 Run Autodeployment ---
+
+usage: python deploy.py [-h] [-nf] [-nh] [-fo] [-co] [-c] [-iso [ISO_FILE]]
+ [-dea [DEA_FILE]] [-dha [DHA_FILE]] [-s STORAGE_DIR]
+ [-b PXE_BRIDGE] [-p FUEL_PLUGINS_DIR]
+
+optional arguments:
+ -h, --help show this help message and exit
+ -nf Do not install Fuel Master (and Node VMs when using libvirt)
+ -nh Don't run health check after deployment
+ -fo Install Fuel Master only (and Node VMs when using libvirt)
+ -co Cleanup VMs and Virtual Networks according to what is
+ defined in DHA
+ -c Cleanup after deploy
+ -iso [ISO_FILE] ISO File [default: OPNFV.iso]
+ -dea [DEA_FILE] Deployment Environment Adapter: dea.yaml
+ -dha [DHA_FILE] Deployment Hardware Adapter: dha.yaml
+ -s STORAGE_DIR Storage Directory [default: images]
+ -b PXE_BRIDGE Linux Bridge for booting up the Fuel Master VM
+ [default: pxebr]
+ -p FUEL_PLUGINS_DIR Fuel Plugins directory
+
+
+* EXAMPLES:
+
+- Install Fuel Master and deploy OPNFV Cloud from scratch on Hardware Environment:
+
+ sudo python deploy.py -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr
+
+
+- Install Fuel Master and deploy OPNFV Cloud from scratch on Virtual Environment:
+
+ sudo python deploy.py -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images
+
+
+- Deploy OPNFV Cloud on an already active Environment where Fuel Master VM is running so no need to install Fuel again:
+
+ sudo python deploy.py -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml
+
+ => with plugin installation
+ sudo python deploy.py -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml
+
+ => with cleanup after deployment is finished
+ sudo python deploy.py -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -c
+
+ => no healthcheck after deployment is completed
+ sudo python deploy.py -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -nh
+
+
+- Install Fuel Master only (and Node VMs when using virtual environment):
+
+ => for virtual environment:
+ sudo python deploy.py -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images
+
+ => for hardware environment:
+ sudo python deploy.py -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr
+
+
+- Cleanup a running OPNFV environment:
+
+ sudo python deploy.py -co -dha ~/CONF/virtual/dha.yaml
+
+
+* WARNINGS:
+
+=> If optional argument -s <storage_dir> is not specified, Autodeployment will use
+"<current_working_dir>/images" as default, and it will create it, if it hasn't been created before
+
+=> If optional argument -b <pxe_bridge> is not specified, Autodeployment will use "pxebr" as default,
+if the bridge does not exist, the application will terminate with an error message
+
+=> If argument -iso [ISO_FILE] is not specified, Autodeployment will use "<current_working_dir>/OPNFV.iso"
+as default, if the iso file does not exist, the application will terminate with an error message
+
+=> If argument -dea [DEA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dea.yaml"
+as default, if DEA file does not exist, the application will terminate with an error message
+
+=> If argument -dha [DHA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dha.yaml"
+as default, if DHA file does not exist, the application will terminate with an error message
+
+=> Optional argument -b PXE_BRIDGE is not required for Autodeployment in virtual environment,
+ even if it is specified it will not be used at all because virtual environment is using a different virtual network setup
+
+=> If optional argument -p FUEL_PLUGINS_DIR is not specified, no external plugins will be installed in Fuel
+
+
+--- Networking considerations ---
+
+For Virtual Environment:
+
+There are some NAT, IPTABLE conflicts on the edge of libvirt bridging and Fuel Master
+according to http://wiki.libvirt.org/page/Networking
+netfilter on the bridges should be disabled
+
+Add these lines to /etc/sysctl.conf
+
+cat >> /etc/sysctl.conf <<EOF
+net.bridge.bridge-nf-call-ip6tables = 0
+net.bridge.bridge-nf-call-iptables = 0
+net.bridge.bridge-nf-call-arptables = 0
+EOF
+
+and then reload configuration:
+sysctl -p /etc/sysctl.conf
diff --git a/fuel/deploy/README.txt b/fuel/deploy/README.txt
deleted file mode 100644
index d392f8f65..000000000
--- a/fuel/deploy/README.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-
-======== How to prepare and run the OPNFV Autodeployment =======
-
-in fuel/build/deploy run these:
-
-
-
---- Step.1 Install prerequisites
-
-sudo ./install-ubuntu-packages.sh
-
-
-
-
-
-
---- Step.2-A If wou want to deploy OPNFV cloud environment on top of KVM/Libvirt virtualization
- run the following environment setup script
-
-sudo python setup_environment.py <storage_directory> <path_to_dha_file>
-
-Example:
- sudo python setup_environment.py /mnt/images dha.yaml
-
-
-
-
-
-
---- Step.2-B If you want to deploy OPNFV cloud environment on baremetal run the
- following environment setup script
-
-sudo python setup_vfuel.py <storage_directory> <path_to_dha_file>
-
-Example:
- sudo python setup_vfuel.py /mnt/images dha.yaml
-
-
-WARNING!:
-setup_vfuel.py adds the following snippet into /etc/network/interfaces
-making sure to replace in setup_vfuel.py interfafe 'p1p1.20' with your actual outbound
-interface in order to provide network access to the Fuel master for DNS and NTP.
-
-iface vfuelnet inet static
- bridge_ports em1
- address 10.40.0.1
- netmask 255.255.255.0
- pre-down iptables -t nat -D POSTROUTING --out-interface p1p1.20 -j MASQUERADE -m comment --comment "vfuelnet"
- pre-down iptables -D FORWARD --in-interface vfuelnet --out-interface p1p1.20 -m comment --comment "vfuelnet"
- post-up iptables -t nat -A POSTROUTING --out-interface p1p1.20 -j MASQUERADE -m comment --comment "vfuelnet"
- post-up iptables -A FORWARD --in-interface vfuelnet --out-interface p1p1.20 -m comment --comment "vfuelnet"
-
-
-
-
-
-
---- Step.3 Start Autodeployment
-Make sure you use the right Deployment Environment Adapter and
-Deployment Hardware Adaper configuration files:
-
- - for baremetal: baremetal/dea.yaml baremetal/dha.yaml
-
- - for libvirt: libvirt/dea.yaml libvirt/dha.yaml
-
-
-sudo python deploy.py [-nf] <isofile> <deafile> <dhafile>
-
-Example:
- sudo python deploy.py ~/ISO/opnfv.iso baremetal/dea.yaml baremetal/dha.yaml
-
diff --git a/fuel/deploy/__init__.py b/fuel/deploy/__init__.py
index e69de29bb..fb73157f9 100644
--- a/fuel/deploy/__init__.py
+++ b/fuel/deploy/__init__.py
@@ -0,0 +1,8 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@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
+###############################################################################
diff --git a/fuel/deploy/baremetal/dea.yaml b/fuel/deploy/baremetal/dea.yaml
deleted file mode 100644
index eb3019cab..000000000
--- a/fuel/deploy/baremetal/dea.yaml
+++ /dev/null
@@ -1,982 +0,0 @@
-title: Deployment Environment Adapter (DEA)
-# DEA API version supported
-version: 1.1
-created: Tue May 5 15:33:07 UTC 2015
-comment: Test environment Ericsson Montreal
-environment_name: opnfv
-environment_mode: multinode
-wanted_release: Juno on Ubuntu 12.04.4
-nodes:
-- id: 1
- interfaces: interface1
- transformations: controller1
- role: controller
-- id: 2
- interfaces: interface1
- transformations: compute1
- role: compute
-fuel:
- ADMIN_NETWORK:
- ipaddress: 10.40.0.2
- netmask: 255.255.255.0
- dhcp_pool_start: 10.40.0.3
- dhcp_pool_end: 10.40.0.254
- DNS_UPSTREAM: 10.118.32.193
- DNS_DOMAIN: opnfvericsson.ca
- DNS_SEARCH: opnfvericsson.ca
- FUEL_ACCESS:
- user: admin
- password: admin
- HOSTNAME: opnfv
- NTP1: 0.ca.pool.ntp.org
- NTP2: 1.ca.pool.ntp.org
- NTP3: 2.ca.pool.ntp.org
-interfaces:
- interface1:
- eth0:
- - fuelweb_admin
- eth2:
- - public
- - management
- - storage
- - private
-transformations:
- controller1:
- - action: add-br
- name: br-eth0
- - action: add-port
- bridge: br-eth0
- name: eth0
- - action: add-br
- name: br-eth1
- - action: add-port
- bridge: br-eth1
- name: eth1
- - action: add-br
- name: br-eth2
- - action: add-port
- bridge: br-eth2
- name: eth2
- - action: add-br
- name: br-eth3
- - action: add-port
- bridge: br-eth3
- name: eth3
- - action: add-br
- name: br-eth4
- - action: add-port
- bridge: br-eth4
- name: eth4
- - action: add-br
- name: br-eth5
- - action: add-port
- bridge: br-eth5
- name: eth5
- - action: add-br
- name: br-ex
- - action: add-br
- name: br-mgmt
- - action: add-br
- name: br-storage
- - action: add-br
- name: br-fw-admin
- - action: add-patch
- bridges:
- - br-eth2
- - br-storage
- tags:
- - 220
- - 0
- vlan_ids:
- - 220
- - 0
- - action: add-patch
- bridges:
- - br-eth2
- - br-mgmt
- tags:
- - 320
- - 0
- vlan_ids:
- - 320
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-fw-admin
- trunks:
- - 0
- - action: add-patch
- bridges:
- - br-eth2
- - br-ex
- tags:
- - 120
- - 0
- vlan_ids:
- - 120
- - 0
- - action: add-br
- name: br-prv
- - action: add-patch
- bridges:
- - br-eth2
- - br-prv
- compute1:
- - action: add-br
- name: br-eth0
- - action: add-port
- bridge: br-eth0
- name: eth0
- - action: add-br
- name: br-eth1
- - action: add-port
- bridge: br-eth1
- name: eth1
- - action: add-br
- name: br-eth2
- - action: add-port
- bridge: br-eth2
- name: eth2
- - action: add-br
- name: br-eth3
- - action: add-port
- bridge: br-eth3
- name: eth3
- - action: add-br
- name: br-eth4
- - action: add-port
- bridge: br-eth4
- name: eth4
- - action: add-br
- name: br-eth5
- - action: add-port
- bridge: br-eth5
- name: eth5
- - action: add-br
- name: br-mgmt
- - action: add-br
- name: br-storage
- - action: add-br
- name: br-fw-admin
- - action: add-patch
- bridges:
- - br-eth2
- - br-storage
- tags:
- - 220
- - 0
- vlan_ids:
- - 220
- - 0
- - action: add-patch
- bridges:
- - br-eth2
- - br-mgmt
- tags:
- - 320
- - 0
- vlan_ids:
- - 320
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-fw-admin
- trunks:
- - 0
- - action: add-br
- name: br-prv
- - action: add-patch
- bridges:
- - br-eth2
- - br-prv
-opnfv:
- compute: {}
- controller: {}
-network:
- networking_parameters:
- base_mac: fa:16:3e:00:00:00
- dns_nameservers:
- - 10.118.32.193
- - 8.8.8.8
- floating_ranges:
- - - 172.16.0.130
- - 172.16.0.254
- gre_id_range:
- - 2
- - 65535
- internal_cidr: 192.168.111.0/24
- internal_gateway: 192.168.111.1
- net_l23_provider: ovs
- segmentation_type: vlan
- vlan_range:
- - 2022
- - 2023
- networks:
- - cidr: 172.16.0.0/24
- gateway: 172.16.0.1
- ip_ranges:
- - - 172.16.0.2
- - 172.16.0.126
- meta:
- assign_vip: true
- cidr: 172.16.0.0/24
- configurable: true
- floating_range_var: floating_ranges
- ip_range:
- - 172.16.0.2
- - 172.16.0.126
- map_priority: 1
- name: public
- notation: ip_ranges
- render_addr_mask: public
- render_type: null
- use_gateway: true
- vlan_start: null
- name: public
- vlan_start: 120
- - cidr: 192.168.0.0/24
- gateway: null
- ip_ranges:
- - - 192.168.0.2
- - 192.168.0.254
- meta:
- assign_vip: true
- cidr: 192.168.0.0/24
- configurable: true
- map_priority: 2
- name: management
- notation: cidr
- render_addr_mask: internal
- render_type: cidr
- use_gateway: false
- vlan_start: 101
- name: management
- vlan_start: 320
- - cidr: 192.168.1.0/24
- gateway: null
- ip_ranges:
- - - 192.168.1.2
- - 192.168.1.254
- meta:
- assign_vip: false
- cidr: 192.168.1.0/24
- configurable: true
- map_priority: 2
- name: storage
- notation: cidr
- render_addr_mask: storage
- render_type: cidr
- use_gateway: false
- vlan_start: 102
- name: storage
- vlan_start: 220
- - cidr: null
- gateway: null
- ip_ranges: []
- meta:
- assign_vip: false
- configurable: false
- map_priority: 2
- name: private
- neutron_vlan_range: true
- notation: null
- render_addr_mask: null
- render_type: null
- seg_type: vlan
- use_gateway: false
- vlan_start: null
- name: private
- vlan_start: null
- - cidr: 10.40.0.0/24
- gateway: null
- ip_ranges:
- - - 10.40.0.3
- - 10.40.0.254
- meta:
- assign_vip: false
- configurable: false
- map_priority: 0
- notation: ip_ranges
- render_addr_mask: null
- render_type: null
- unmovable: true
- use_gateway: true
- name: fuelweb_admin
- vlan_start: null
-settings:
- editable:
- access:
- email:
- description: Email address for Administrator
- label: email
- type: text
- value: admin@localhost
- weight: 40
- metadata:
- label: Access
- weight: 10
- password:
- description: Password for Administrator
- label: password
- type: password
- value: admin
- weight: 20
- tenant:
- description: Tenant (project) name for Administrator
- label: tenant
- regex:
- error: Invalid tenant name
- source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$).*
- type: text
- value: admin
- weight: 30
- user:
- description: Username for Administrator
- label: username
- regex:
- error: Invalid username
- source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$).*
- type: text
- value: admin
- weight: 10
- additional_components:
- ceilometer:
- description: If selected, Ceilometer component will be installed
- label: Install Ceilometer
- type: checkbox
- value: false
- weight: 40
- heat:
- description: ''
- label: ''
- type: hidden
- value: true
- weight: 30
- metadata:
- label: Additional Components
- weight: 20
- murano:
- description: If selected, Murano component will be installed
- label: Install Murano
- restrictions:
- - cluster:net_provider != 'neutron'
- type: checkbox
- value: false
- weight: 20
- sahara:
- description: If selected, Sahara component will be installed
- label: Install Sahara
- type: checkbox
- value: false
- weight: 10
- common:
- auth_key:
- description: Public key(s) to include in authorized_keys on deployed nodes
- label: Public Key
- type: text
- value: ''
- weight: 70
- auto_assign_floating_ip:
- description: If selected, OpenStack will automatically assign a floating IP
- to a new instance
- label: Auto assign floating IP
- restrictions:
- - cluster:net_provider == 'neutron'
- type: checkbox
- value: false
- weight: 40
- compute_scheduler_driver:
- label: Scheduler driver
- type: radio
- value: nova.scheduler.filter_scheduler.FilterScheduler
- values:
- - data: nova.scheduler.filter_scheduler.FilterScheduler
- description: Currently the most advanced OpenStack scheduler. See the OpenStack
- documentation for details.
- label: Filter scheduler
- - data: nova.scheduler.simple.SimpleScheduler
- description: This is 'naive' scheduler which tries to find the least loaded
- host
- label: Simple scheduler
- weight: 40
- debug:
- description: Debug logging mode provides more information, but requires more
- disk space.
- label: OpenStack debug logging
- type: checkbox
- value: false
- weight: 20
- disable_offload:
- description: If set, generic segmentation offload (gso) and generic receive
- offload (gro) on physical nics will be disabled. See ethtool man.
- label: Disable generic offload on physical nics
- restrictions:
- - action: hide
- condition: cluster:net_provider == 'neutron' and networking_parameters:segmentation_type
- == 'gre'
- type: checkbox
- value: true
- weight: 80
- libvirt_type:
- label: Hypervisor type
- type: radio
- value: kvm
- values:
- - data: kvm
- description: Choose this type of hypervisor if you run OpenStack on hardware
- label: KVM
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- - data: qemu
- description: Choose this type of hypervisor if you run OpenStack on virtual
- hosts.
- label: QEMU
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- - data: vcenter
- description: Choose this type of hypervisor if you run OpenStack in a vCenter
- environment.
- label: vCenter
- restrictions:
- - settings:common.libvirt_type.value != 'vcenter' or cluster:net_provider
- == 'neutron'
- weight: 30
- metadata:
- label: Common
- weight: 30
- nova_quota:
- description: Quotas are used to limit CPU and memory usage for tenants. Enabling
- quotas will increase load on the Nova database.
- label: Nova quotas
- type: checkbox
- value: false
- weight: 25
- resume_guests_state_on_host_boot:
- description: Whether to resume previous guests state when the host reboots.
- If enabled, this option causes guests assigned to the host to resume their
- previous state. If the guest was running a restart will be attempted when
- nova-compute starts. If the guest was not running previously, a restart
- will not be attempted.
- label: Resume guests state on host boot
- type: checkbox
- value: true
- weight: 60
- use_cow_images:
- description: For most cases you will want qcow format. If it's disabled, raw
- image format will be used to run VMs. OpenStack with raw format currently
- does not support snapshotting.
- label: Use qcow format for images
- type: checkbox
- value: true
- weight: 50
- corosync:
- group:
- description: ''
- label: Group
- type: text
- value: 226.94.1.1
- weight: 10
- metadata:
- label: Corosync
- restrictions:
- - action: hide
- condition: 'true'
- weight: 50
- port:
- description: ''
- label: Port
- type: text
- value: '12000'
- weight: 20
- verified:
- description: Set True only if multicast is configured correctly on router.
- label: Need to pass network verification.
- type: checkbox
- value: false
- weight: 10
- external_dns:
- dns_list:
- description: List of upstream DNS servers, separated by comma
- label: DNS list
- type: text
- value: 10.118.32.193, 8.8.8.8
- weight: 10
- metadata:
- label: Upstream DNS
- weight: 90
- external_ntp:
- metadata:
- label: Upstream NTP
- weight: 100
- ntp_list:
- description: List of upstream NTP servers, separated by comma
- label: NTP servers list
- type: text
- value: 0.pool.ntp.org, 1.pool.ntp.org
- weight: 10
- kernel_params:
- kernel:
- description: Default kernel parameters
- label: Initial parameters
- type: text
- value: console=ttyS0,9600 console=tty0 rootdelay=90 nomodeset
- weight: 45
- metadata:
- label: Kernel parameters
- weight: 40
- neutron_mellanox:
- metadata:
- enabled: true
- label: Mellanox Neutron components
- toggleable: false
- weight: 50
- plugin:
- label: Mellanox drivers and SR-IOV plugin
- type: radio
- value: disabled
- values:
- - data: disabled
- description: If selected, Mellanox drivers, Neutron and Cinder plugin will
- not be installed.
- label: Mellanox drivers and plugins disabled
- restrictions:
- - settings:storage.iser.value == true
- - data: drivers_only
- description: If selected, Mellanox Ethernet drivers will be installed to
- support networking over Mellanox NIC. Mellanox Neutron plugin will not
- be installed.
- label: Install only Mellanox drivers
- restrictions:
- - settings:common.libvirt_type.value != 'kvm'
- - data: ethernet
- description: If selected, both Mellanox Ethernet drivers and Mellanox network
- acceleration (Neutron) plugin will be installed.
- label: Install Mellanox drivers and SR-IOV plugin
- restrictions:
- - settings:common.libvirt_type.value != 'kvm' or not (cluster:net_provider
- == 'neutron' and networking_parameters:segmentation_type == 'vlan')
- weight: 60
- vf_num:
- description: Note that one virtual function will be reserved to the storage
- network, in case of choosing iSER.
- label: Number of virtual NICs
- restrictions:
- - settings:neutron_mellanox.plugin.value != 'ethernet'
- type: text
- value: '16'
- weight: 70
- nsx_plugin:
- connector_type:
- description: Default network transport type to use
- label: NSX connector type
- type: select
- value: stt
- values:
- - data: gre
- label: GRE
- - data: ipsec_gre
- label: GRE over IPSec
- - data: stt
- label: STT
- - data: ipsec_stt
- label: STT over IPSec
- - data: bridge
- label: Bridge
- weight: 80
- l3_gw_service_uuid:
- description: UUID for the default L3 gateway service to use with this cluster
- label: L3 service UUID
- regex:
- error: Invalid L3 gateway service UUID
- source: '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'
- type: text
- value: ''
- weight: 50
- metadata:
- enabled: false
- label: VMware NSX
- restrictions:
- - action: hide
- condition: cluster:net_provider != 'neutron' or networking_parameters:net_l23_provider
- != 'nsx'
- weight: 20
- nsx_controllers:
- description: One or more IPv4[:port] addresses of NSX controller node, separated
- by comma (e.g. 10.40.30.2,192.168.110.254:443)
- label: NSX controller endpoint
- regex:
- error: Invalid controller endpoints, specify valid IPv4[:port] pair
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?(,(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?)*$
- type: text
- value: ''
- weight: 60
- nsx_password:
- description: Password for Administrator
- label: NSX password
- regex:
- error: Empty password
- source: \S
- type: password
- value: ''
- weight: 30
- nsx_username:
- description: NSX administrator's username
- label: NSX username
- regex:
- error: Empty username
- source: \S
- type: text
- value: admin
- weight: 20
- packages_url:
- description: URL to NSX specific packages
- label: URL to NSX bits
- regex:
- error: Invalid URL, specify valid HTTP/HTTPS URL with IPv4 address (e.g.
- http://10.20.0.2/nsx)
- source: ^https?://(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?(/.*)?$
- type: text
- value: ''
- weight: 70
- replication_mode:
- description: ''
- label: NSX cluster has Service nodes
- type: checkbox
- value: true
- weight: 90
- transport_zone_uuid:
- description: UUID of the pre-existing default NSX Transport zone
- label: Transport zone UUID
- regex:
- error: Invalid transport zone UUID
- source: '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'
- type: text
- value: ''
- weight: 40
- provision:
- metadata:
- label: Provision
- restrictions:
- - action: hide
- condition: not ('experimental' in version:feature_groups)
- weight: 80
- method:
- description: Which provision method to use for this cluster.
- label: Provision method
- type: radio
- value: cobbler
- values:
- - data: image
- description: Copying pre-built images on a disk.
- label: Image
- - data: cobbler
- description: Install from scratch using anaconda or debian-installer.
- label: Classic (use anaconda or debian-installer)
- public_network_assignment:
- assign_to_all_nodes:
- description: When disabled, public network will be assigned to controllers
- and zabbix-server only
- label: Assign public network to all nodes
- type: checkbox
- value: false
- weight: 10
- metadata:
- label: Public network assignment
- restrictions:
- - action: hide
- condition: cluster:net_provider != 'neutron'
- weight: 50
- storage:
- ephemeral_ceph:
- description: Configures Nova to store ephemeral volumes in RBD. This works
- best if Ceph is enabled for volumes and images, too. Enables live migration
- of all types of Ceph backed VMs (without this option, live migration will
- only work with VMs launched from Cinder volumes).
- label: Ceph RBD for ephemeral volumes (Nova)
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- type: checkbox
- value: false
- weight: 75
- images_ceph:
- description: Configures Glance to use the Ceph RBD backend to store images.
- If enabled, this option will prevent Swift from installing.
- label: Ceph RBD for images (Glance)
- type: checkbox
- value: false
- weight: 30
- images_vcenter:
- description: Configures Glance to use the vCenter/ESXi backend to store images.
- If enabled, this option will prevent Swift from installing.
- label: VMWare vCenter/ESXi datastore for images (Glance)
- restrictions:
- - settings:common.libvirt_type.value != 'vcenter'
- type: checkbox
- value: false
- weight: 35
- iser:
- description: 'High performance block storage: Cinder volumes over iSER protocol
- (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC,
- and will use a dedicated virtual function for the storage network.'
- label: iSER protocol for volumes (Cinder)
- restrictions:
- - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
- != 'kvm'
- type: checkbox
- value: false
- weight: 11
- metadata:
- label: Storage
- weight: 60
- objects_ceph:
- description: Configures RadosGW front end for Ceph RBD. This exposes S3 and
- Swift API Interfaces. If enabled, this option will prevent Swift from installing.
- label: Ceph RadosGW for objects (Swift API)
- restrictions:
- - settings:storage.images_ceph.value == false
- type: checkbox
- value: false
- weight: 80
- osd_pool_size:
- description: Configures the default number of object replicas in Ceph. This
- number must be equal to or lower than the number of deployed 'Storage -
- Ceph OSD' nodes.
- label: Ceph object replication factor
- regex:
- error: Invalid number
- source: ^[1-9]\d*$
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- type: text
- value: '2'
- weight: 85
- vc_datacenter:
- description: Inventory path to a datacenter. If you want to use ESXi host
- as datastore, it should be "ha-datacenter".
- label: Datacenter name
- regex:
- error: Empty datacenter
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 65
- vc_datastore:
- description: Datastore associated with the datacenter.
- label: Datastore name
- regex:
- error: Empty datastore
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 60
- vc_host:
- description: IP Address of vCenter/ESXi
- label: vCenter/ESXi IP
- regex:
- error: Specify valid IPv4 address
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])$
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 45
- vc_image_dir:
- description: The name of the directory where the glance images will be stored
- in the VMware datastore.
- label: Datastore Images directory
- regex:
- error: Empty images directory
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: /openstack_glance
- weight: 70
- vc_password:
- description: vCenter/ESXi admin password
- label: Password
- regex:
- error: Empty password
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: password
- value: ''
- weight: 55
- vc_user:
- description: vCenter/ESXi admin username
- label: Username
- regex:
- error: Empty username
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 50
- volumes_ceph:
- description: Configures Cinder to store volumes in Ceph RBD images.
- label: Ceph RBD for volumes (Cinder)
- restrictions:
- - settings:storage.volumes_lvm.value == true or settings:common.libvirt_type.value
- == 'vcenter'
- type: checkbox
- value: false
- weight: 20
- volumes_lvm:
- description: Requires at least one Storage - Cinder LVM node.
- label: Cinder LVM over iSCSI for volumes
- restrictions:
- - settings:storage.volumes_ceph.value == true
- type: checkbox
- value: false
- weight: 10
- volumes_vmdk:
- description: Configures Cinder to store volumes via VMware vCenter.
- label: VMware vCenter for volumes (Cinder)
- restrictions:
- - settings:common.libvirt_type.value != 'vcenter' or settings:storage.volumes_lvm.value
- == true
- type: checkbox
- value: false
- weight: 15
- syslog:
- metadata:
- label: Syslog
- weight: 50
- syslog_port:
- description: Remote syslog port
- label: Port
- regex:
- error: Invalid Syslog port
- source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
- type: text
- value: '514'
- weight: 20
- syslog_server:
- description: Remote syslog hostname
- label: Hostname
- type: text
- value: ''
- weight: 10
- syslog_transport:
- label: Syslog transport protocol
- type: radio
- value: tcp
- values:
- - data: udp
- description: ''
- label: UDP
- - data: tcp
- description: ''
- label: TCP
- weight: 30
- vcenter:
- cluster:
- description: vCenter cluster name. If you have multiple clusters, use comma
- to separate names
- label: Cluster
- regex:
- error: Invalid cluster list
- source: ^([^,\ ]+([\ ]*[^,\ ])*)(,[^,\ ]+([\ ]*[^,\ ])*)*$
- type: text
- value: ''
- weight: 40
- datastore_regex:
- description: The Datastore regexp setting specifies the data stores to use
- with Compute. For example, "nas.*". If you want to use all available datastores,
- leave this field blank
- label: Datastore regexp
- regex:
- error: Invalid datastore regexp
- source: ^(\S.*\S|\S|)$
- type: text
- value: ''
- weight: 50
- host_ip:
- description: IP Address of vCenter
- label: vCenter IP
- regex:
- error: Specify valid IPv4 address
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])$
- type: text
- value: ''
- weight: 10
- metadata:
- label: vCenter
- restrictions:
- - action: hide
- condition: settings:common.libvirt_type.value != 'vcenter'
- weight: 20
- use_vcenter:
- description: ''
- label: ''
- type: hidden
- value: true
- weight: 5
- vc_password:
- description: vCenter admin password
- label: Password
- regex:
- error: Empty password
- source: \S
- type: password
- value: admin
- weight: 30
- vc_user:
- description: vCenter admin username
- label: Username
- regex:
- error: Empty username
- source: \S
- type: text
- value: admin
- weight: 20
- vlan_interface:
- description: Physical ESXi host ethernet adapter for VLAN networking (e.g.
- vmnic1). If empty "vmnic0" is used by default
- label: ESXi VLAN interface
- restrictions:
- - action: hide
- condition: cluster:net_provider != 'nova_network' or networking_parameters:net_manager
- != 'VlanManager'
- type: text
- value: ''
- weight: 60
- zabbix:
- metadata:
- label: Zabbix Access
- restrictions:
- - action: hide
- condition: not ('experimental' in version:feature_groups)
- weight: 70
- password:
- description: Password for Zabbix Administrator
- label: password
- type: password
- value: zabbix
- weight: 20
- username:
- description: Username for Zabbix Administrator
- label: username
- type: text
- value: admin
- weight: 10
diff --git a/fuel/deploy/baremetal/dha.yaml b/fuel/deploy/baremetal/dha.yaml
deleted file mode 100644
index 6240f0794..000000000
--- a/fuel/deploy/baremetal/dha.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
-title: Deployment Hardware Adapter (DHA)
-# DHA API version supported
-version: 1.1
-created: Mon May 4 09:03:46 UTC 2015
-comment: Test environment Ericsson Montreal
-
-# Adapter to use for this definition
-adapter: ipmi
-
-# Node list.
-# Mandatory properties are id and role.
-# The MAC address of the PXE boot interface for Fuel is not
-# mandatory to be defined.
-# All other properties are adapter specific.
-
-nodes:
-- id: 1
- pxeMac: 14:58:D0:54:7A:28
- ipmiIp: 10.118.32.205
- ipmiUser: username
- ipmiPass: password
-- id: 2
- pxeMac: 14:58:D0:55:E2:E0
- ipmiIp: 10.118.32.202
- ipmiUser: username
- ipmiPass: password
-# Adding the Fuel node as node id 3 which may not be correct - please
-# adjust as needed.
-- id: 3
- libvirtName: vFuel
- libvirtTemplate: vFuel
- isFuel: yes
- username: root
- password: r00tme
-
-# Deployment power on strategy
-# all: Turn on all nodes at once. There will be no correlation
-# between the DHA and DEA node numbering. MAC addresses
-# will be used to select the node roles though.
-# sequence: Turn on the nodes in sequence starting with the lowest order
-# node and wait for the node to be detected by Fuel. Not until
-# the node has been detected and assigned a role will the next
-# node be turned on.
-powerOnStrategy: sequence
-
-# If fuelCustomInstall is set to true, Fuel is assumed to be installed by
-# calling the DHA adapter function "dha_fuelCustomInstall()" with two
-# arguments: node ID and the ISO file name to deploy. The custom install
-# function is then to handle all necessary logic to boot the Fuel master
-# from the ISO and then return.
-# Allowed values: true, false
-fuelCustomInstall: true
-
diff --git a/fuel/deploy/cloud/configure_environment.py b/fuel/deploy/cloud/configure_environment.py
index d0037d729..2d68c1ba8 100644
--- a/fuel/deploy/cloud/configure_environment.py
+++ b/fuel/deploy/cloud/configure_environment.py
@@ -1,6 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
import common
-import os
-import shutil
from configure_settings import ConfigureSettings
from configure_network import ConfigureNetwork
@@ -14,6 +21,9 @@ exec_cmd = common.exec_cmd
parse = common.parse
err = common.err
log = common.log
+delete = common.delete
+create_dir_if_not_exists = common.create_dir_if_not_exists
+
class ConfigureEnvironment(object):
@@ -21,7 +31,6 @@ class ConfigureEnvironment(object):
self.env_id = None
self.dea = dea
self.yaml_config_dir = yaml_config_dir
- self.env_name = self.dea.get_property('environment_name')
self.release_id = release_id
self.node_id_roles_dict = node_id_roles_dict
self.required_networks = []
@@ -36,21 +45,20 @@ class ConfigureEnvironment(object):
def configure_environment(self):
log('Configure environment')
- if os.path.exists(self.yaml_config_dir):
- log('Deleting existing config directory %s' % self.yaml_config_dir)
- shutil.rmtree(self.yaml_config_dir)
- log('Creating new config directory %s' % self.yaml_config_dir)
- os.makedirs(self.yaml_config_dir)
-
- mode = self.dea.get_property('environment_mode')
+ delete(self.yaml_config_dir)
+ create_dir_if_not_exists(self.yaml_config_dir)
+ env_name = self.dea.get_env_name()
+ env_mode = self.dea.get_env_mode()
+ env_net_segment_type = self.dea.get_env_net_segment_type()
log('Creating environment %s release %s, mode %s, network-mode neutron'
- ', net-segment-type vlan' % (self.env_name, self.release_id, mode))
+ ', net-segment-type %s'
+ % (env_name, self.release_id, env_mode, env_net_segment_type))
exec_cmd('fuel env create --name %s --release %s --mode %s '
- '--network-mode neutron --net-segment-type vlan'
- % (self.env_name, self.release_id, mode))
+ '--network-mode neutron --net-segment-type %s'
+ % (env_name, self.release_id, env_mode, env_net_segment_type))
- if not self.env_exists(self.env_name):
- err('Failed to create environment %s' % self.env_name)
+ if not self.env_exists(env_name):
+ err('Failed to create environment %s' % env_name)
self.config_settings()
self.config_network()
self.config_nodes()
@@ -68,6 +76,3 @@ class ConfigureEnvironment(object):
nodes = ConfigureNodes(self.yaml_config_dir, self.env_id,
self.node_id_roles_dict, self.dea)
nodes.config_nodes()
-
-
-
diff --git a/fuel/deploy/cloud/configure_network.py b/fuel/deploy/cloud/configure_network.py
index 295eb90bd..00278949d 100644
--- a/fuel/deploy/cloud/configure_network.py
+++ b/fuel/deploy/cloud/configure_network.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
import yaml
import io
@@ -11,6 +21,8 @@ parse = common.parse
err = common.err
check_file_exists = common.check_file_exists
log = common.log
+backup = common.backup
+
class ConfigureNetwork(object):
@@ -41,6 +53,7 @@ class ConfigureNetwork(object):
network_yaml = ('%s/network_%s.yaml'
% (self.yaml_config_dir, self.env_id))
check_file_exists(network_yaml)
+ backup(network_yaml)
network_config = self.dea.get_property('network')
@@ -58,4 +71,4 @@ class ConfigureNetwork(object):
network.update(net_id[network['name']])
with io.open(network_yaml, 'w') as stream:
- yaml.dump(network_config, stream, default_flow_style=False) \ No newline at end of file
+ yaml.dump(network_config, stream, default_flow_style=False)
diff --git a/fuel/deploy/cloud/configure_nodes.py b/fuel/deploy/cloud/configure_nodes.py
index 4d1315a5c..e76d222c0 100644
--- a/fuel/deploy/cloud/configure_nodes.py
+++ b/fuel/deploy/cloud/configure_nodes.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
import yaml
import io
@@ -12,6 +22,7 @@ parse = common.parse
err = common.err
check_file_exists = common.check_file_exists
log = common.log
+backup = common.backup
class ConfigureNodes(object):
@@ -26,7 +37,7 @@ class ConfigureNodes(object):
log('Configure nodes')
for node_id, roles_blade in self.node_id_roles_dict.iteritems():
exec_cmd('fuel node set --node-id %s --role %s --env %s'
- % (node_id, ','.join(roles_blade[0]), self.env_id))
+ % (node_id, roles_blade[0], self.env_id))
self.download_deployment_config()
for node_id, roles_blade in self.node_id_roles_dict.iteritems():
@@ -37,22 +48,20 @@ class ConfigureNodes(object):
self.upload_deployment_config()
def modify_node_network_schemes(self, node_id, roles_blade):
- log('Modify node network transformations in environment %s'
- % self.env_id)
+ log('Modify network transformations for node %s' % node_id)
type = self.dea.get_node_property(roles_blade[1], 'transformations')
- transformations = self.dea.get_transformations(type)
-
- for node_file in glob.glob('%s/deployment_%s/*_%s.yaml'
- % (self.yaml_config_dir, self.env_id,
- node_id)):
+ transformations = self.dea.get_property(type)
+ 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 = yaml.load(stream)
- node['network_scheme']['transformations'] = transformations
+ node['network_scheme'].update(transformations)
with io.open(node_file, 'w') as stream:
- yaml.dump(node, stream, default_flow_style=False)
-
+ yaml.dump(node, stream, default_flow_style=False)
def download_deployment_config(self):
log('Download deployment config for environment %s' % self.env_id)
@@ -79,6 +88,7 @@ class ConfigureNodes(object):
interface_yaml = ('%s/node_%s/interfaces.yaml'
% (self.yaml_config_dir, node_id))
check_file_exists(interface_yaml)
+ backup('%s/node_%s' % (self.yaml_config_dir, node_id))
with io.open(interface_yaml) as stream:
interfaces = yaml.load(stream)
@@ -86,10 +96,10 @@ class ConfigureNodes(object):
net_name_id = {}
for interface in interfaces:
for network in interface['assigned_networks']:
- net_name_id[network['name']] = network['id']
+ net_name_id[network['name']] = network['id']
type = self.dea.get_node_property(roles_blade[1], 'interfaces')
- interface_config = self.dea.get_interfaces(type)
+ interface_config = self.dea.get_property(type)
for interface in interfaces:
interface['assigned_networks'] = []
@@ -101,4 +111,4 @@ class ConfigureNodes(object):
interface['assigned_networks'].append(net)
with io.open(interface_yaml, 'w') as stream:
- yaml.dump(interfaces, stream, default_flow_style=False) \ No newline at end of file
+ yaml.dump(interfaces, stream, default_flow_style=False)
diff --git a/fuel/deploy/cloud/configure_settings.py b/fuel/deploy/cloud/configure_settings.py
index ac0afdc57..fa918fd3d 100644
--- a/fuel/deploy/cloud/configure_settings.py
+++ b/fuel/deploy/cloud/configure_settings.py
@@ -1,3 +1,12 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
import common
import yaml
import io
@@ -11,6 +20,8 @@ parse = common.parse
err = common.err
check_file_exists = common.check_file_exists
log = common.log
+backup = common.backup
+
class ConfigureSettings(object):
@@ -40,6 +51,7 @@ class ConfigureSettings(object):
settings_yaml = ('%s/settings_%s.yaml'
% (self.yaml_config_dir, self.env_id))
check_file_exists(settings_yaml)
+ backup(settings_yaml)
settings = self.dea.get_property('settings')
diff --git a/fuel/deploy/cloud/deploy.py b/fuel/deploy/cloud/deploy.py
index c8714f8a6..705dda59c 100644
--- a/fuel/deploy/cloud/deploy.py
+++ b/fuel/deploy/cloud/deploy.py
@@ -1,7 +1,17 @@
-import time
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
+import os
import yaml
import io
-import sys
+import glob
import common
from dea import DeploymentEnvironmentAdapter
@@ -19,188 +29,79 @@ parse = common.parse
err = common.err
check_file_exists = common.check_file_exists
log = common.log
+commafy = common.commafy
+ArgParser = common.ArgParser
+
class Deploy(object):
- def __init__(self, dea_file, macs_file):
+ def __init__(self, dea_file, blade_node_file, no_health_check):
self.dea = DeploymentEnvironmentAdapter(dea_file)
- self.macs_file = macs_file
+ self.blade_node_file = blade_node_file
+ self.no_health_check = no_health_check
self.macs_per_blade = {}
self.blades = self.dea.get_node_ids()
- self.node_ids_dict = {}
- self.node_id_roles_dict = {}
- self.supported_release = None
+ self.blade_node_dict = {}
+ self.node_roles_dict = {}
self.env_id = None
- self.wanted_release = self.dea.get_wanted_release()
-
- def cleanup_fuel_environments(self, env_list):
- WAIT_LOOP = 60
- SLEEP_TIME = 10
- for env in env_list:
- log('Deleting environment %s' % env[E['id']])
- exec_cmd('fuel env --env %s --delete' % env[E['id']])
- all_env_erased = False
- for i in range(WAIT_LOOP):
- env_list = parse(exec_cmd('fuel env list'))
- if env_list:
- time.sleep(SLEEP_TIME)
- else:
- all_env_erased = True
- break
- if not all_env_erased:
- err('Could not erase these environments %s'
- % [(env[E['id']], env[E['status']]) for env in env_list])
-
- def cleanup_fuel_nodes(self, node_list):
- for node in node_list:
- if node[N['status']] == 'discover':
- log('Deleting node %s' % node[N['id']])
- exec_cmd('fuel node --node-id %s --delete-from-db'
- % node[N['id']])
- exec_cmd('dockerctl shell cobbler cobbler system remove '
- '--name node-%s' % node[N['id']])
-
- def check_previous_installation(self):
- log('Check previous installation')
- env_list = parse(exec_cmd('fuel env list'))
- if env_list:
- self.cleanup_fuel_environments(env_list)
- node_list = parse(exec_cmd('fuel node list'))
- if node_list:
- self.cleanup_fuel_nodes(node_list)
-
- def check_supported_release(self):
- log('Check supported release: %s' % self.wanted_release)
- release_list = parse(exec_cmd('fuel release -l'))
- for release in release_list:
- if release[R['name']] == self.wanted_release:
- self.supported_release = release
- break
- if not self.supported_release:
- err('This Fuel does not contain the following release: %s'
- % self.wanted_release)
-
- def check_prerequisites(self):
- log('Check prerequisites')
- self.check_supported_release()
- self.check_previous_installation()
-
- def get_mac_addresses(self):
- with io.open(self.macs_file, 'r') as stream:
- self.macs_per_blade = yaml.load(stream)
-
- def find_mac_in_dict(self, mac):
- for blade, mac_list in self.macs_per_blade.iteritems():
- if mac in mac_list:
- return blade
-
- def all_blades_discovered(self):
- for blade, node_id in self.node_ids_dict.iteritems():
- if not node_id:
- return False
- return True
-
- def not_discovered_blades_summary(self):
- summary = ''
- for blade, node_id in self.node_ids_dict.iteritems():
- if not node_id:
- summary += '\n[blade %s]' % blade
- return summary
-
- def node_discovery(self, node_list, discovered_macs):
- for node in node_list:
- if (node[N['status']] == 'discover' and
- node[N['online']] == 'True' and
- node[N['mac']] not in discovered_macs):
- discovered_macs.append(node[N['mac']])
- blade = self.find_mac_in_dict(node[N['mac']])
- if blade:
- log('Blade %s discovered as Node %s with MAC %s'
- % (blade, node[N['id']], node[N['mac']]))
- self.node_ids_dict[blade] = node[N['id']]
-
- def discovery_waiting_loop(self, discovered_macs):
- WAIT_LOOP = 180
- SLEEP_TIME = 10
- all_discovered = False
- for i in range(WAIT_LOOP):
- node_list = parse(exec_cmd('fuel node list'))
- if node_list:
- self.node_discovery(node_list, discovered_macs)
- if self.all_blades_discovered():
- all_discovered = True
- break
- else:
- time.sleep(SLEEP_TIME)
- return all_discovered
-
- def wait_for_discovered_blades(self):
- log('Wait for discovered blades')
- discovered_macs = []
- for blade in self.blades:
- self.node_ids_dict[blade] = None
- all_discovered = self.discovery_waiting_loop(discovered_macs)
- if not all_discovered:
- err('Not all blades have been discovered: %s'
- % self.not_discovered_blades_summary())
+ self.wanted_release = self.dea.get_property('wanted_release')
+
+ def get_blade_node_mapping(self):
+ with io.open(self.blade_node_file, 'r') as stream:
+ self.blade_node_dict = yaml.load(stream)
def assign_roles_to_cluster_node_ids(self):
- self.node_id_roles_dict = {}
- for blade, node_id in self.node_ids_dict.iteritems():
- role_list = []
- role = self.dea.get_node_role(blade)
- if role == 'controller':
- role_list.extend(['controller', 'mongo'])
- elif role == 'compute':
- role_list.extend(['compute'])
- self.node_id_roles_dict[node_id] = (role_list, blade)
+ self.node_roles_dict = {}
+ for blade, node in self.blade_node_dict.iteritems():
+ roles = commafy(self.dea.get_node_role(blade))
+ self.node_roles_dict[node] = (roles, blade)
def configure_environment(self):
+ release_list = parse(exec_cmd('fuel release -l'))
+ for release in release_list:
+ if release[R['name']] == self.wanted_release:
+ break
config_env = ConfigureEnvironment(self.dea, YAML_CONF_DIR,
- self.supported_release[R['id']],
- self.node_id_roles_dict)
+ release[R['id']],
+ self.node_roles_dict)
config_env.configure_environment()
self.env_id = config_env.env_id
def deploy_cloud(self):
dep = Deployment(self.dea, YAML_CONF_DIR, self.env_id,
- self.node_id_roles_dict)
+ self.node_roles_dict, self.no_health_check)
dep.deploy()
def deploy(self):
- self.get_mac_addresses()
- self.check_prerequisites()
- self.wait_for_discovered_blades()
+
+ self.get_blade_node_mapping()
+
self.assign_roles_to_cluster_node_ids()
+
self.configure_environment()
- self.deploy_cloud()
-def usage():
- print '''
- Usage:
- python deploy.py <dea_file> <macs_file>
+ self.deploy_cloud()
- Example:
- python deploy.py dea.yaml macs.yaml
- '''
def parse_arguments():
- if len(sys.argv) != 3:
- log('Incorrect number of arguments')
- usage()
- sys.exit(1)
- dea_file = sys.argv[-2]
- macs_file = sys.argv[-1]
- check_file_exists(dea_file)
- check_file_exists(macs_file)
- return dea_file, macs_file
+ parser = ArgParser(prog='python %s' % __file__)
+ parser.add_argument('-nh', dest='no_health_check', action='store_true',
+ default=False,
+ help='Don\'t run health check after deployment')
+ parser.add_argument('dea_file', action='store',
+ help='Deployment Environment Adapter: dea.yaml')
+ parser.add_argument('blade_node_file', action='store',
+ help='Blade Node mapping: blade_node.yaml')
+ args = parser.parse_args()
+ check_file_exists(args.dea_file)
+ check_file_exists(args.blade_node_file)
+ return (args.dea_file, args.blade_node_file, args.no_health_check)
-def main():
- dea_file, macs_file = parse_arguments()
-
- deploy = Deploy(dea_file, macs_file)
+def main():
+ dea_file, blade_node_file, no_health_check = parse_arguments()
+ deploy = Deploy(dea_file, blade_node_file, no_health_check)
deploy.deploy()
if __name__ == '__main__':
- main() \ No newline at end of file
+ main()
diff --git a/fuel/deploy/cloud/deployment.py b/fuel/deploy/cloud/deployment.py
index cf56c3630..90f24fd0b 100644
--- a/fuel/deploy/cloud/deployment.py
+++ b/fuel/deploy/cloud/deployment.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
import os
import shutil
@@ -19,42 +29,13 @@ log = common.log
class Deployment(object):
- def __init__(self, dea, yaml_config_dir, env_id, node_id_roles_dict):
+ def __init__(self, dea, yaml_config_dir, env_id, node_id_roles_dict,
+ no_health_check):
self.dea = dea
self.yaml_config_dir = yaml_config_dir
self.env_id = env_id
self.node_id_roles_dict = node_id_roles_dict
-
- def download_deployment_info(self):
- log('Download deployment info for environment %s' % self.env_id)
- deployment_dir = '%s/deployment_%s' \
- % (self.yaml_config_dir, self.env_id)
- if os.path.exists(deployment_dir):
- shutil.rmtree(deployment_dir)
- exec_cmd('fuel --env %s deployment --default --dir %s'
- % (self.env_id, self.yaml_config_dir))
-
- def upload_deployment_info(self):
- log('Upload deployment info for environment %s' % self.env_id)
- exec_cmd('fuel --env %s deployment --upload --dir %s'
- % (self.env_id, self.yaml_config_dir))
-
- def config_opnfv(self):
- log('Configure OPNFV settings on environment %s' % self.env_id)
- opnfv_compute = self.dea.get_opnfv('compute')
- opnfv_controller = self.dea.get_opnfv('controller')
- self.download_deployment_info()
- for node_file in glob.glob('%s/deployment_%s/*.yaml'
- % (self.yaml_config_dir, self.env_id)):
- with io.open(node_file) as stream:
- node = yaml.load(stream)
- if node['role'] == 'compute':
- node.update(opnfv_compute)
- else:
- node.update(opnfv_controller)
- with io.open(node_file, 'w') as stream:
- yaml.dump(node, stream, default_flow_style=False)
- self.upload_deployment_info()
+ self.no_health_check = no_health_check
def run_deploy(self):
WAIT_LOOP = 180
@@ -75,7 +56,8 @@ class Deployment(object):
if env[0][E['status']] == 'operational':
ready = True
break
- elif env[0][E['status']] == 'error':
+ elif (env[0][E['status']] == 'error'
+ or env[0][E['status']] == 'stopped'):
break
else:
time.sleep(SLEEP_TIME)
@@ -102,12 +84,14 @@ class Deployment(object):
def health_check(self):
log('Now running sanity and smoke health checks')
- exec_cmd('fuel health --env %s --check sanity,smoke --force'
- % self.env_id)
- log('Health checks passed !')
+ r = exec_cmd('fuel health --env %s --check sanity,smoke --force'
+ % self.env_id)
+ log(r)
+ if 'failure' in r:
+ err('Healthcheck failed!')
def deploy(self):
- self.config_opnfv()
self.run_deploy()
self.verify_node_status()
- self.health_check() \ No newline at end of file
+ if not self.no_health_check:
+ self.health_check()
diff --git a/fuel/deploy/common.py b/fuel/deploy/common.py
index 6dbda67f3..2a8c0d149 100644
--- a/fuel/deploy/common.py
+++ b/fuel/deploy/common.py
@@ -1,7 +1,20 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
import subprocess
import sys
import os
import logging
+import argparse
+import shutil
+import stat
+import errno
N = {'id': 0, 'status': 1, 'name': 2, 'cluster': 3, 'ip': 4, 'mac': 5,
'roles': 6, 'pending_roles': 7, 'online': 8}
@@ -9,7 +22,7 @@ E = {'id': 0, 'status': 1, 'name': 2, 'mode': 3, 'release_id': 4,
'changes': 5, 'pending_release_id': 6}
R = {'id': 0, 'name': 1, 'state': 2, 'operating_system': 3, 'version': 4}
RO = {'name': 0, 'conflicts': 1}
-
+CWD = os.getcwd()
LOG = logging.getLogger(__name__)
LOG.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(message)s')
@@ -19,6 +32,7 @@ LOG.addHandler(out_handler)
out_handler = logging.FileHandler('autodeploy.log', mode='w')
out_handler.setFormatter(formatter)
LOG.addHandler(out_handler)
+os.chmod('autodeploy.log', stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
def exec_cmd(cmd, check=True):
process = subprocess.Popen(cmd,
@@ -34,6 +48,7 @@ def exec_cmd(cmd, check=True):
return response
return response, return_code
+
def run_proc(cmd):
process = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
@@ -41,14 +56,16 @@ def run_proc(cmd):
shell=True)
return process
+
def parse(printout):
parsed_list = []
lines = printout.splitlines()
for l in lines[2:]:
- parsed = [e.strip() for e in l.split('|')]
- parsed_list.append(parsed)
+ parsed = [e.strip() for e in l.split('|')]
+ parsed_list.append(parsed)
return parsed_list
+
def clean(lines):
parsed_list = []
parsed = []
@@ -61,22 +78,76 @@ def clean(lines):
parsed_list.append(parsed)
return parsed if len(parsed_list) == 1 else parsed_list
+
def err(message):
LOG.error('%s\n' % message)
sys.exit(1)
+
+def warn(message):
+ LOG.warning('%s\n' % message)
+
+
def check_file_exists(file_path):
+ if not os.path.dirname(file_path):
+ file_path = '%s/%s' % (CWD, file_path)
if not os.path.isfile(file_path):
err('ERROR: File %s not found\n' % file_path)
+
def check_dir_exists(dir_path):
+ if not os.path.dirname(dir_path):
+ dir_path = '%s/%s' % (CWD, dir_path)
if not os.path.isdir(dir_path):
err('ERROR: Directory %s not found\n' % dir_path)
+
+def create_dir_if_not_exists(dir_path):
+ if not os.path.isdir(dir_path):
+ log('Creating directory %s' % dir_path)
+ os.makedirs(dir_path)
+
+
+def delete(f):
+ if os.path.isfile(f):
+ log('Deleting file %s' % f)
+ os.remove(f)
+ elif os.path.isdir(f):
+ log('Deleting directory %s' % f)
+ shutil.rmtree(f)
+
+
+def commafy(comma_separated_list):
+ l = [c.strip() for c in comma_separated_list.split(',')]
+ return ','.join(l)
+
+
def check_if_root():
r = exec_cmd('whoami')
if r != 'root':
err('You need be root to run this application')
+
def log(message):
LOG.debug('%s\n' % message)
+
+
+class ArgParser(argparse.ArgumentParser):
+
+ def error(self, message):
+ sys.stderr.write('ERROR: %s\n' % message)
+ self.print_help()
+ sys.exit(2)
+
+
+def backup(path):
+ src = path
+ dst = path + '_orig'
+ delete(dst)
+ try:
+ shutil.copytree(src, dst)
+ except OSError as e:
+ if e.errno == errno.ENOTDIR:
+ shutil.copy(src, dst)
+ else:
+ raise
diff --git a/fuel/deploy/dea.py b/fuel/deploy/dea.py
index 8066b6ae2..5f1a41547 100644
--- a/fuel/deploy/dea.py
+++ b/fuel/deploy/dea.py
@@ -1,8 +1,20 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import yaml
import io
import netaddr
+
class DeploymentEnvironmentAdapter(object):
+
def __init__(self, yaml_path):
self.dea_struct = None
self.parse_yaml(yaml_path)
@@ -19,6 +31,15 @@ class DeploymentEnvironmentAdapter(object):
with io.open(yaml_path) as yaml_file:
self.dea_struct = yaml.load(yaml_file)
+ def get_env_name(self):
+ return self.get_property('environment')['name']
+
+ def get_env_mode(self):
+ return self.get_property('environment')['mode']
+
+ def get_env_net_segment_type(self):
+ return self.get_property('environment')['net_segment_type']
+
def get_fuel_config(self):
return self.dea_struct['fuel']
@@ -67,14 +88,12 @@ class DeploymentEnvironmentAdapter(object):
def get_network_names(self):
return self.network_names
- def get_interfaces(self, type):
- return self.dea_struct['interfaces'][type]
-
- def get_transformations(self, type):
- return self.dea_struct['transformations'][type]
-
- def get_opnfv(self, role):
- return {'opnfv': self.dea_struct['opnfv'][role]}
+ def get_dns_list(self):
+ settings = self.get_property('settings')
+ dns_list = settings['editable']['external_dns']['dns_list']['value']
+ return [d.strip() for d in dns_list.split(',')]
- def get_wanted_release(self):
- return self.dea_struct['wanted_release'] \ No newline at end of file
+ def get_ntp_list(self):
+ settings = self.get_property('settings')
+ ntp_list = settings['editable']['external_ntp']['ntp_list']['value']
+ return [n.strip() for n in ntp_list.split(',')]
diff --git a/fuel/deploy/deploy.py b/fuel/deploy/deploy.py
index 9d1a3d2c3..178ae76e2 100644
--- a/fuel/deploy/deploy.py
+++ b/fuel/deploy/deploy.py
@@ -1,33 +1,51 @@
-import sys
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import os
-import shutil
import io
import re
+import sys
import netaddr
+import yaml
from dea import DeploymentEnvironmentAdapter
from dha import DeploymentHardwareAdapter
from install_fuel_master import InstallFuelMaster
from deploy_env import CloudDeploy
+from execution_environment import ExecutionEnvironment
import common
log = common.log
exec_cmd = common.exec_cmd
err = common.err
+warn = common.warn
check_file_exists = common.check_file_exists
+check_dir_exists = common.check_dir_exists
+create_dir_if_not_exists = common.create_dir_if_not_exists
+delete = common.delete
check_if_root = common.check_if_root
+ArgParser = common.ArgParser
FUEL_VM = 'fuel'
-TMP_DIR = '%s/fueltmp' % os.getenv('HOME')
PATCH_DIR = 'fuel_patch'
-WORK_DIR = 'deploy'
+WORK_DIR = '~/deploy'
+CWD = os.getcwd()
+
class cd:
+
def __init__(self, new_path):
self.new_path = os.path.expanduser(new_path)
def __enter__(self):
- self.saved_path = os.getcwd()
+ self.saved_path = CWD
os.chdir(self.new_path)
def __exit__(self, etype, value, traceback):
@@ -36,31 +54,27 @@ class cd:
class AutoDeploy(object):
- def __init__(self, without_fuel, iso_file, dea_file, dha_file):
- self.without_fuel = without_fuel
+ def __init__(self, no_fuel, fuel_only, no_health_check, cleanup_only,
+ cleanup, storage_dir, pxe_bridge, iso_file, dea_file,
+ dha_file, fuel_plugins_dir):
+ self.no_fuel = no_fuel
+ self.fuel_only = fuel_only
+ self.no_health_check = no_health_check
+ self.cleanup_only = cleanup_only
+ self.cleanup = cleanup
+ self.storage_dir = storage_dir
+ self.pxe_bridge = pxe_bridge
self.iso_file = iso_file
self.dea_file = dea_file
self.dha_file = dha_file
- self.dea = DeploymentEnvironmentAdapter(dea_file)
+ self.fuel_plugins_dir = fuel_plugins_dir
+ self.dea = (DeploymentEnvironmentAdapter(dea_file)
+ if not cleanup_only else None)
self.dha = DeploymentHardwareAdapter(dha_file)
self.fuel_conf = {}
self.fuel_node_id = self.dha.get_fuel_node_id()
- self.fuel_custom = self.dha.use_fuel_custom_install()
self.fuel_username, self.fuel_password = self.dha.get_fuel_access()
-
- def setup_dir(self, dir):
- self.cleanup_dir(dir)
- os.makedirs(dir)
-
- def cleanup_dir(self, dir):
- if os.path.isdir(dir):
- shutil.rmtree(dir)
-
- def power_off_blades(self):
- node_ids = self.dha.get_all_node_ids()
- node_ids = list(set(node_ids) - set([self.fuel_node_id]))
- for node_id in node_ids:
- self.dha.node_power_off(node_id)
+ self.tmp_dir = None
def modify_ip(self, ip_addr, index, val):
ip_str = str(netaddr.IPAddress(ip_addr))
@@ -77,11 +91,9 @@ class AutoDeploy(object):
self.fuel_conf['showmenu'] = 'yes'
def install_fuel_master(self):
- if self.without_fuel:
- log('Not Installing Fuel Master')
- return
log('Install Fuel Master')
- new_iso = '%s/deploy-%s' % (TMP_DIR, os.path.basename(self.iso_file))
+ new_iso = '%s/deploy-%s' \
+ % (self.tmp_dir, os.path.basename(self.iso_file))
self.patch_iso(new_iso)
self.iso_file = new_iso
self.install_iso()
@@ -90,40 +102,36 @@ class AutoDeploy(object):
fuel = InstallFuelMaster(self.dea_file, self.dha_file,
self.fuel_conf['ip'], self.fuel_username,
self.fuel_password, self.fuel_node_id,
- self.iso_file, WORK_DIR)
- if self.fuel_custom:
- log('Custom Fuel install')
- fuel.custom_install()
- else:
- log('Ordinary Fuel install')
- fuel.install()
+ self.iso_file, WORK_DIR,
+ self.fuel_plugins_dir)
+ fuel.install()
def patch_iso(self, new_iso):
- tmp_orig_dir = '%s/origiso' % TMP_DIR
- tmp_new_dir = '%s/newiso' % TMP_DIR
+ tmp_orig_dir = '%s/origiso' % self.tmp_dir
+ tmp_new_dir = '%s/newiso' % self.tmp_dir
self.copy(tmp_orig_dir, tmp_new_dir)
self.patch(tmp_new_dir, new_iso)
def copy(self, tmp_orig_dir, tmp_new_dir):
log('Copying...')
- self.setup_dir(tmp_orig_dir)
- self.setup_dir(tmp_new_dir)
+ os.makedirs(tmp_orig_dir)
+ os.makedirs(tmp_new_dir)
exec_cmd('fuseiso %s %s' % (self.iso_file, tmp_orig_dir))
with cd(tmp_orig_dir):
exec_cmd('find . | cpio -pd %s' % tmp_new_dir)
with cd(tmp_new_dir):
exec_cmd('fusermount -u %s' % tmp_orig_dir)
- shutil.rmtree(tmp_orig_dir)
+ delete(tmp_orig_dir)
exec_cmd('chmod -R 755 %s' % tmp_new_dir)
def patch(self, tmp_new_dir, new_iso):
log('Patching...')
- patch_dir = '%s/%s' % (os.getcwd(), PATCH_DIR)
+ patch_dir = '%s/%s' % (CWD, PATCH_DIR)
ks_path = '%s/ks.cfg.patch' % patch_dir
with cd(tmp_new_dir):
exec_cmd('cat %s | patch -p0' % ks_path)
- shutil.rmtree('.rr_moved')
+ delete('.rr_moved')
isolinux = 'isolinux/isolinux.cfg'
log('isolinux.cfg before: %s'
% exec_cmd('grep netmask %s' % isolinux))
@@ -149,51 +157,152 @@ class AutoDeploy(object):
f.write(data)
def deploy_env(self):
- dep = CloudDeploy(self.dha, self.fuel_conf['ip'], self.fuel_username,
- self.fuel_password, self.dea_file, WORK_DIR)
- dep.deploy()
+ dep = CloudDeploy(self.dea, self.dha, self.fuel_conf['ip'],
+ self.fuel_username, self.fuel_password,
+ self.dea_file, WORK_DIR, self.no_health_check)
+ return dep.deploy()
+
+ def setup_execution_environment(self):
+ exec_env = ExecutionEnvironment(self.storage_dir, self.pxe_bridge,
+ self.dha_file, self.dea)
+ exec_env.setup_environment()
+
+ def cleanup_execution_environment(self):
+ exec_env = ExecutionEnvironment(self.storage_dir, self.pxe_bridge,
+ self.dha_file, self.dea)
+ exec_env.cleanup_environment()
+
+ def create_tmp_dir(self):
+ self.tmp_dir = '%s/fueltmp' % CWD
+ delete(self.tmp_dir)
+ create_dir_if_not_exists(self.tmp_dir)
def deploy(self):
- check_if_root()
- self.setup_dir(TMP_DIR)
self.collect_fuel_info()
- self.power_off_blades()
- self.install_fuel_master()
- self.cleanup_dir(TMP_DIR)
- self.deploy_env()
+ if not self.no_fuel:
+ self.setup_execution_environment()
+ self.create_tmp_dir()
+ self.install_fuel_master()
+ if not self.fuel_only:
+ return self.deploy_env()
+ return True
+
+ def run(self):
+ check_if_root()
+ if self.cleanup_only:
+ self.cleanup_execution_environment()
+ else:
+ deploy_success = self.deploy()
+ if self.cleanup:
+ self.cleanup_execution_environment()
+ return deploy_success
+ return True
-def usage():
- print '''
- Usage:
- python deploy.py [-nf] <isofile> <deafile> <dhafile>
+def check_bridge(pxe_bridge, dha_path):
+ with io.open(dha_path) as yaml_file:
+ dha_struct = yaml.load(yaml_file)
+ if dha_struct['adapter'] != 'libvirt':
+ log('Using Linux Bridge %s for booting up the Fuel Master VM'
+ % pxe_bridge)
+ r = exec_cmd('ip link show %s' % pxe_bridge)
+ if pxe_bridge in r and 'state DOWN' in r:
+ err('Linux Bridge {0} is not Active, bring'
+ ' it UP first: [ip link set dev {0} up]'.format(pxe_bridge))
+
+
+def check_fuel_plugins_dir(dir):
+ msg = None
+ if not dir:
+ msg = 'Fuel Plugins Directory not specified!'
+ elif not os.path.isdir(dir):
+ msg = 'Fuel Plugins Directory does not exist!'
+ elif not os.listdir(dir):
+ msg = 'Fuel Plugins Directory is empty!'
+ if msg:
+ warn('%s No external plugins will be installed!' % msg)
- Optional arguments:
- -nf Do not install Fuel master
- '''
def parse_arguments():
- if (len(sys.argv) < 4 or len(sys.argv) > 5
- or (len(sys.argv) == 5 and sys.argv[1] != '-nf')):
- log('Incorrect number of arguments')
- usage()
- sys.exit(1)
- without_fuel = False
- if len(sys.argv) == 5 and sys.argv[1] == '-nf':
- without_fuel = True
- iso_file = sys.argv[-3]
- dea_file = sys.argv[-2]
- dha_file = sys.argv[-1]
- check_file_exists(iso_file)
- check_file_exists(dea_file)
- check_file_exists(dha_file)
- return (without_fuel, iso_file, dea_file, dha_file)
+ parser = ArgParser(prog='python %s' % __file__)
+ parser.add_argument('-nf', dest='no_fuel', action='store_true',
+ default=False,
+ help='Do not install Fuel Master (and Node VMs when '
+ 'using libvirt)')
+ parser.add_argument('-nh', dest='no_health_check', action='store_true',
+ default=False,
+ help='Don\'t run health check after deployment')
+ parser.add_argument('-fo', dest='fuel_only', action='store_true',
+ default=False,
+ help='Install Fuel Master only (and Node VMs when '
+ 'using libvirt)')
+ parser.add_argument('-co', dest='cleanup_only', action='store_true',
+ default=False,
+ help='Cleanup VMs and Virtual Networks according to '
+ 'what is defined in DHA')
+ parser.add_argument('-c', dest='cleanup', action='store_true',
+ default=False,
+ help='Cleanup after deploy')
+ if {'-iso', '-dea', '-dha', '-h'}.intersection(sys.argv):
+ parser.add_argument('-iso', dest='iso_file', action='store', nargs='?',
+ default='%s/OPNFV.iso' % CWD,
+ help='ISO File [default: OPNFV.iso]')
+ parser.add_argument('-dea', dest='dea_file', action='store', nargs='?',
+ default='%s/dea.yaml' % CWD,
+ help='Deployment Environment Adapter: dea.yaml')
+ parser.add_argument('-dha', dest='dha_file', action='store', nargs='?',
+ default='%s/dha.yaml' % CWD,
+ help='Deployment Hardware Adapter: dha.yaml')
+ else:
+ parser.add_argument('iso_file', action='store', nargs='?',
+ default='%s/OPNFV.iso' % CWD,
+ help='ISO File [default: OPNFV.iso]')
+ parser.add_argument('dea_file', action='store', nargs='?',
+ default='%s/dea.yaml' % CWD,
+ help='Deployment Environment Adapter: dea.yaml')
+ parser.add_argument('dha_file', action='store', nargs='?',
+ default='%s/dha.yaml' % CWD,
+ help='Deployment Hardware Adapter: dha.yaml')
+ parser.add_argument('-s', dest='storage_dir', action='store',
+ default='%s/images' % CWD,
+ help='Storage Directory [default: images]')
+ parser.add_argument('-b', dest='pxe_bridge', action='store',
+ default='pxebr',
+ help='Linux Bridge for booting up the Fuel Master VM '
+ '[default: pxebr]')
+ parser.add_argument('-p', dest='fuel_plugins_dir', action='store',
+ help='Fuel Plugins directory')
-def main():
+ args = parser.parse_args()
+ log(args)
- without_fuel, iso_file, dea_file, dha_file = parse_arguments()
+ check_file_exists(args.dha_file)
+
+ if not args.cleanup_only:
+ check_file_exists(args.dea_file)
+ check_fuel_plugins_dir(args.fuel_plugins_dir)
+
+ if not args.no_fuel and not args.cleanup_only:
+ log('Using OPNFV ISO file: %s' % args.iso_file)
+ check_file_exists(args.iso_file)
+ log('Using image directory: %s' % args.storage_dir)
+ create_dir_if_not_exists(args.storage_dir)
+ check_bridge(args.pxe_bridge, args.dha_file)
+
+ kwargs = {'no_fuel': args.no_fuel, 'fuel_only': args.fuel_only,
+ 'no_health_check': args.no_health_check,
+ 'cleanup_only': args.cleanup_only, 'cleanup': args.cleanup,
+ 'storage_dir': args.storage_dir, 'pxe_bridge': args.pxe_bridge,
+ 'iso_file': args.iso_file, 'dea_file': args.dea_file,
+ 'dha_file': args.dha_file,
+ 'fuel_plugins_dir': args.fuel_plugins_dir}
+ return kwargs
+
+
+def main():
+ kwargs = parse_arguments()
- d = AutoDeploy(without_fuel, iso_file, dea_file, dha_file)
- d.deploy()
+ d = AutoDeploy(**kwargs)
+ sys.exit(d.run())
if __name__ == '__main__':
- main() \ No newline at end of file
+ main()
diff --git a/fuel/deploy/deploy_env.py b/fuel/deploy/deploy_env.py
index 9bc8fbb34..be8bed342 100644
--- a/fuel/deploy/deploy_env.py
+++ b/fuel/deploy/deploy_env.py
@@ -1,7 +1,18 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import os
import io
import yaml
import glob
+import time
from ssh_client import SSHClient
import common
@@ -10,38 +21,48 @@ exec_cmd = common.exec_cmd
err = common.err
check_file_exists = common.check_file_exists
log = common.log
+parse = common.parse
+commafy = common.commafy
+N = common.N
+E = common.E
+R = common.R
+RO = common.RO
CLOUD_DEPLOY_FILE = 'deploy.py'
+BLADE_RESTART_TIMES = 3
class CloudDeploy(object):
- def __init__(self, dha, fuel_ip, fuel_username, fuel_password, dea_file,
- work_dir):
+ def __init__(self, dea, dha, fuel_ip, fuel_username, fuel_password,
+ dea_file, work_dir, no_health_check):
+ self.dea = dea
self.dha = dha
self.fuel_ip = fuel_ip
self.fuel_username = fuel_username
self.fuel_password = fuel_password
self.dea_file = dea_file
self.work_dir = work_dir
+ self.no_health_check = no_health_check
self.file_dir = os.path.dirname(os.path.realpath(__file__))
self.ssh = SSHClient(self.fuel_ip, self.fuel_username,
self.fuel_password)
- self.macs_file = '%s/macs.yaml' % self.file_dir
+ self.blade_node_file = '%s/blade_node.yaml' % self.file_dir
self.node_ids = self.dha.get_node_ids()
+ self.wanted_release = self.dea.get_property('wanted_release')
+ self.blade_node_dict = {}
+ self.macs_per_blade = {}
def upload_cloud_deployment_files(self):
- dest ='~/%s/' % self.work_dir
-
with self.ssh as s:
- s.exec_cmd('rm -rf %s' % self.work_dir, check=False)
- s.exec_cmd('mkdir ~/%s' % self.work_dir)
- s.scp_put(self.dea_file, dest)
- s.scp_put(self.macs_file, dest)
- s.scp_put('%s/common.py' % self.file_dir, dest)
- s.scp_put('%s/dea.py' % self.file_dir, dest)
+ s.exec_cmd('rm -rf %s' % self.work_dir, False)
+ s.exec_cmd('mkdir %s' % self.work_dir)
+ s.scp_put(self.dea_file, self.work_dir)
+ s.scp_put(self.blade_node_file, self.work_dir)
+ s.scp_put('%s/common.py' % self.file_dir, self.work_dir)
+ s.scp_put('%s/dea.py' % self.file_dir, self.work_dir)
for f in glob.glob('%s/cloud/*' % self.file_dir):
- s.scp_put(f, dest)
+ s.scp_put(f, self.work_dir)
def power_off_nodes(self):
for node_id in self.node_ids:
@@ -53,35 +74,173 @@ class CloudDeploy(object):
def set_boot_order(self, boot_order_list):
for node_id in self.node_ids:
- self.dha.node_set_boot_order(node_id, boot_order_list)
+ self.dha.node_set_boot_order(node_id, boot_order_list[:])
def get_mac_addresses(self):
- macs_per_node = {}
+ self.macs_per_blade = {}
for node_id in self.node_ids:
- macs_per_node[node_id] = self.dha.get_node_pxe_mac(node_id)
- with io.open(self.macs_file, 'w') as stream:
- yaml.dump(macs_per_node, stream, default_flow_style=False)
+ self.macs_per_blade[node_id] = self.dha.get_node_pxe_mac(node_id)
def run_cloud_deploy(self, deploy_app):
log('START CLOUD DEPLOYMENT')
deploy_app = '%s/%s' % (self.work_dir, deploy_app)
dea_file = '%s/%s' % (self.work_dir, os.path.basename(self.dea_file))
- macs_file = '%s/%s' % (self.work_dir, os.path.basename(self.macs_file))
+ blade_node_file = '%s/%s' % (
+ self.work_dir, os.path.basename(self.blade_node_file))
+ with self.ssh as s:
+ status = s.run(
+ 'python %s %s %s %s' % (
+ deploy_app, ('-nh' if self.no_health_check else ''),
+ dea_file, blade_node_file))
+ return status
+
+ def check_supported_release(self):
+ log('Check supported release: %s' % self.wanted_release)
+ found = False
+ release_list = parse(self.ssh.exec_cmd('fuel release -l'))
+ for release in release_list:
+ if release[R['name']] == self.wanted_release:
+ found = True
+ break
+ if not found:
+ err('This Fuel does not contain the following release: %s'
+ % self.wanted_release)
+
+ def check_previous_installation(self):
+ log('Check previous installation')
+ env_list = parse(self.ssh.exec_cmd('fuel env list'))
+ if env_list:
+ self.cleanup_fuel_environments(env_list)
+ node_list = parse(self.ssh.exec_cmd('fuel node list'))
+ if node_list:
+ self.cleanup_fuel_nodes(node_list)
+
+ def cleanup_fuel_environments(self, env_list):
+ WAIT_LOOP = 60
+ SLEEP_TIME = 10
+ for env in env_list:
+ log('Deleting environment %s' % env[E['id']])
+ self.ssh.exec_cmd('fuel env --env %s --delete --force'
+ % env[E['id']])
+ all_env_erased = False
+ for i in range(WAIT_LOOP):
+ env_list = parse(self.ssh.exec_cmd('fuel env list'))
+ if env_list:
+ time.sleep(SLEEP_TIME)
+ else:
+ all_env_erased = True
+ break
+ if not all_env_erased:
+ err('Could not erase these environments %s'
+ % [(env[E['id']], env[E['status']]) for env in env_list])
+
+ def cleanup_fuel_nodes(self, node_list):
+ for node in node_list:
+ if node[N['status']] == 'discover':
+ log('Deleting node %s' % node[N['id']])
+ self.ssh.exec_cmd('fuel node --node-id %s --delete-from-db '
+ '--force' % node[N['id']])
+ self.ssh.exec_cmd('cobbler system remove --name node-%s'
+ % node[N['id']], False)
+
+ def check_prerequisites(self):
+ log('Check prerequisites')
with self.ssh:
- self.ssh.run('python %s %s %s' % (deploy_app, dea_file, macs_file))
+ self.check_supported_release()
+ self.check_previous_installation()
- def deploy(self):
+ def wait_for_discovered_blades(self):
+ log('Wait for discovered blades')
+ discovered_macs = []
+ restart_times = BLADE_RESTART_TIMES
- self.power_off_nodes()
+ for blade in self.node_ids:
+ self.blade_node_dict[blade] = None
+ with self.ssh:
+ all_discovered = self.discovery_waiting_loop(discovered_macs)
+
+ while not all_discovered and restart_times != 0:
+ restart_times -= 1
+ for blade in self.get_not_discovered_blades():
+ self.dha.node_reset(blade)
+ with self.ssh:
+ all_discovered = self.discovery_waiting_loop(discovered_macs)
+
+ if not all_discovered:
+ err('Not all blades have been discovered: %s'
+ % self.not_discovered_blades_summary())
+
+ with io.open(self.blade_node_file, 'w') as stream:
+ yaml.dump(self.blade_node_dict, stream, default_flow_style=False)
+
+ def discovery_waiting_loop(self, discovered_macs):
+ WAIT_LOOP = 360
+ SLEEP_TIME = 10
+ all_discovered = False
+ for i in range(WAIT_LOOP):
+ node_list = parse(self.ssh.exec_cmd('fuel node list'))
+ if node_list:
+ self.node_discovery(node_list, discovered_macs)
+ if self.all_blades_discovered():
+ all_discovered = True
+ break
+ else:
+ time.sleep(SLEEP_TIME)
+ return all_discovered
+
+ def node_discovery(self, node_list, discovered_macs):
+ for node in node_list:
+ if (node[N['status']] == 'discover' and
+ node[N['online']] == 'True' and
+ node[N['mac']] not in discovered_macs):
+ discovered_macs.append(node[N['mac']])
+ blade = self.find_mac_in_dict(node[N['mac']])
+ if blade:
+ log('Blade %s discovered as Node %s with MAC %s'
+ % (blade, node[N['id']], node[N['mac']]))
+ self.blade_node_dict[blade] = node[N['id']]
+
+ def find_mac_in_dict(self, mac):
+ for blade, mac_list in self.macs_per_blade.iteritems():
+ if mac in mac_list:
+ return blade
+
+ def all_blades_discovered(self):
+ for blade, node_id in self.blade_node_dict.iteritems():
+ if not node_id:
+ return False
+ return True
+
+ def not_discovered_blades_summary(self):
+ summary = ''
+ for blade, node_id in self.blade_node_dict.iteritems():
+ if not node_id:
+ summary += '\n[blade %s]' % blade
+ return summary
+
+ def get_not_discovered_blades(self):
+ not_discovered_blades = []
+ for blade, node_id in self.blade_node_dict.iteritems():
+ if not node_id:
+ not_discovered_blades.append(blade)
+ return not_discovered_blades
+
+ def set_boot_order_nodes(self):
+ self.power_off_nodes()
self.set_boot_order(['pxe', 'disk'])
-
self.power_on_nodes()
+ def deploy(self):
+
+ self.set_boot_order_nodes()
+
+ self.check_prerequisites()
+
self.get_mac_addresses()
- check_file_exists(self.macs_file)
+ self.wait_for_discovered_blades()
self.upload_cloud_deployment_files()
- self.run_cloud_deploy(CLOUD_DEPLOY_FILE)
+ return self.run_cloud_deploy(CLOUD_DEPLOY_FILE)
diff --git a/fuel/deploy/dha.py b/fuel/deploy/dha.py
index bf9a9512a..1feee6039 100644
--- a/fuel/deploy/dha.py
+++ b/fuel/deploy/dha.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import yaml
import io
@@ -5,15 +15,20 @@ from dha_adapters.libvirt_adapter import LibvirtAdapter
from dha_adapters.ipmi_adapter import IpmiAdapter
from dha_adapters.hp_adapter import HpAdapter
+
class DeploymentHardwareAdapter(object):
+
def __new__(cls, yaml_path):
with io.open(yaml_path) as yaml_file:
dha_struct = yaml.load(yaml_file)
type = dha_struct['adapter']
if cls is DeploymentHardwareAdapter:
- if type == 'libvirt': return LibvirtAdapter(yaml_path)
- if type == 'ipmi': return IpmiAdapter(yaml_path)
- if type == 'hp': return HpAdapter(yaml_path)
+ if type == 'libvirt':
+ return LibvirtAdapter(yaml_path)
+ if type == 'ipmi':
+ return IpmiAdapter(yaml_path)
+ if type == 'hp':
+ return HpAdapter(yaml_path)
return super(DeploymentHardwareAdapter, cls).__new__(cls)
diff --git a/fuel/deploy/dha_adapters/__init__.py b/fuel/deploy/dha_adapters/__init__.py
index e69de29bb..fb73157f9 100644
--- a/fuel/deploy/dha_adapters/__init__.py
+++ b/fuel/deploy/dha_adapters/__init__.py
@@ -0,0 +1,8 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@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
+###############################################################################
diff --git a/fuel/deploy/dha_adapters/hardware_adapter.py b/fuel/deploy/dha_adapters/hardware_adapter.py
index 884e9ce98..29e04f182 100644
--- a/fuel/deploy/dha_adapters/hardware_adapter.py
+++ b/fuel/deploy/dha_adapters/hardware_adapter.py
@@ -1,7 +1,18 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
import yaml
import io
+
class HardwareAdapter(object):
+
def __init__(self, yaml_path):
self.dha_struct = None
self.parse_yaml(yaml_path)
@@ -34,18 +45,15 @@ class HardwareAdapter(object):
node_ids.sort()
return node_ids
- def use_fuel_custom_install(self):
- return self.dha_struct['fuelCustomInstall']
-
def get_node_property(self, node_id, property_name):
for node in self.dha_struct['nodes']:
if node['id'] == node_id and property_name in node:
return node[property_name]
- def node_can_zero_mbr(self, node_id):
- return self.get_node_property(node_id, 'nodeCanZeroMBR')
-
def get_fuel_access(self):
for node in self.dha_struct['nodes']:
if 'isFuel' in node and node['isFuel']:
return node['username'], node['password']
+
+ def get_disks(self):
+ return self.dha_struct['disks']
diff --git a/fuel/deploy/dha_adapters/hp_adapter.py b/fuel/deploy/dha_adapters/hp_adapter.py
index 8fc38ad5f..51f55f32b 100644
--- a/fuel/deploy/dha_adapters/hp_adapter.py
+++ b/fuel/deploy/dha_adapters/hp_adapter.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
from ipmi_adapter import IpmiAdapter
from ssh_client import SSHClient
@@ -10,6 +20,7 @@ DEV = {'pxe': 'bootsource5',
ROOT = '/system1/bootconfig1'
+
class HpAdapter(IpmiAdapter):
def __init__(self, yaml_path):
@@ -19,7 +30,7 @@ class HpAdapter(IpmiAdapter):
log('Set boot order %s on Node %s' % (boot_order_list, node_id))
ip, username, password = self.get_access_info(node_id)
ssh = SSHClient(ip, username, password)
- for order, dev in enumerate(boot_order_list):
- with ssh as s:
+ with ssh as s:
+ for order, dev in enumerate(boot_order_list):
s.exec_cmd('set %s/%s bootorder=%s'
- % (ROOT, DEV[dev], order+1))
+ % (ROOT, DEV[dev], order + 1))
diff --git a/fuel/deploy/dha_adapters/ipmi_adapter.py b/fuel/deploy/dha_adapters/ipmi_adapter.py
index d97fd2ddb..25aa36ec9 100644
--- a/fuel/deploy/dha_adapters/ipmi_adapter.py
+++ b/fuel/deploy/dha_adapters/ipmi_adapter.py
@@ -1,8 +1,21 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
+import time
from hardware_adapter import HardwareAdapter
log = common.log
exec_cmd = common.exec_cmd
+err = common.err
+
class IpmiAdapter(HardwareAdapter):
@@ -27,28 +40,72 @@ class IpmiAdapter(HardwareAdapter):
return mac_list
def node_power_on(self, node_id):
+ WAIT_LOOP = 200
+ SLEEP_TIME = 3
log('Power ON Node %s' % node_id)
cmd_prefix = self.ipmi_cmd(node_id)
state = exec_cmd('%s chassis power status' % cmd_prefix)
if state == 'Chassis Power is off':
exec_cmd('%s chassis power on' % cmd_prefix)
+ done = False
+ for i in range(WAIT_LOOP):
+ state, _ = exec_cmd('%s chassis power status' % cmd_prefix,
+ False)
+ if state == 'Chassis Power is on':
+ done = True
+ break
+ else:
+ time.sleep(SLEEP_TIME)
+ if not done:
+ err('Could Not Power ON Node %s' % node_id)
def node_power_off(self, node_id):
+ WAIT_LOOP = 200
+ SLEEP_TIME = 3
log('Power OFF Node %s' % node_id)
cmd_prefix = self.ipmi_cmd(node_id)
state = exec_cmd('%s chassis power status' % cmd_prefix)
if state == 'Chassis Power is on':
+ done = False
exec_cmd('%s chassis power off' % cmd_prefix)
+ for i in range(WAIT_LOOP):
+ state, _ = exec_cmd('%s chassis power status' % cmd_prefix,
+ False)
+ if state == 'Chassis Power is off':
+ done = True
+ break
+ else:
+ time.sleep(SLEEP_TIME)
+ if not done:
+ err('Could Not Power OFF Node %s' % node_id)
def node_reset(self, node_id):
- log('Reset Node %s' % node_id)
+ WAIT_LOOP = 600
+ log('RESET Node %s' % node_id)
cmd_prefix = self.ipmi_cmd(node_id)
state = exec_cmd('%s chassis power status' % cmd_prefix)
if state == 'Chassis Power is on':
+ was_shut_off = False
+ done = False
exec_cmd('%s chassis power reset' % cmd_prefix)
+ for i in range(WAIT_LOOP):
+ state, _ = exec_cmd('%s chassis power status' % cmd_prefix,
+ False)
+ if state == 'Chassis Power is off':
+ was_shut_off = True
+ elif state == 'Chassis Power is on' and was_shut_off:
+ done = True
+ break
+ time.sleep(1)
+ if not done:
+ err('Could Not RESET Node %s' % node_id)
+ else:
+ err('Cannot RESET Node %s because it\'s not Active, state: %s'
+ % (node_id, state))
def node_set_boot_order(self, node_id, boot_order_list):
log('Set boot order %s on Node %s' % (boot_order_list, node_id))
+ boot_order_list.reverse()
cmd_prefix = self.ipmi_cmd(node_id)
for dev in boot_order_list:
if dev == 'pxe':
diff --git a/fuel/deploy/dha_adapters/libvirt_adapter.py b/fuel/deploy/dha_adapters/libvirt_adapter.py
index dde494635..b285c1676 100644
--- a/fuel/deploy/dha_adapters/libvirt_adapter.py
+++ b/fuel/deploy/dha_adapters/libvirt_adapter.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
from lxml import etree
from hardware_adapter import HardwareAdapter
@@ -10,6 +20,7 @@ DEV = {'pxe': 'network',
'disk': 'hd',
'iso': 'cdrom'}
+
class LibvirtAdapter(HardwareAdapter):
def __init__(self, yaml_path):
@@ -88,7 +99,8 @@ class LibvirtAdapter(HardwareAdapter):
def node_eject_iso(self, node_id):
vm_name = self.get_node_property(node_id, 'libvirtName')
device = self.get_name_of_device(vm_name, 'cdrom')
- exec_cmd('virsh change-media %s --eject %s' % (vm_name, device), False)
+ exec_cmd('virsh change-media %s --eject %s --config --live'
+ % (vm_name, device), False)
def node_insert_iso(self, node_id, iso_file):
vm_name = self.get_node_property(node_id, 'libvirtName')
@@ -96,12 +108,6 @@ class LibvirtAdapter(HardwareAdapter):
exec_cmd('virsh change-media %s --insert %s %s'
% (vm_name, device, iso_file))
- def get_disks(self):
- return self.dha_struct['disks']
-
- def get_node_role(self, node_id):
- return self.get_node_property(node_id, 'role')
-
def get_node_pxe_mac(self, node_id):
mac_list = []
vm_name = self.get_node_property(node_id, 'libvirtName')
@@ -125,3 +131,6 @@ class LibvirtAdapter(HardwareAdapter):
device = target.get('dev')
if device:
return device
+
+ def get_virt_net_conf_dir(self):
+ return self.dha_struct['virtNetConfDir']
diff --git a/fuel/build/opendaylight/f_odl/testing/fake_init.pp b/fuel/deploy/environments/__init__.py
index 0600d2e0c..fb73157f9 100644
--- a/fuel/build/opendaylight/f_odl/testing/fake_init.pp
+++ b/fuel/deploy/environments/__init__.py
@@ -1,13 +1,8 @@
-##############################################################################
+###############################################################################
# Copyright (c) 2015 Ericsson AB and others.
-# stefan.k.berg@ericsson.com
-# jonas.bjurel@ericsson.com
+# szilard.cserey@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
-##############################################################################
-
-$fuel_settings = parseyaml($astute_settings_yaml)
-
-include opnfv::odl
+###############################################################################
diff --git a/fuel/deploy/environments/execution_environment.py b/fuel/deploy/environments/execution_environment.py
new file mode 100644
index 000000000..63be5cd11
--- /dev/null
+++ b/fuel/deploy/environments/execution_environment.py
@@ -0,0 +1,78 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@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
+###############################################################################
+
+
+from lxml import etree
+
+import common
+from dha_adapters.libvirt_adapter import LibvirtAdapter
+
+exec_cmd = common.exec_cmd
+err = common.err
+log = common.log
+check_dir_exists = common.check_dir_exists
+check_file_exists = common.check_file_exists
+check_if_root = common.check_if_root
+
+
+class ExecutionEnvironment(object):
+
+ def __init__(self, storage_dir, dha_file, root_dir):
+ self.storage_dir = storage_dir
+ self.dha = LibvirtAdapter(dha_file)
+ self.root_dir = root_dir
+ self.parser = etree.XMLParser(remove_blank_text=True)
+ self.fuel_node_id = self.dha.get_fuel_node_id()
+
+ def delete_vm(self, node_id):
+ vm_name = self.dha.get_node_property(node_id, 'libvirtName')
+ r, c = exec_cmd('virsh dumpxml %s' % vm_name, False)
+ if c:
+ return
+ self.undefine_vm_delete_disk(r, vm_name)
+
+ def undefine_vm_delete_disk(self, printout, vm_name):
+ disk_files = []
+ xml_dump = etree.fromstring(printout, self.parser)
+ disks = xml_dump.xpath('/domain/devices/disk')
+ for disk in disks:
+ sources = disk.xpath('source')
+ for source in sources:
+ source_file = source.get('file')
+ if source_file:
+ disk_files.append(source_file)
+ log('Deleting VM %s with disks %s' % (vm_name, disk_files))
+ exec_cmd('virsh destroy %s' % vm_name, False)
+ exec_cmd('virsh undefine %s' % vm_name, False)
+ for file in disk_files:
+ exec_cmd('rm -f %s' % file)
+
+ def define_vm(self, vm_name, temp_vm_file, disk_path):
+ log('Creating VM %s with disks %s' % (vm_name, disk_path))
+ with open(temp_vm_file) as f:
+ vm_xml = etree.parse(f)
+ names = vm_xml.xpath('/domain/name')
+ for name in names:
+ name.text = vm_name
+ uuids = vm_xml.xpath('/domain/uuid')
+ for uuid in uuids:
+ uuid.getparent().remove(uuid)
+ disks = vm_xml.xpath('/domain/devices/disk')
+ for disk in disks:
+ if (disk.get('type') == 'file' and
+ disk.get('device') == 'disk'):
+ sources = disk.xpath('source')
+ for source in sources:
+ disk.remove(source)
+ source = etree.Element('source')
+ source.set('file', disk_path)
+ disk.append(source)
+ with open(temp_vm_file, 'w') as f:
+ vm_xml.write(f, pretty_print=True, xml_declaration=True)
+ exec_cmd('virsh define %s' % temp_vm_file)
diff --git a/fuel/deploy/environments/libvirt_environment.py b/fuel/deploy/environments/libvirt_environment.py
new file mode 100644
index 000000000..785eeca7b
--- /dev/null
+++ b/fuel/deploy/environments/libvirt_environment.py
@@ -0,0 +1,107 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@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
+###############################################################################
+
+
+from lxml import etree
+import glob
+
+import common
+from execution_environment import ExecutionEnvironment
+
+exec_cmd = common.exec_cmd
+err = common.err
+log = common.log
+check_dir_exists = common.check_dir_exists
+check_file_exists = common.check_file_exists
+check_if_root = common.check_if_root
+
+
+class LibvirtEnvironment(ExecutionEnvironment):
+
+ def __init__(self, storage_dir, dha_file, dea, root_dir):
+ super(LibvirtEnvironment, self).__init__(
+ storage_dir, dha_file, root_dir)
+ self.dea = dea
+ self.network_dir = '%s/%s' % (self.root_dir,
+ self.dha.get_virt_net_conf_dir())
+ self.node_ids = self.dha.get_all_node_ids()
+ self.net_names = self.collect_net_names()
+
+ def create_storage(self, node_id, disk_path, disk_sizes):
+ if node_id == self.fuel_node_id:
+ disk_size = disk_sizes['fuel']
+ else:
+ roles = self.dea.get_node_role(node_id)
+ role = 'controller' if 'controller' in roles else 'compute'
+ disk_size = disk_sizes[role]
+ exec_cmd('fallocate -l %s %s' % (disk_size, disk_path))
+
+ def create_vms(self):
+ temp_dir = exec_cmd('mktemp -d')
+ disk_sizes = self.dha.get_disks()
+ for node_id in self.node_ids:
+ vm_name = self.dha.get_node_property(node_id, 'libvirtName')
+ vm_template = '%s/%s' % (self.root_dir,
+ self.dha.get_node_property(
+ node_id, 'libvirtTemplate'))
+ check_file_exists(vm_template)
+ disk_path = '%s/%s.raw' % (self.storage_dir, vm_name)
+ self.create_storage(node_id, disk_path, disk_sizes)
+ temp_vm_file = '%s/%s' % (temp_dir, vm_name)
+ exec_cmd('cp %s %s' % (vm_template, temp_vm_file))
+ self.define_vm(vm_name, temp_vm_file, disk_path)
+ exec_cmd('rm -fr %s' % temp_dir)
+
+ def start_vms(self):
+ for node_id in self.node_ids:
+ self.dha.node_power_on(node_id)
+
+ def create_networks(self):
+ for net_file in glob.glob('%s/*' % self.network_dir):
+ exec_cmd('virsh net-define %s' % net_file)
+ for net in self.net_names:
+ log('Creating network %s' % net)
+ exec_cmd('virsh net-autostart %s' % net)
+ exec_cmd('virsh net-start %s' % net)
+
+ def delete_networks(self):
+ for net in self.net_names:
+ log('Deleting network %s' % net)
+ exec_cmd('virsh net-destroy %s' % net, False)
+ exec_cmd('virsh net-undefine %s' % net, False)
+
+ def get_net_name(self, net_file):
+ with open(net_file) as f:
+ net_xml = etree.parse(f)
+ name_list = net_xml.xpath('/network/name')
+ for name in name_list:
+ net_name = name.text
+ return net_name
+
+ def collect_net_names(self):
+ net_list = []
+ for net_file in glob.glob('%s/*' % self.network_dir):
+ name = self.get_net_name(net_file)
+ net_list.append(name)
+ return net_list
+
+ def delete_vms(self):
+ for node_id in self.node_ids:
+ self.delete_vm(node_id)
+
+ def setup_environment(self):
+ check_dir_exists(self.network_dir)
+ self.cleanup_environment()
+ self.create_networks()
+ self.create_vms()
+ self.start_vms()
+
+ def cleanup_environment(self):
+ self.delete_vms()
+ self.delete_networks()
diff --git a/fuel/deploy/environments/virtual_fuel.py b/fuel/deploy/environments/virtual_fuel.py
new file mode 100644
index 000000000..cb8be6371
--- /dev/null
+++ b/fuel/deploy/environments/virtual_fuel.py
@@ -0,0 +1,70 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@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
+###############################################################################
+
+
+from lxml import etree
+
+import common
+from execution_environment import ExecutionEnvironment
+
+exec_cmd = common.exec_cmd
+log = common.log
+check_file_exists = common.check_file_exists
+check_if_root = common.check_if_root
+
+
+class VirtualFuel(ExecutionEnvironment):
+
+ def __init__(self, storage_dir, pxe_bridge, dha_file, root_dir):
+ super(VirtualFuel, self).__init__(storage_dir, dha_file, root_dir)
+ self.pxe_bridge = pxe_bridge
+
+ def set_vm_nic(self, temp_vm_file):
+ with open(temp_vm_file) as f:
+ vm_xml = etree.parse(f)
+ interfaces = vm_xml.xpath('/domain/devices/interface')
+ for interface in interfaces:
+ interface.getparent().remove(interface)
+ interface = etree.Element('interface')
+ interface.set('type', 'bridge')
+ source = etree.SubElement(interface, 'source')
+ source.set('bridge', self.pxe_bridge)
+ model = etree.SubElement(interface, 'model')
+ model.set('type', 'virtio')
+ devices = vm_xml.xpath('/domain/devices')
+ if devices:
+ device = devices[0]
+ device.append(interface)
+ with open(temp_vm_file, 'w') as f:
+ vm_xml.write(f, pretty_print=True, xml_declaration=True)
+
+ def create_vm(self):
+ temp_dir = exec_cmd('mktemp -d')
+ vm_name = self.dha.get_node_property(self.fuel_node_id, 'libvirtName')
+ vm_template = '%s/%s' % (self.root_dir,
+ self.dha.get_node_property(
+ self.fuel_node_id, 'libvirtTemplate'))
+ check_file_exists(vm_template)
+ disk_path = '%s/%s.raw' % (self.storage_dir, vm_name)
+ disk_sizes = self.dha.get_disks()
+ disk_size = disk_sizes['fuel']
+ exec_cmd('fallocate -l %s %s' % (disk_size, disk_path))
+ temp_vm_file = '%s/%s' % (temp_dir, vm_name)
+ exec_cmd('cp %s %s' % (vm_template, temp_vm_file))
+ self.set_vm_nic(temp_vm_file)
+ self.define_vm(vm_name, temp_vm_file, disk_path)
+ exec_cmd('rm -fr %s' % temp_dir)
+
+ def setup_environment(self):
+ check_if_root()
+ self.cleanup_environment()
+ self.create_vm()
+
+ def cleanup_environment(self):
+ self.delete_vm(self.fuel_node_id)
diff --git a/fuel/deploy/execution_environment.py b/fuel/deploy/execution_environment.py
new file mode 100644
index 000000000..e671463e4
--- /dev/null
+++ b/fuel/deploy/execution_environment.py
@@ -0,0 +1,46 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
+import yaml
+import io
+import os
+
+import common
+from environments.libvirt_environment import LibvirtEnvironment
+from environments.virtual_fuel import VirtualFuel
+
+exec_cmd = common.exec_cmd
+err = common.err
+log = common.log
+check_dir_exists = common.check_dir_exists
+check_file_exists = common.check_file_exists
+check_if_root = common.check_if_root
+ArgParser = common.ArgParser
+
+
+class ExecutionEnvironment(object):
+
+ def __new__(cls, storage_dir, pxe_bridge, dha_path, dea):
+
+ with io.open(dha_path) as yaml_file:
+ dha_struct = yaml.load(yaml_file)
+
+ type = dha_struct['adapter']
+
+ root_dir = os.path.dirname(os.path.realpath(__file__))
+
+ if cls is ExecutionEnvironment:
+ if type == 'libvirt':
+ return LibvirtEnvironment(storage_dir, dha_path, dea, root_dir)
+
+ if type == 'ipmi' or type == 'hp':
+ return VirtualFuel(storage_dir, pxe_bridge, dha_path, root_dir)
+
+ return super(ExecutionEnvironment, cls).__new__(cls)
diff --git a/fuel/deploy/fuel_patch/ks.cfg.patch b/fuel/deploy/fuel_patch/ks.cfg.patch
new file mode 100644
index 000000000..189695792
--- /dev/null
+++ b/fuel/deploy/fuel_patch/ks.cfg.patch
@@ -0,0 +1,19 @@
+*** ks.cfg.orig Wed Apr 15 21:47:09 2015
+--- ks.cfg Wed Apr 15 21:47:24 2015
+***************
+*** 35,41 ****
+ default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'`
+
+ installdrive="undefined"
+! forceformat="no"
+ for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
+
+ set ${drives} ${removable_drives}
+--- 35,41 ----
+ default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'`
+
+ installdrive="undefined"
+! forceformat="yes"
+ for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
+
+ set ${drives} ${removable_drives}
diff --git a/fuel/deploy/install-ubuntu-packages.sh b/fuel/deploy/install-ubuntu-packages.sh
deleted file mode 100755
index 1ebd7c023..000000000
--- a/fuel/deploy/install-ubuntu-packages.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-##############################################################################
-# Copyright (c) 2015 Ericsson AB and others.
-# stefan.k.berg@ericsson.com
-# jonas.bjurel@ericsson.com
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-# Tools for installation on the libvirt server/base host
-#
-apt-get install -y libvirt-bin qemu-kvm tightvncserver virt-manager \
- sshpass fuseiso genisoimage blackbox xterm python-yaml python-netaddr \
- python-paramiko python-lxml python-pip
-pip install scp
-restart libvirt-bin \ No newline at end of file
diff --git a/fuel/deploy/install_fuel_master.py b/fuel/deploy/install_fuel_master.py
index bb8e7e175..0e3c1c044 100644
--- a/fuel/deploy/install_fuel_master.py
+++ b/fuel/deploy/install_fuel_master.py
@@ -1,20 +1,37 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import common
import time
import os
+import glob
from ssh_client import SSHClient
from dha_adapters.libvirt_adapter import LibvirtAdapter
log = common.log
err = common.err
clean = common.clean
+delete = common.delete
TRANSPLANT_FUEL_SETTINGS = 'transplant_fuel_settings.py'
BOOTSTRAP_ADMIN = '/usr/local/sbin/bootstrap_admin_node'
+FUEL_CLIENT_CONFIG = '/etc/fuel/client/config.yaml'
+PLUGINS_DIR = '~/plugins'
+LOCAL_PLUGIN_FOLDER = '/opt/opnfv'
+
class InstallFuelMaster(object):
- def __init__(self, dea_file, dha_file, fuel_ip, fuel_username, fuel_password,
- fuel_node_id, iso_file, work_dir):
+ def __init__(self, dea_file, dha_file, fuel_ip, fuel_username,
+ fuel_password, fuel_node_id, iso_file, work_dir,
+ fuel_plugins_dir):
self.dea_file = dea_file
self.dha = LibvirtAdapter(dha_file)
self.fuel_ip = fuel_ip
@@ -22,7 +39,9 @@ class InstallFuelMaster(object):
self.fuel_password = fuel_password
self.fuel_node_id = fuel_node_id
self.iso_file = iso_file
+ self.iso_dir = os.path.dirname(self.iso_file)
self.work_dir = work_dir
+ self.fuel_plugins_dir = fuel_plugins_dir
self.file_dir = os.path.dirname(os.path.realpath(__file__))
self.ssh = SSHClient(self.fuel_ip, self.fuel_username,
self.fuel_password)
@@ -32,21 +51,16 @@ class InstallFuelMaster(object):
self.dha.node_power_off(self.fuel_node_id)
- self.zero_mbr_set_boot_order()
-
- self.proceed_with_installation()
-
- def custom_install(self):
- log('Start Custom Fuel Installation')
-
- self.dha.node_power_off(self.fuel_node_id)
-
log('Zero the MBR')
self.dha.node_zero_mbr(self.fuel_node_id)
self.dha.node_set_boot_order(self.fuel_node_id, ['disk', 'iso'])
- self.proceed_with_installation()
+ try:
+ self.proceed_with_installation()
+ except Exception as e:
+ self.post_install_cleanup()
+ err(e)
def proceed_with_installation(self):
log('Eject ISO')
@@ -68,7 +82,7 @@ class InstallFuelMaster(object):
log('Let the Fuel deployment continue')
log('Found FUEL menu as PID %s, now killing it' % fuel_menu_pid)
- self.ssh_exec_cmd('kill %s' % fuel_menu_pid)
+ self.ssh_exec_cmd('kill %s' % fuel_menu_pid, False)
log('Wait until installation complete')
self.wait_until_installation_completed()
@@ -76,22 +90,36 @@ class InstallFuelMaster(object):
log('Waiting for one minute for Fuel to stabilize')
time.sleep(60)
- log('Eject ISO')
- self.dha.node_eject_iso(self.fuel_node_id)
+ self.delete_deprecated_fuel_client_config_from_fuel_6_1()
+
+ self.collect_plugin_files()
+
+ self.install_plugins()
+
+ self.post_install_cleanup()
log('Fuel Master installed successfully !')
- def zero_mbr_set_boot_order(self):
- if self.dha.node_can_zero_mbr(self.fuel_node_id):
- log('Fuel Node %s capable of zeroing MBR so doing that...'
- % self.fuel_node_id)
- self.dha.node_zero_mbr(self.fuel_node_id)
- self.dha.node_set_boot_order(self.fuel_node_id, ['disk', 'iso'])
- elif self.dha.node_can_set_boot_order_live(self.fuel_node_id):
- log('Node %s can change ISO boot order live' % self.fuel_node_id)
- self.dha.node_set_boot_order(self.fuel_node_id, ['iso', 'disk'])
- else:
- err('No way to install Fuel node')
+ def collect_plugin_files(self):
+ with self.ssh as s:
+ s.exec_cmd('mkdir %s' % PLUGINS_DIR)
+ if self.fuel_plugins_dir:
+ for f in glob.glob('%s/*.rpm' % self.fuel_plugins_dir):
+ s.scp_put(f, PLUGINS_DIR)
+ else:
+ s.exec_cmd('cp %s/*.rpm %s' % (LOCAL_PLUGIN_FOLDER,
+ PLUGINS_DIR))
+
+ def install_plugins(self):
+ log('Installing Fuel Plugins')
+ with self.ssh as s:
+ r = s.exec_cmd('find %s -type f -name \'*.rpm\'' % PLUGINS_DIR)
+ for f in r.splitlines():
+ log('Found plugin %s, installing ...' % f)
+ r, e = s.exec_cmd('fuel plugins --install %s' % f, False)
+ if e and 'does not update installed package' not in r:
+ raise Exception('Installation of Fuel Plugin %s '
+ 'failed: %s' % (f, e))
def wait_for_node_up(self):
WAIT_LOOP = 60
@@ -103,14 +131,14 @@ class InstallFuelMaster(object):
success = True
break
except Exception as e:
- log('EXCEPTION [%s] received when SSH-ing into Fuel VM %s ... '
- 'sleeping %s seconds' % (e, self.fuel_ip, SLEEP_TIME))
+ log('Trying to SSH into Fuel VM %s ... sleeping %s seconds'
+ % (self.fuel_ip, SLEEP_TIME))
time.sleep(SLEEP_TIME)
finally:
self.ssh.close()
if not success:
- err('Could not SSH into Fuel VM %s' % self.fuel_ip)
+ raise Exception('Could not SSH into Fuel VM %s' % self.fuel_ip)
def wait_until_fuel_menu_up(self):
WAIT_LOOP = 60
@@ -127,39 +155,35 @@ class InstallFuelMaster(object):
else:
break
if not fuel_menu_pid:
- err('Could not find the Fuel Menu Process ID')
+ raise Exception('Could not find the Fuel Menu Process ID')
return fuel_menu_pid
def get_fuel_menu_pid(self, printout, search):
- fuel_menu_pid = None
for line in printout.splitlines():
- if search in line:
- fuel_menu_pid = clean(line)[1]
- break
- return fuel_menu_pid
+ if line.endswith(search):
+ return clean(line)[1]
- def ssh_exec_cmd(self, cmd):
+ def ssh_exec_cmd(self, cmd, check=True):
with self.ssh:
- ret = self.ssh.exec_cmd(cmd)
+ ret = self.ssh.exec_cmd(cmd, check=check)
return ret
def inject_own_astute_yaml(self):
- dest ='~/%s/' % self.work_dir
-
with self.ssh as s:
- s.exec_cmd('rm -rf %s' % self.work_dir, check=False)
- s.exec_cmd('mkdir ~/%s' % self.work_dir)
- s.scp_put(self.dea_file, dest)
- s.scp_put('%s/common.py' % self.file_dir, dest)
- s.scp_put('%s/dea.py' % self.file_dir, dest)
- s.scp_put('%s/transplant_fuel_settings.py' % self.file_dir, dest)
+ s.exec_cmd('rm -rf %s' % self.work_dir, False)
+ s.exec_cmd('mkdir %s' % self.work_dir)
+ s.scp_put(self.dea_file, self.work_dir)
+ s.scp_put('%s/common.py' % self.file_dir, self.work_dir)
+ s.scp_put('%s/dea.py' % self.file_dir, self.work_dir)
+ s.scp_put('%s/transplant_fuel_settings.py'
+ % self.file_dir, self.work_dir)
log('Modifying Fuel astute')
- s.run('python ~/%s/%s ~/%s/%s'
+ s.run('python %s/%s %s/%s'
% (self.work_dir, TRANSPLANT_FUEL_SETTINGS,
self.work_dir, os.path.basename(self.dea_file)))
def wait_until_installation_completed(self):
- WAIT_LOOP = 180
+ WAIT_LOOP = 360
SLEEP_TIME = 10
CMD = 'ps -ef | grep %s | grep -v grep' % BOOTSTRAP_ADMIN
@@ -174,4 +198,21 @@ class InstallFuelMaster(object):
time.sleep(SLEEP_TIME)
if not install_completed:
- err('Fuel installation did not complete')
+ raise Exception('Fuel installation did not complete')
+
+ def post_install_cleanup(self):
+ log('Eject ISO file %s' % self.iso_file)
+ self.dha.node_eject_iso(self.fuel_node_id)
+ log('Remove ISO directory %s' % self.iso_dir)
+ delete(self.iso_dir)
+
+ def delete_deprecated_fuel_client_config_from_fuel_6_1(self):
+ with self.ssh as s:
+ response, error = s.exec_cmd('fuel -v', False)
+ if (error and
+ 'DEPRECATION WARNING' in error and
+ '6.1.0' in error and
+ FUEL_CLIENT_CONFIG in error):
+ log('Delete deprecated fuel client config %s' % FUEL_CLIENT_CONFIG)
+ with self.ssh as s:
+ s.exec_cmd('rm %s' % FUEL_CLIENT_CONFIG, False)
diff --git a/fuel/deploy/libvirt/dha.yaml b/fuel/deploy/libvirt/dha.yaml
deleted file mode 100644
index ce61e534a..000000000
--- a/fuel/deploy/libvirt/dha.yaml
+++ /dev/null
@@ -1,80 +0,0 @@
-title: Deployment Hardware Adapter (DHA)
-# DHA API version supported
-version: 1.1
-created: Sat Apr 25 16:26:22 UTC 2015
-comment: Small libvirt setup
-
-# Adapter to use for this definition
-adapter: libvirt
-
-# Node list.
-# Mandatory fields are id and role.
-# The MAC address of the PXE boot interface is not mandatory
-# to be set, but the field must be present.
-# All other fields are adapter specific.
-
-nodes:
-- id: 1
- pxeMac: 52:54:00:aa:dd:84
- libvirtName: controller1
- libvirtTemplate: controller
- role: controller
-- id: 2
- pxeMac: 52:54:00:aa:dd:84
- libvirtName: controller2
- libvirtTemplate: controller
- role: controller
-- id: 3
- pxeMac: 52:54:00:aa:dd:84
- libvirtName: controller3
- libvirtTemplate: controller
- role: controller
-- id: 4
- pxeMac: 52:54:00:41:64:f3
- libvirtName: compute1
- libvirtTemplate: compute
- role: compute
-- id: 5
- pxeMac: 52:54:00:69:a0:79
- libvirtName: compute2
- libvirtTemplate: compute
- role: compute
-- id: 6
- pxeMac: 52:54:00:69:a0:79
- libvirtName: compute3
- libvirtTemplate: compute
- role: compute
-- id: 7
- pxeMac: 52:54:00:f8:b0:75
- libvirtName: fuel-master
- libvirtTemplate: fuel-master
- isFuel: yes
- nodeCanZeroMBR: yes
- nodeCanSetBootOrderLive: yes
- username: root
- password: r00tme
-
-disks:
- fuel: 30G
- controller: 30G
- compute: 30G
-
-# Deployment power on strategy
-# all: Turn on all nodes at once. There will be no correlation
-# between the DHA and DEA node numbering. MAC addresses
-# will be used to select the node roles though.
-# sequence: Turn on the nodes in sequence starting with the lowest order
-# node and wait for the node to be detected by Fuel. Not until
-# the node has been detected and assigned a role will the next
-# node be turned on.
-powerOnStrategy: all
-
-# If fuelCustomInstall is set to true, Fuel is assumed to be installed by
-# calling the DHA adapter function "dha_fuelCustomInstall()" with two
-# arguments: node ID and the ISO file name to deploy. The custom install
-# function is then to handle all necessary logic to boot the Fuel master
-# from the ISO and then return.
-# Allowed values: true, false
-
-fuelCustomInstall: false
-
diff --git a/fuel/deploy/reap.py b/fuel/deploy/reap.py
new file mode 100644
index 000000000..c72b33cf9
--- /dev/null
+++ b/fuel/deploy/reap.py
@@ -0,0 +1,339 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
+import common
+import time
+import os
+import yaml
+import glob
+import shutil
+
+N = common.N
+E = common.E
+R = common.R
+ArgParser = common.ArgParser
+exec_cmd = common.exec_cmd
+parse = common.parse
+err = common.err
+log = common.log
+delete = common.delete
+commafy = common.commafy
+
+DEA_1 = '''
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version: 1.1
+created: {date}
+comment: {comment}
+'''
+
+DHA_1 = '''
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version: 1.1
+created: {date}
+comment: {comment}
+
+# Adapter to use for this definition
+# adapter: [ipmi|libvirt]
+adapter:
+
+# Node list.
+# Mandatory properties are id and role.
+# All other properties are adapter specific.
+# For Non-Fuel nodes controlled by:
+# - ipmi adapter you need to provide:
+# pxeMac
+# ipmiIp
+# ipmiUser
+# ipmiPass
+# - libvirt adapter you need to provide:
+# libvirtName: <whatever>
+# libvirtTemplate: [libvirt/vms/controller.xml | libvirt/vms/compute.xml]
+#
+# For the Fuel Node you need to provide:
+# libvirtName: <whatever>
+# libvirtTemplate: libvirt/vms/fuel.xml
+# isFuel: yes
+# username: root
+# password: r00tme
+'''
+
+DHA_2 = '''
+# Adding the Fuel node as node id {node_id}
+# which may not be correct - please adjust as needed.
+'''
+
+DISKS = {'fuel': '30G',
+ 'controller': '30G',
+ 'compute': '30G'}
+
+
+class Reap(object):
+
+ def __init__(self, dea_file, dha_file, comment):
+ self.dea_file = dea_file
+ self.dha_file = dha_file
+ self.comment = comment
+ self.temp_dir = None
+ self.env = None
+ self.env_id = None
+ self.last_node = None
+
+ def get_env(self):
+ env_list = parse(exec_cmd('fuel env'))
+ if len(env_list) > 1:
+ err('Not exactly one environment')
+ self.env = env_list[0]
+ self.env_id = self.env[E['id']]
+
+ def download_config(self, config_type):
+ log('Download %s config for environment %s'
+ % (config_type, self.env_id))
+ exec_cmd('fuel %s --env %s --download --dir %s'
+ % (config_type, self.env_id, self.temp_dir))
+
+ def write(self, file, text, newline=True):
+ mode = 'a' if os.path.isfile(file) else 'w'
+ with open(file, mode) as f:
+ f.write('%s%s' % (text, ('\n' if newline else '')))
+
+ def write_yaml(self, file, data, newline=True):
+ self.write(file, yaml.dump(data, default_flow_style=False).strip(),
+ newline)
+
+ def get_node_by_id(self, node_list, node_id):
+ for node in node_list:
+ if node[N['id']] == node_id:
+ return node
+
+ def reap_interface(self, node_id, interfaces):
+ interface, mac = self.get_interface(node_id)
+ if_name = None
+ if interfaces:
+ if_name = self.check_dict_exists(interfaces, interface)
+ if not if_name:
+ if_name = 'interfaces_%s' % str(len(interfaces) + 1)
+ interfaces[if_name] = interface
+ return if_name, mac
+
+ def reap_transformation(self, node_id, roles, transformations):
+ main_role = 'controller' if 'controller' in roles else 'compute'
+ node_file = glob.glob('%s/deployment_%s/*%s_%s.yaml'
+ % (self.temp_dir, self.env_id,
+ main_role, node_id))
+ tr_name = None
+ with open(node_file[0]) as f:
+ node_config = yaml.load(f)
+ transformation = {'transformations':
+ node_config['network_scheme']['transformations']}
+ if transformations:
+ tr_name = self.check_dict_exists(transformations, transformation)
+ if not tr_name:
+ tr_name = 'transformations_%s' % str(len(transformations) + 1)
+ transformations[tr_name] = transformation
+ return tr_name
+
+ def check_dict_exists(self, main_dict, dict):
+ for key, val in main_dict.iteritems():
+ if cmp(dict, val) == 0:
+ return key
+
+ def reap_nodes_interfaces_transformations(self):
+ node_list = parse(exec_cmd('fuel node'))
+ real_node_ids = [node[N['id']] for node in node_list]
+ real_node_ids.sort()
+ min_node = real_node_ids[0]
+
+ interfaces = {}
+ transformations = {}
+ dea_nodes = []
+ dha_nodes = []
+
+ for real_node_id in real_node_ids:
+ node_id = int(real_node_id) - int(min_node) + 1
+ self.last_node = node_id
+ node = self.get_node_by_id(node_list, real_node_id)
+ roles = commafy(node[N['roles']])
+ if not roles:
+ err('Fuel Node %s has no role' % real_node_id)
+ dea_node = {'id': node_id,
+ 'role': roles}
+ dha_node = {'id': node_id}
+ if_name, mac = self.reap_interface(real_node_id, interfaces)
+ tr_name = self.reap_transformation(real_node_id, roles,
+ transformations)
+ dea_node.update(
+ {'interfaces': if_name,
+ 'transformations': tr_name})
+
+ dha_node.update(
+ {'pxeMac': mac if mac else None,
+ 'ipmiIp': None,
+ 'ipmiUser': None,
+ 'ipmiPass': None,
+ 'libvirtName': None,
+ 'libvirtTemplate': None})
+
+ dea_nodes.append(dea_node)
+ dha_nodes.append(dha_node)
+
+ self.write_yaml(self.dha_file, {'nodes': dha_nodes}, False)
+ self.write_yaml(self.dea_file, {'nodes': dea_nodes})
+ self.write_yaml(self.dea_file, interfaces)
+ self.write_yaml(self.dea_file, transformations)
+ self.reap_fuel_node_info()
+ self.write_yaml(self.dha_file, {'disks': DISKS})
+
+ def reap_fuel_node_info(self):
+ dha_nodes = []
+ dha_node = {
+ 'id': self.last_node + 1,
+ 'libvirtName': None,
+ 'libvirtTemplate': None,
+ 'isFuel': True,
+ 'username': 'root',
+ 'password': 'r00tme'}
+
+ dha_nodes.append(dha_node)
+
+ self.write(self.dha_file, DHA_2.format(node_id=dha_node['id']), False)
+ self.write_yaml(self.dha_file, dha_nodes)
+
+ def reap_environment_info(self):
+ network_file = ('%s/network_%s.yaml'
+ % (self.temp_dir, self.env_id))
+ network = self.read_yaml(network_file)
+ env = {'environment':
+ {'name': self.env[E['name']],
+ 'mode': self.env[E['mode']],
+ 'net_segment_type':
+ network['networking_parameters']['segmentation_type']}}
+ self.write_yaml(self.dea_file, env)
+ wanted_release = None
+ rel_list = parse(exec_cmd('fuel release'))
+ for rel in rel_list:
+ if rel[R['id']] == self.env[E['release_id']]:
+ wanted_release = rel[R['name']]
+ self.write_yaml(self.dea_file, {'wanted_release': wanted_release})
+
+ def reap_fuel_settings(self):
+ data = self.read_yaml('/etc/fuel/astute.yaml')
+ fuel = {}
+ del data['ADMIN_NETWORK']['mac']
+ del data['ADMIN_NETWORK']['interface']
+ for key in ['ADMIN_NETWORK', 'HOSTNAME', 'DNS_DOMAIN', 'DNS_SEARCH',
+ 'DNS_UPSTREAM', 'NTP1', 'NTP2', 'NTP3', 'FUEL_ACCESS']:
+ fuel[key] = data[key]
+ for key in fuel['ADMIN_NETWORK'].keys():
+ if key not in ['ipaddress', 'netmask',
+ 'dhcp_pool_start', 'dhcp_pool_end']:
+ del fuel['ADMIN_NETWORK'][key]
+ self.write_yaml(self.dea_file, {'fuel': fuel})
+
+ def reap_network_settings(self):
+ network_file = ('%s/network_%s.yaml'
+ % (self.temp_dir, self.env_id))
+ data = self.read_yaml(network_file)
+ network = {}
+ network['networking_parameters'] = data['networking_parameters']
+ network['networks'] = data['networks']
+ for net in network['networks']:
+ del net['id']
+ del net['group_id']
+ self.write_yaml(self.dea_file, {'network': network})
+
+ def reap_settings(self):
+ settings_file = '%s/settings_%s.yaml' % (self.temp_dir, self.env_id)
+ settings = self.read_yaml(settings_file)
+ self.write_yaml(self.dea_file, {'settings': settings})
+
+ def get_interface(self, real_node_id):
+ exec_cmd('fuel node --node-id %s --network --download --dir %s'
+ % (real_node_id, self.temp_dir))
+ interface_file = ('%s/node_%s/interfaces.yaml'
+ % (self.temp_dir, real_node_id))
+ interfaces = self.read_yaml(interface_file)
+ interface_config = {}
+ pxe_mac = None
+ for interface in interfaces:
+ networks = []
+ for network in interface['assigned_networks']:
+ networks.append(network['name'])
+ if network['name'] == 'fuelweb_admin':
+ pxe_mac = interface['mac']
+ if networks:
+ interface_config[interface['name']] = networks
+ return interface_config, pxe_mac
+
+ def read_yaml(self, yaml_file):
+ with open(yaml_file) as f:
+ data = yaml.load(f)
+ return data
+
+ def intro(self):
+ delete(self.dea_file)
+ delete(self.dha_file)
+ self.temp_dir = exec_cmd('mktemp -d')
+ date = time.strftime('%c')
+ self.write(self.dea_file,
+ DEA_1.format(date=date, comment=self.comment), False)
+ self.write(self.dha_file,
+ DHA_1.format(date=date, comment=self.comment))
+ self.get_env()
+ self.download_config('deployment')
+ self.download_config('settings')
+ self.download_config('network')
+
+ def finale(self):
+ log('DEA file is available at %s' % self.dea_file)
+ log('DHA file is available at %s (this is just a template)'
+ % self.dha_file)
+ shutil.rmtree(self.temp_dir)
+
+ def reap(self):
+ self.intro()
+ self.reap_environment_info()
+ self.reap_nodes_interfaces_transformations()
+ self.reap_fuel_settings()
+ self.reap_network_settings()
+ self.reap_settings()
+ self.finale()
+
+
+def usage():
+ print '''
+ Usage:
+ python reap.py <dea_file> <dha_file> <comment>
+ '''
+
+
+def parse_arguments():
+ parser = ArgParser(prog='python %s' % __file__)
+ parser.add_argument('dea_file', nargs='?', action='store',
+ default='dea.yaml',
+ help='Deployment Environment Adapter: dea.yaml')
+ parser.add_argument('dha_file', nargs='?', action='store',
+ default='dha.yaml',
+ help='Deployment Hardware Adapter: dha.yaml')
+ parser.add_argument('comment', nargs='?', action='store', help='Comment')
+ args = parser.parse_args()
+ return (args.dea_file, args.dha_file, args.comment)
+
+
+def main():
+ dea_file, dha_file, comment = parse_arguments()
+
+ r = Reap(dea_file, dha_file, comment)
+ r.reap()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/fuel/deploy/setup_environment.py b/fuel/deploy/setup_environment.py
deleted file mode 100644
index 4e0e7ba37..000000000
--- a/fuel/deploy/setup_environment.py
+++ /dev/null
@@ -1,165 +0,0 @@
-import sys
-from lxml import etree
-import os
-import glob
-import common
-
-from dha import DeploymentHardwareAdapter
-
-exec_cmd = common.exec_cmd
-err = common.err
-log = common.log
-check_dir_exists = common.check_dir_exists
-check_file_exists = common.check_file_exists
-check_if_root = common.check_if_root
-
-
-class LibvirtEnvironment(object):
-
- def __init__(self, storage_dir, dha_file):
- self.dha = DeploymentHardwareAdapter(dha_file)
- self.storage_dir = storage_dir
- self.parser = etree.XMLParser(remove_blank_text=True)
- self.file_dir = os.path.dirname(os.path.realpath(__file__))
- self.network_dir = '%s/libvirt/networks' % self.file_dir
- self.vm_dir = '%s/libvirt/vms' % self.file_dir
- self.node_ids = self.dha.get_all_node_ids()
- self.fuel_node_id = self.dha.get_fuel_node_id()
- self.net_names = self.collect_net_names()
-
- def create_storage(self, node_id, disk_path, disk_sizes):
- if node_id == self.fuel_node_id:
- disk_size = disk_sizes['fuel']
- else:
- role = self.dha.get_node_role(node_id)
- disk_size = disk_sizes[role]
- exec_cmd('fallocate -l %s %s' % (disk_size, disk_path))
-
- def create_vms(self):
- temp_dir = exec_cmd('mktemp -d')
- disk_sizes = self.dha.get_disks()
- for node_id in self.node_ids:
- vm_name = self.dha.get_node_property(node_id, 'libvirtName')
- vm_template = self.dha.get_node_property(node_id,
- 'libvirtTemplate')
- disk_path = '%s/%s.raw' % (self.storage_dir, vm_name)
- self.create_storage(node_id, disk_path, disk_sizes)
- self.define_vm(vm_name, vm_template, temp_dir, disk_path)
- exec_cmd('rm -fr %s' % temp_dir)
-
- def define_vm(self, vm_name, vm_template, temp_dir, disk_path):
- log('Creating VM %s with disks %s' % (vm_name, disk_path))
- temp_vm_file = '%s/%s' % (temp_dir, vm_name)
- exec_cmd('cp %s/%s %s' % (self.vm_dir, vm_template, temp_vm_file))
- with open(temp_vm_file) as f:
- vm_xml = etree.parse(f)
- names = vm_xml.xpath('/domain/name')
- for name in names:
- name.text = vm_name
- uuids = vm_xml.xpath('/domain/uuid')
- for uuid in uuids:
- uuid.getparent().remove(uuid)
- disks = vm_xml.xpath('/domain/devices/disk')
- for disk in disks:
- sources = disk.xpath('source')
- for source in sources:
- source.set('file', disk_path)
- with open(temp_vm_file, 'w') as f:
- vm_xml.write(f, pretty_print=True, xml_declaration=True)
- exec_cmd('virsh define %s' % temp_vm_file)
-
- def create_networks(self):
- for net_file in glob.glob('%s/*' % self.network_dir):
- exec_cmd('virsh net-define %s' % net_file)
- for net in self.net_names:
- log('Creating network %s' % net)
- exec_cmd('virsh net-autostart %s' % net)
- exec_cmd('virsh net-start %s' % net)
-
- def delete_networks(self):
- for net in self.net_names:
- log('Deleting network %s' % net)
- exec_cmd('virsh net-destroy %s' % net, False)
- exec_cmd('virsh net-undefine %s' % net, False)
-
- def get_net_name(self, net_file):
- with open(net_file) as f:
- net_xml = etree.parse(f)
- name_list = net_xml.xpath('/network/name')
- for name in name_list:
- net_name = name.text
- return net_name
-
- def collect_net_names(self):
- net_list = []
- for net_file in glob.glob('%s/*' % self.network_dir):
- name = self.get_net_name(net_file)
- net_list.append(name)
- return net_list
-
- def delete_vms(self):
- for node_id in self.node_ids:
- vm_name = self.dha.get_node_property(node_id, 'libvirtName')
- r, c = exec_cmd('virsh dumpxml %s' % vm_name, False)
- if c > 0:
- log(r)
- continue
- self.undefine_vm_delete_disk(r, vm_name)
-
- def undefine_vm_delete_disk(self, printout, vm_name):
- disk_files = []
- xml_dump = etree.fromstring(printout, self.parser)
- disks = xml_dump.xpath('/domain/devices/disk')
- for disk in disks:
- sources = disk.xpath('source')
- for source in sources:
- source_file = source.get('file')
- if source_file:
- disk_files.append(source_file)
- log('Deleting VM %s with disks %s' % (vm_name, disk_files))
- exec_cmd('virsh destroy %s' % vm_name, False)
- exec_cmd('virsh undefine %s' % vm_name, False)
- for file in disk_files:
- exec_cmd('rm -f %s' % file)
-
- def setup_environment(self):
- check_if_root()
- check_dir_exists(self.network_dir)
- check_dir_exists(self.vm_dir)
- self.cleanup_environment()
- self.create_vms()
- self.create_networks()
-
- def cleanup_environment(self):
- self.delete_vms()
- self.delete_networks()
-
-
-def usage():
- print '''
- Usage:
- python setup_environment.py <storage_directory> <dha_file>
-
- Example:
- python setup_environment.py /mnt/images dha.yaml
- '''
-
-def parse_arguments():
- if len(sys.argv) != 3:
- log('Incorrect number of arguments')
- usage()
- sys.exit(1)
- storage_dir = sys.argv[-2]
- dha_file = sys.argv[-1]
- check_dir_exists(storage_dir)
- check_file_exists(dha_file)
- return storage_dir, dha_file
-
-def main():
- storage_dir, dha_file = parse_arguments()
-
- virt = LibvirtEnvironment(storage_dir, dha_file)
- virt.setup_environment()
-
-if __name__ == '__main__':
- main() \ No newline at end of file
diff --git a/fuel/deploy/setup_vfuel.py b/fuel/deploy/setup_vfuel.py
deleted file mode 100644
index 65ee01341..000000000
--- a/fuel/deploy/setup_vfuel.py
+++ /dev/null
@@ -1,143 +0,0 @@
-import sys
-from lxml import etree
-import os
-
-import common
-from dha import DeploymentHardwareAdapter
-
-exec_cmd = common.exec_cmd
-err = common.err
-log = common.log
-check_dir_exists = common.check_dir_exists
-check_file_exists = common.check_file_exists
-check_if_root = common.check_if_root
-
-VFUELNET = '''
-iface vfuelnet inet static
- bridge_ports em1
- address 10.40.0.1
- netmask 255.255.255.0
- pre-down iptables -t nat -D POSTROUTING --out-interface p1p1.20 -j MASQUERADE -m comment --comment "vfuelnet"
- pre-down iptables -D FORWARD --in-interface vfuelnet --out-interface p1p1.20 -m comment --comment "vfuelnet"
- post-up iptables -t nat -A POSTROUTING --out-interface p1p1.20 -j MASQUERADE -m comment --comment "vfuelnet"
- post-up iptables -A FORWARD --in-interface vfuelnet --out-interface p1p1.20 -m comment --comment "vfuelnet"
-'''
-VM_DIR = 'baremetal/vm'
-FUEL_DISK_SIZE = '30G'
-IFACE = 'vfuelnet'
-INTERFACE_CONFIG = '/etc/network/interfaces'
-
-class VFuel(object):
-
- def __init__(self, storage_dir, dha_file):
- self.dha = DeploymentHardwareAdapter(dha_file)
- self.storage_dir = storage_dir
- self.parser = etree.XMLParser(remove_blank_text=True)
- self.fuel_node_id = self.dha.get_fuel_node_id()
- self.file_dir = os.path.dirname(os.path.realpath(__file__))
- self.vm_dir = '%s/%s' % (self.file_dir, VM_DIR)
-
- def setup_environment(self):
- check_if_root()
- check_dir_exists(self.vm_dir)
- self.setup_networking()
- self.delete_vm()
- self.create_vm()
-
- def setup_networking(self):
- with open(INTERFACE_CONFIG) as f:
- data = f.read()
- if VFUELNET not in data:
- log('Appending to file %s:\n %s' % (INTERFACE_CONFIG, VFUELNET))
- with open(INTERFACE_CONFIG, 'a') as f:
- f.write('\n%s\n' % VFUELNET)
- if exec_cmd('ip link show | grep %s' % IFACE):
- log('Bring DOWN interface %s' % IFACE)
- exec_cmd('ifdown %s' % IFACE, False)
- log('Bring UP interface %s' % IFACE)
- exec_cmd('ifup %s' % IFACE, False)
-
- def delete_vm(self):
- vm_name = self.dha.get_node_property(self.fuel_node_id, 'libvirtName')
- r, c = exec_cmd('virsh dumpxml %s' % vm_name, False)
- if c > 0:
- log(r)
- return
- self.undefine_vm_delete_disk(r, vm_name)
-
- def undefine_vm_delete_disk(self, printout, vm_name):
- disk_files = []
- xml_dump = etree.fromstring(printout, self.parser)
- disks = xml_dump.xpath('/domain/devices/disk')
- for disk in disks:
- sources = disk.xpath('source')
- for source in sources:
- source_file = source.get('file')
- if source_file:
- disk_files.append(source_file)
- log('Deleting VM %s with disks %s' % (vm_name, disk_files))
- exec_cmd('virsh destroy %s' % vm_name, False)
- exec_cmd('virsh undefine %s' % vm_name, False)
- for file in disk_files:
- exec_cmd('rm -f %s' % file)
-
- def create_vm(self):
- temp_dir = exec_cmd('mktemp -d')
- vm_name = self.dha.get_node_property(self.fuel_node_id, 'libvirtName')
- vm_template = self.dha.get_node_property(self.fuel_node_id,
- 'libvirtTemplate')
- disk_path = '%s/%s.raw' % (self.storage_dir, vm_name)
- exec_cmd('fallocate -l %s %s' % (FUEL_DISK_SIZE, disk_path))
- self.define_vm(vm_name, vm_template, temp_dir, disk_path)
- exec_cmd('rm -fr %s' % temp_dir)
-
- def define_vm(self, vm_name, vm_template, temp_dir, disk_path):
- log('Creating VM %s with disks %s' % (vm_name, disk_path))
- temp_vm_file = '%s/%s' % (temp_dir, vm_name)
- exec_cmd('cp %s/%s %s' % (self.vm_dir, vm_template, temp_vm_file))
- with open(temp_vm_file) as f:
- vm_xml = etree.parse(f)
- names = vm_xml.xpath('/domain/name')
- for name in names:
- name.text = vm_name
- uuids = vm_xml.xpath('/domain/uuid')
- for uuid in uuids:
- uuid.getparent().remove(uuid)
- disks = vm_xml.xpath('/domain/devices/disk')
- for disk in disks:
- sources = disk.xpath('source')
- for source in sources:
- source.set('file', disk_path)
- with open(temp_vm_file, 'w') as f:
- vm_xml.write(f, pretty_print=True, xml_declaration=True)
- exec_cmd('virsh define %s' % temp_vm_file)
-
-
-def usage():
- print '''
- Usage:
- python setup_vfuel.py <storage_directory> <dha_file>
-
- Example:
- python setup_vfuel.py /mnt/images dha.yaml
- '''
-
-def parse_arguments():
- if len(sys.argv) != 3:
- log('Incorrect number of arguments')
- usage()
- sys.exit(1)
- storage_dir = sys.argv[-2]
- dha_file = sys.argv[-1]
- check_dir_exists(storage_dir)
- check_file_exists(dha_file)
- return storage_dir, dha_file
-
-def main():
- storage_dir, dha_file = parse_arguments()
-
- vfuel = VFuel(storage_dir, dha_file)
- vfuel.setup_environment()
-
-if __name__ == '__main__':
- main()
diff --git a/fuel/deploy/ssh_client.py b/fuel/deploy/ssh_client.py
index 9ea227aea..0f6b8c7ea 100644
--- a/fuel/deploy/ssh_client.py
+++ b/fuel/deploy/ssh_client.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import paramiko
import common
import scp
@@ -6,6 +16,7 @@ TIMEOUT = 600
log = common.log
err = common.err
+
class SSHClient(object):
def __init__(self, host, username, password):
@@ -18,7 +29,8 @@ class SSHClient(object):
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.client.connect(self.host, username=self.username,
- password=self.password, timeout=timeout)
+ password=self.password, look_for_keys=False,
+ timeout=timeout)
def close(self):
if self.client is not None:
@@ -32,7 +44,7 @@ class SSHClient(object):
def __exit__(self, type, value, traceback):
self.close()
- def exec_cmd(self, command, sudo=False, timeout=TIMEOUT, check=True):
+ def exec_cmd(self, command, check=True, sudo=False, timeout=TIMEOUT):
if sudo and self.username != 'root':
command = "sudo -S -p '' %s" % command
stdin, stdout, stderr = self.client.exec_command(command,
@@ -60,16 +72,15 @@ class SSHClient(object):
if chan.recv_ready():
data = chan.recv(1024)
while data:
- print data
+ log(data.strip())
data = chan.recv(1024)
if chan.recv_stderr_ready():
error_buff = chan.recv_stderr(1024)
while error_buff:
- print error_buff
+ log(error_buff.strip())
error_buff = chan.recv_stderr(1024)
- exit_status = chan.recv_exit_status()
- log('Exit status %s' % exit_status)
+ return chan.recv_exit_status()
def scp_get(self, remote, local='.', dir=False):
try:
diff --git a/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dea.yaml b/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dea.yaml
new file mode 100644
index 000000000..23b2809ae
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dea.yaml
@@ -0,0 +1,844 @@
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version:
+created:
+comment: Config for Ericsson Montreal Lab - HA deployment with Ceph and Opendaylight
+environment:
+ name: opnfv
+ mode: ha
+ net_segment_type: gre
+wanted_release: Juno on Ubuntu 14.04.1
+nodes:
+- id: 1
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 2
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 3
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 4
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 5
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 6
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+fuel:
+ ADMIN_NETWORK:
+ ipaddress: 10.20.0.2
+ netmask: 255.255.0.0
+ dhcp_pool_start: 10.20.0.3
+ dhcp_pool_end: 10.20.0.254
+ DNS_UPSTREAM: 10.118.32.193
+ DNS_DOMAIN: opnfvericsson.ca
+ DNS_SEARCH: opnfvericsson.ca
+ FUEL_ACCESS:
+ user: admin
+ password: admin
+ HOSTNAME: opnfv
+ NTP1: 10.118.34.219
+ NTP2:
+ NTP3:
+interfaces_1:
+ eth0:
+ - fuelweb_admin
+ eth2:
+ - public
+ - management
+ - storage
+ - private
+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: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth2.320
+ - action: add-port
+ bridge: br-storage
+ name: eth2.220
+ - action: add-port
+ bridge: br-mesh
+ name: eth2.20
+ - action: add-port
+ bridge: br-ex
+ name: eth0
+transformations_2:
+ 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-mesh
+ - action: add-port
+ bridge: br-fw-admin
+ name: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth2.320
+ - action: add-port
+ bridge: br-storage
+ name: eth2.220
+ - action: add-port
+ bridge: br-mesh
+ name: eth2.20
+network:
+ management_vip: 192.168.0.2
+ management_vrouter_vip: 192.168.0.3
+ networking_parameters:
+ base_mac: fa:16:3e:00:00:00
+ dns_nameservers:
+ - 10.118.32.193
+ floating_ranges:
+ - - 10.118.34.226
+ - 10.118.34.230
+ gre_id_range:
+ - 2
+ - 65535
+ internal_cidr: 192.168.111.0/24
+ internal_gateway: 192.168.111.1
+ net_l23_provider: ovs
+ segmentation_type: gre
+ vlan_range:
+ - 2022
+ - 2023
+ networks:
+ - cidr: 10.118.34.192/24
+ gateway: 10.118.34.193
+ ip_ranges:
+ - - 10.118.34.220
+ - 10.118.34.225
+ meta:
+ cidr: 172.16.0.0/24
+ configurable: true
+ floating_range_var: floating_ranges
+ ip_range:
+ - 172.16.0.2
+ - 172.16.0.126
+ map_priority: 1
+ name: public
+ notation: ip_ranges
+ render_addr_mask: public
+ render_type: null
+ use_gateway: true
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: null
+ name: public
+ vlan_start: null
+ - cidr: 192.168.2.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.2.2
+ - 192.168.2.254
+ meta:
+ assign_vip: 192.168.2.0/24
+ configurable: true
+ map_priority: 2
+ name: private
+ notation: cidr
+ render_addr_mask: private
+ render_type: cidr
+ seg_type: gre
+ use_gateway: false
+ vlan_start: 103
+ name: private
+ vlan_start: 20
+ - cidr: 192.168.0.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.0.1
+ - 192.168.0.254
+ meta:
+ cidr: 192.168.0.0/24
+ configurable: true
+ map_priority: 2
+ name: management
+ notation: cidr
+ render_addr_mask: internal
+ render_type: cidr
+ use_gateway: false
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: 101
+ name: management
+ vlan_start: 320
+ - cidr: 192.168.1.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.1.2
+ - 192.168.1.254
+ meta:
+ cidr: 192.168.1.0/24
+ configurable: true
+ map_priority: 2
+ name: storage
+ notation: cidr
+ render_addr_mask: storage
+ render_type: cidr
+ use_gateway: false
+ vlan_start: 102
+ name: storage
+ vlan_start: 220
+ - cidr: 10.20.0.0/16
+ gateway: 10.20.0.2
+ ip_ranges:
+ - - 10.20.0.3
+ - 10.20.0.254
+ meta:
+ configurable: false
+ map_priority: 0
+ notation: ip_ranges
+ render_addr_mask: null
+ render_type: null
+ unmovable: true
+ use_gateway: true
+ name: fuelweb_admin
+ vlan_start: null
+ public_vip: 10.118.34.220
+ public_vrouter_vip: 10.118.34.221
+settings:
+ editable:
+ access:
+ email:
+ description: Email address for Administrator
+ label: Email
+ regex:
+ error: Invalid email
+ source: ^\S+@\S+$
+ type: text
+ value: admin@localhost
+ weight: 40
+ metadata:
+ label: Access
+ weight: 10
+ password:
+ description: Password for Administrator
+ label: Password
+ regex:
+ error: Empty password
+ source: \S
+ type: password
+ value: admin
+ weight: 20
+ tenant:
+ description: Tenant (project) name for Administrator
+ label: Tenant
+ regex:
+ error: Invalid tenant name
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 30
+ user:
+ description: Username for Administrator
+ label: Username
+ regex:
+ error: Invalid username
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 10
+ additional_components:
+ ceilometer:
+ description: If selected, Ceilometer component will be installed
+ label: Install Ceilometer
+ type: checkbox
+ value: false
+ weight: 40
+ heat:
+ description: ''
+ label: ''
+ type: hidden
+ value: true
+ weight: 30
+ metadata:
+ label: Additional Components
+ weight: 20
+ mongo:
+ description: If selected, You can use external Mongo DB as ceilometer backend
+ label: Use external Mongo DB
+ restrictions:
+ - settings:additional_components.ceilometer.value == false
+ type: checkbox
+ value: false
+ weight: 40
+ murano:
+ description: If selected, Murano component will be installed
+ label: Install Murano
+ restrictions:
+ - cluster:net_provider != 'neutron'
+ type: checkbox
+ value: false
+ weight: 20
+ sahara:
+ description: If selected, Sahara component will be installed
+ label: Install Sahara
+ type: checkbox
+ value: false
+ weight: 10
+ common:
+ auth_key:
+ description: Public key(s) to include in authorized_keys on deployed nodes
+ label: Public Key
+ type: textarea
+ value: ''
+ weight: 70
+ auto_assign_floating_ip:
+ description: If selected, OpenStack will automatically assign a floating IP
+ to a new instance
+ label: Auto assign floating IP
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider == 'neutron'
+ type: checkbox
+ value: false
+ weight: 40
+ debug:
+ description: Debug logging mode provides more information, but requires more
+ disk space.
+ label: OpenStack debug logging
+ type: checkbox
+ value: false
+ weight: 20
+ libvirt_type:
+ label: Hypervisor type
+ type: radio
+ value: kvm
+ values:
+ - data: kvm
+ description: Choose this type of hypervisor if you run OpenStack on hardware
+ label: KVM
+ - data: qemu
+ description: Choose this type of hypervisor if you run OpenStack on virtual
+ hosts.
+ label: QEMU
+ weight: 30
+ metadata:
+ label: Common
+ weight: 30
+ nova_quota:
+ description: Quotas are used to limit CPU and memory usage for tenants. Enabling
+ quotas will increase load on the Nova database.
+ label: Nova quotas
+ type: checkbox
+ value: false
+ weight: 25
+ puppet_debug:
+ description: Debug puppet logging mode provides more information, but requires
+ more disk space.
+ label: Puppet debug logging
+ type: checkbox
+ value: true
+ weight: 20
+ resume_guests_state_on_host_boot:
+ description: Whether to resume previous guests state when the host reboots.
+ If enabled, this option causes guests assigned to the host to resume their
+ previous state. If the guest was running a restart will be attempted when
+ nova-compute starts. If the guest was not running previously, a restart will
+ not be attempted.
+ label: Resume guests state on host boot
+ type: checkbox
+ value: true
+ weight: 60
+ use_cow_images:
+ description: For most cases you will want qcow format. If it's disabled, raw
+ image format will be used to run VMs. OpenStack with raw format currently
+ does not support snapshotting.
+ label: Use qcow format for images
+ type: checkbox
+ value: true
+ weight: 50
+ use_vcenter:
+ type: hidden
+ value: false
+ weight: 30
+ corosync:
+ group:
+ description: ''
+ label: Group
+ type: text
+ value: 226.94.1.1
+ weight: 10
+ metadata:
+ label: Corosync
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 50
+ port:
+ description: ''
+ label: Port
+ type: text
+ value: '12000'
+ weight: 20
+ verified:
+ description: Set True only if multicast is configured correctly on router.
+ label: Need to pass network verification.
+ type: checkbox
+ value: false
+ weight: 10
+ external_dns:
+ dns_list:
+ description: List of upstream DNS servers, separated by comma
+ label: DNS list
+ regex:
+ error: Invalid IP address list
+ source: ^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$
+ type: text
+ value: 10.118.32.193
+ weight: 10
+ metadata:
+ label: Host OS DNS Servers
+ weight: 90
+ external_mongo:
+ hosts_ip:
+ description: IP Addresses of MongoDB. Use comma to split IPs
+ label: MongoDB hosts IP
+ regex:
+ error: Invalid hosts ip sequence
+ source: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),)*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
+ type: text
+ value: ''
+ weight: 30
+ metadata:
+ label: External MongoDB
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.mongo.value == false
+ weight: 20
+ mongo_db_name:
+ description: Mongo database name
+ label: Database name
+ regex:
+ error: Invalid database name
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ mongo_password:
+ description: Mongo database password
+ label: Password
+ regex:
+ error: Password contains spaces
+ source: ^\S*$
+ type: password
+ value: ceilometer
+ weight: 30
+ mongo_replset:
+ description: Name for Mongo replication set
+ label: Replset
+ type: text
+ value: ''
+ weight: 30
+ mongo_user:
+ description: Mongo database username
+ label: Username
+ regex:
+ error: Empty username
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ external_ntp:
+ metadata:
+ label: Host OS NTP Servers
+ weight: 100
+ ntp_list:
+ description: List of upstream NTP servers, separated by comma
+ label: NTP server list
+ regex:
+ error: Invalid NTP server list
+ source: ^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(?:\.\d{1,3}){3})\s*(?:,\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(\.\d{1,3}){3})\s*)*$
+ type: text
+ value: 10.118.34.219
+ weight: 10
+ kernel_params:
+ kernel:
+ description: Default kernel parameters
+ label: Initial parameters
+ type: text
+ value: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90
+ nomodeset
+ weight: 45
+ metadata:
+ label: Kernel parameters
+ weight: 40
+ murano_settings:
+ metadata:
+ label: Murano Settings
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.murano.value == false
+ weight: 20
+ murano_repo_url:
+ description: ''
+ label: Murano Repository URL
+ type: text
+ value: http://storage.apps.openstack.org/
+ weight: 10
+ neutron_mellanox:
+ metadata:
+ enabled: true
+ label: Mellanox Neutron components
+ restrictions:
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ toggleable: false
+ weight: 50
+ plugin:
+ label: Mellanox drivers and SR-IOV plugin
+ type: radio
+ value: disabled
+ values:
+ - data: disabled
+ description: If selected, Mellanox drivers, Neutron and Cinder plugin will
+ not be installed.
+ label: Mellanox drivers and plugins disabled
+ restrictions:
+ - settings:storage.iser.value == true
+ - data: drivers_only
+ description: If selected, Mellanox Ethernet drivers will be installed to support
+ networking over Mellanox NIC. Mellanox Neutron plugin will not be installed.
+ label: Install only Mellanox drivers
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm'
+ - data: ethernet
+ description: If selected, both Mellanox Ethernet drivers and Mellanox network
+ acceleration (Neutron) plugin will be installed.
+ label: Install Mellanox drivers and SR-IOV plugin
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm' or not (cluster:net_provider
+ == 'neutron' and networking_parameters:segmentation_type == 'vlan')
+ weight: 60
+ vf_num:
+ description: Note that one virtual function will be reserved to the storage
+ network, in case of choosing iSER.
+ label: Number of virtual NICs
+ restrictions:
+ - settings:neutron_mellanox.plugin.value != 'ethernet'
+ type: text
+ value: '16'
+ weight: 70
+ opendaylight:
+ metadata:
+ enabled: true
+ label: OpenDaylight plugin
+ plugin_id: 1
+ restrictions:
+ - cluster:net_provider != 'neutron': Only neutron is supported by OpenDaylight
+ toggleable: true
+ weight: 70
+ rest_api_port:
+ description: Port on which ODL REST API will be available.
+ label: Port number
+ regex:
+ error: Invalid port number
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '8282'
+ weight: 40
+ use_vxlan:
+ description: Configure neutron to use VXLAN tunneling
+ label: Use vxlan
+ restrictions:
+ - action: disable
+ condition: networking_parameters:segmentation_type == 'vlan'
+ message: Neutron with GRE segmentation required
+ type: checkbox
+ value: true
+ weight: 20
+ vni_range_end:
+ description: VXLAN VNI IDs range end
+ label: VNI range end
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10000'
+ weight: 31
+ vni_range_start:
+ description: VXLAN VNI IDs range start
+ label: VNI range start
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10'
+ weight: 30
+ provision:
+ metadata:
+ label: Provision
+ weight: 80
+ method:
+ description: Which provision method to use for this cluster.
+ label: Provision method
+ type: radio
+ value: image
+ values:
+ - data: image
+ description: Copying pre-built images on a disk.
+ label: Image
+ - data: cobbler
+ description: Install from scratch using anaconda or debian-installer.
+ label: (DEPRECATED) Classic (use anaconda or debian-installer)
+ public_network_assignment:
+ assign_to_all_nodes:
+ description: When disabled, public network will be assigned to controllers only
+ label: Assign public network to all nodes
+ type: checkbox
+ value: false
+ weight: 10
+ metadata:
+ label: Public network assignment
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider != 'neutron'
+ weight: 50
+ repo_setup:
+ metadata:
+ always_editable: true
+ label: Repositories
+ weight: 50
+ repos:
+ description: 'Please note: the first repository will be considered the operating
+ system mirror that will be used during node provisioning.
+
+ To create a local repository mirror on the Fuel master node, please follow
+ the instructions provided by running "fuel-createmirror --help" on the Fuel
+ master node.
+
+ Please make sure your Fuel master node has Internet access to the repository
+ before attempting to create a mirror.
+
+ For more details, please refer to the documentation (https://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#external-ubuntu-ops).
+
+ '
+ extra_priority: null
+ type: custom_repo_configuration
+ value:
+ - name: ubuntu
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-updates
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-security
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: mos
+ priority: 1050
+ section: main restricted
+ suite: mos6.1
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/x86_64
+ - name: mos-updates
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-updates
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-security
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-security
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-holdback
+ priority: 1100
+ section: main restricted
+ suite: mos6.1-holdback
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: Auxiliary
+ priority: 1150
+ section: main restricted
+ suite: auxiliary
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/auxiliary
+ storage:
+ ephemeral_ceph:
+ description: Configures Nova to store ephemeral volumes in RBD. This works best
+ if Ceph is enabled for volumes and images, too. Enables live migration of
+ all types of Ceph backed VMs (without this option, live migration will only
+ work with VMs launched from Cinder volumes).
+ label: Ceph RBD for ephemeral volumes (Nova)
+ type: checkbox
+ value: true
+ weight: 75
+ images_ceph:
+ description: Configures Glance to use the Ceph RBD backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: Ceph RBD for images (Glance)
+ restrictions:
+ - settings:storage.images_vcenter.value == true: Only one Glance backend could
+ be selected.
+ type: checkbox
+ value: true
+ weight: 30
+ images_vcenter:
+ description: Configures Glance to use the vCenter/ESXi backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: VMWare vCenter/ESXi datastore for images (Glance)
+ restrictions:
+ - action: hide
+ condition: settings:common.use_vcenter.value != true
+ - condition: settings:storage.images_ceph.value == true
+ message: Only one Glance backend could be selected.
+ type: checkbox
+ value: false
+ weight: 35
+ iser:
+ description: 'High performance block storage: Cinder volumes over iSER protocol
+ (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and
+ will use a dedicated virtual function for the storage network.'
+ label: iSER protocol for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
+ != 'kvm'
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ type: checkbox
+ value: false
+ weight: 11
+ metadata:
+ label: Storage
+ weight: 60
+ objects_ceph:
+ description: Configures RadosGW front end for Ceph RBD. This exposes S3 and
+ Swift API Interfaces. If enabled, this option will prevent Swift from installing.
+ label: Ceph RadosGW for objects (Swift API)
+ restrictions:
+ - settings:storage.images_ceph.value == false
+ type: checkbox
+ value: false
+ weight: 80
+ osd_pool_size:
+ description: Configures the default number of object replicas in Ceph. This
+ number must be equal to or lower than the number of deployed 'Storage - Ceph
+ OSD' nodes.
+ label: Ceph object replication factor
+ regex:
+ error: Invalid number
+ source: ^[1-9]\d*$
+ type: text
+ value: '2'
+ weight: 85
+ volumes_ceph:
+ description: Configures Cinder to store volumes in Ceph RBD images.
+ label: Ceph RBD for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value == true
+ type: checkbox
+ value: true
+ weight: 20
+ volumes_lvm:
+ description: It is recommended to have at least one Storage - Cinder LVM node.
+ label: Cinder LVM over iSCSI for volumes
+ restrictions:
+ - settings:storage.volumes_ceph.value == true
+ type: checkbox
+ value: false
+ weight: 10
+ syslog:
+ metadata:
+ label: Syslog
+ weight: 50
+ syslog_port:
+ description: Remote syslog port
+ label: Port
+ regex:
+ error: Invalid Syslog port
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '514'
+ weight: 20
+ syslog_server:
+ description: Remote syslog hostname
+ label: Hostname
+ type: text
+ value: ''
+ weight: 10
+ syslog_transport:
+ label: Syslog transport protocol
+ type: radio
+ value: tcp
+ values:
+ - data: udp
+ description: ''
+ label: UDP
+ - data: tcp
+ description: ''
+ label: TCP
+ weight: 30
+ workloads_collector:
+ enabled:
+ type: hidden
+ value: true
+ metadata:
+ label: Workloads Collector User
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 10
+ password:
+ type: password
+ value: pBkLbu1k
+ tenant:
+ type: text
+ value: services
+ user:
+ type: text
+ value: fuel_stats_user
diff --git a/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dha.yaml b/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dha.yaml
new file mode 100644
index 000000000..ca446f680
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/ericsson_montreal_lab/dha.yaml
@@ -0,0 +1,54 @@
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version:
+created:
+comment: Config for Ericsson Montreal Lab
+
+# Adapter to use for this definition
+adapter: hp
+
+# Node list.
+# Mandatory property is id, all other properties are adapter specific.
+
+nodes:
+- id: 1
+ pxeMac: 14:58:D0:54:7A:D8
+ ipmiIp: 10.118.32.198
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 2
+ pxeMac: 14:58:D0:55:E2:E0
+ ipmiIp: 10.118.32.202
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 3
+ pxeMac: 9C:B6:54:8A:25:C0
+ ipmiIp: 10.118.32.213
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 4
+ pxeMac: 14:58:D0:54:28:80
+ ipmiIp: 10.118.32.201
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 5
+ pxeMac: 14:58:D0:54:E7:88
+ ipmiIp: 10.118.32.203
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 6
+ pxeMac: 14:58:D0:54:7A:28
+ ipmiIp: 10.118.32.205
+ ipmiUser: <username>
+ ipmiPass: <password>
+# Adding the Fuel node as node id 7 which may not be correct - please
+# adjust as needed.
+- id: 7
+ libvirtName: fuel-opnfv
+ libvirtTemplate: templates/hardware_environment/vms/fuel.xml
+ isFuel: yes
+ username: root
+ password: r00tme
+
+disks:
+ fuel: 50G \ No newline at end of file
diff --git a/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dea.yaml b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dea.yaml
new file mode 100644
index 000000000..db29fe977
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dea.yaml
@@ -0,0 +1,841 @@
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version:
+created:
+comment: Config for LF POD1 - HA deployment with Ceph and Opendaylight
+environment:
+ name: opnfv
+ mode: ha
+ net_segment_type: gre
+wanted_release: Juno on Ubuntu 14.04.1
+nodes:
+- id: 1
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 2
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 3
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 4
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 5
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+fuel:
+ ADMIN_NETWORK:
+ ipaddress: 10.20.0.2
+ netmask: 255.255.0.0
+ dhcp_pool_start: 10.20.0.3
+ dhcp_pool_end: 10.20.0.254
+ DNS_UPSTREAM: 8.8.8.8
+ DNS_DOMAIN: domain.tld
+ DNS_SEARCH: domain.tld
+ FUEL_ACCESS:
+ user: admin
+ password: admin
+ HOSTNAME: opnfv
+ NTP1: 0.pool.ntp.org
+ NTP2: 1.pool.ntp.org
+ NTP3: 2.pool.ntp.org
+interfaces_1:
+ eth0:
+ - public
+ eth1:
+ - fuelweb_admin
+ - management
+ - storage
+ - private
+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: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth1.300
+ - action: add-port
+ bridge: br-storage
+ name: eth1.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth1.302
+ - action: add-port
+ bridge: br-ex
+ name: eth0
+transformations_2:
+ 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-mesh
+ - action: add-port
+ bridge: br-fw-admin
+ name: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth1.300
+ - action: add-port
+ bridge: br-storage
+ name: eth1.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth1.302
+network:
+ management_vip: 192.168.0.2
+ management_vrouter_vip: 192.168.0.3
+ networking_parameters:
+ base_mac: fa:16:3e:00:00:00
+ dns_nameservers:
+ - 8.8.4.4
+ - 8.8.8.8
+ floating_ranges:
+ - - 172.30.9.160
+ - 172.30.9.254
+ gre_id_range:
+ - 2
+ - 65535
+ internal_cidr: 192.168.111.0/24
+ internal_gateway: 192.168.111.1
+ net_l23_provider: ovs
+ segmentation_type: gre
+ vlan_range:
+ - 1000
+ - 1030
+ networks:
+ - cidr: 172.30.9.0/24
+ gateway: 172.30.9.1
+ ip_ranges:
+ - - 172.30.9.64
+ - 172.30.9.159
+ meta:
+ cidr: 172.16.0.0/24
+ configurable: true
+ floating_range_var: floating_ranges
+ ip_range:
+ - 172.16.0.2
+ - 172.16.0.126
+ map_priority: 1
+ name: public
+ notation: ip_ranges
+ render_addr_mask: public
+ render_type: null
+ use_gateway: true
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: null
+ name: public
+ vlan_start: null
+ - cidr: 192.168.2.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.2.2
+ - 192.168.2.254
+ meta:
+ assign_vip: 192.168.2.0/24
+ configurable: true
+ map_priority: 2
+ name: private
+ notation: cidr
+ render_addr_mask: private
+ render_type: cidr
+ seg_type: gre
+ use_gateway: false
+ vlan_start: 103
+ name: private
+ vlan_start: 302
+ - cidr: 192.168.0.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.0.2
+ - 192.168.0.254
+ meta:
+ cidr: 192.168.0.0/24
+ configurable: true
+ map_priority: 2
+ name: management
+ notation: cidr
+ render_addr_mask: internal
+ render_type: cidr
+ use_gateway: false
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: 101
+ name: management
+ vlan_start: 300
+ - cidr: 192.168.1.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.1.2
+ - 192.168.1.254
+ meta:
+ cidr: 192.168.1.0/24
+ configurable: true
+ map_priority: 2
+ name: storage
+ notation: cidr
+ render_addr_mask: storage
+ render_type: cidr
+ use_gateway: false
+ vlan_start: 102
+ name: storage
+ vlan_start: 301
+ - cidr: 10.20.0.0/16
+ gateway: 10.20.0.2
+ ip_ranges:
+ - - 10.20.0.3
+ - 10.20.0.254
+ meta:
+ configurable: false
+ map_priority: 0
+ notation: ip_ranges
+ render_addr_mask: null
+ render_type: null
+ unmovable: true
+ use_gateway: true
+ name: fuelweb_admin
+ vlan_start: null
+ public_vip: 172.30.9.64
+ public_vrouter_vip: 172.30.9.65
+settings:
+ editable:
+ access:
+ email:
+ description: Email address for Administrator
+ label: Email
+ regex:
+ error: Invalid email
+ source: ^\S+@\S+$
+ type: text
+ value: admin@localhost
+ weight: 40
+ metadata:
+ label: Access
+ weight: 10
+ password:
+ description: Password for Administrator
+ label: Password
+ regex:
+ error: Empty password
+ source: \S
+ type: password
+ value: admin
+ weight: 20
+ tenant:
+ description: Tenant (project) name for Administrator
+ label: Tenant
+ regex:
+ error: Invalid tenant name
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 30
+ user:
+ description: Username for Administrator
+ label: Username
+ regex:
+ error: Invalid username
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 10
+ additional_components:
+ ceilometer:
+ description: If selected, Ceilometer component will be installed
+ label: Install Ceilometer
+ type: checkbox
+ value: false
+ weight: 40
+ heat:
+ description: ''
+ label: ''
+ type: hidden
+ value: true
+ weight: 30
+ metadata:
+ label: Additional Components
+ weight: 20
+ mongo:
+ description: If selected, You can use external Mongo DB as ceilometer backend
+ label: Use external Mongo DB
+ restrictions:
+ - settings:additional_components.ceilometer.value == false
+ type: checkbox
+ value: false
+ weight: 40
+ murano:
+ description: If selected, Murano component will be installed
+ label: Install Murano
+ restrictions:
+ - cluster:net_provider != 'neutron'
+ type: checkbox
+ value: false
+ weight: 20
+ sahara:
+ description: If selected, Sahara component will be installed
+ label: Install Sahara
+ type: checkbox
+ value: false
+ weight: 10
+ common:
+ auth_key:
+ description: Public key(s) to include in authorized_keys on deployed nodes
+ label: Public Key
+ type: textarea
+ value: ''
+ weight: 70
+ auto_assign_floating_ip:
+ description: If selected, OpenStack will automatically assign a floating IP
+ to a new instance
+ label: Auto assign floating IP
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider == 'neutron'
+ type: checkbox
+ value: false
+ weight: 40
+ debug:
+ description: Debug logging mode provides more information, but requires more
+ disk space.
+ label: OpenStack debug logging
+ type: checkbox
+ value: false
+ weight: 20
+ libvirt_type:
+ label: Hypervisor type
+ type: radio
+ value: kvm
+ values:
+ - data: kvm
+ description: Choose this type of hypervisor if you run OpenStack on hardware
+ label: KVM
+ - data: qemu
+ description: Choose this type of hypervisor if you run OpenStack on virtual
+ hosts.
+ label: QEMU
+ weight: 30
+ metadata:
+ label: Common
+ weight: 30
+ nova_quota:
+ description: Quotas are used to limit CPU and memory usage for tenants. Enabling
+ quotas will increase load on the Nova database.
+ label: Nova quotas
+ type: checkbox
+ value: false
+ weight: 25
+ puppet_debug:
+ description: Debug puppet logging mode provides more information, but requires
+ more disk space.
+ label: Puppet debug logging
+ type: checkbox
+ value: true
+ weight: 20
+ resume_guests_state_on_host_boot:
+ description: Whether to resume previous guests state when the host reboots.
+ If enabled, this option causes guests assigned to the host to resume their
+ previous state. If the guest was running a restart will be attempted when
+ nova-compute starts. If the guest was not running previously, a restart will
+ not be attempted.
+ label: Resume guests state on host boot
+ type: checkbox
+ value: true
+ weight: 60
+ use_cow_images:
+ description: For most cases you will want qcow format. If it's disabled, raw
+ image format will be used to run VMs. OpenStack with raw format currently
+ does not support snapshotting.
+ label: Use qcow format for images
+ type: checkbox
+ value: true
+ weight: 50
+ use_vcenter:
+ type: hidden
+ value: false
+ weight: 30
+ corosync:
+ group:
+ description: ''
+ label: Group
+ type: text
+ value: 226.94.1.1
+ weight: 10
+ metadata:
+ label: Corosync
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 50
+ port:
+ description: ''
+ label: Port
+ type: text
+ value: '12000'
+ weight: 20
+ verified:
+ description: Set True only if multicast is configured correctly on router.
+ label: Need to pass network verification.
+ type: checkbox
+ value: false
+ weight: 10
+ external_dns:
+ dns_list:
+ description: List of upstream DNS servers, separated by comma
+ label: DNS list
+ regex:
+ error: Invalid IP address list
+ source: ^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$
+ type: text
+ value: 8.8.4.4, 8.8.8.8
+ weight: 10
+ metadata:
+ label: Host OS DNS Servers
+ weight: 90
+ external_mongo:
+ hosts_ip:
+ description: IP Addresses of MongoDB. Use comma to split IPs
+ label: MongoDB hosts IP
+ regex:
+ error: Invalid hosts ip sequence
+ source: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),)*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
+ type: text
+ value: ''
+ weight: 30
+ metadata:
+ label: External MongoDB
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.mongo.value == false
+ weight: 20
+ mongo_db_name:
+ description: Mongo database name
+ label: Database name
+ regex:
+ error: Invalid database name
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ mongo_password:
+ description: Mongo database password
+ label: Password
+ regex:
+ error: Password contains spaces
+ source: ^\S*$
+ type: password
+ value: ceilometer
+ weight: 30
+ mongo_replset:
+ description: Name for Mongo replication set
+ label: Replset
+ type: text
+ value: ''
+ weight: 30
+ mongo_user:
+ description: Mongo database username
+ label: Username
+ regex:
+ error: Empty username
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ external_ntp:
+ metadata:
+ label: Host OS NTP Servers
+ weight: 100
+ ntp_list:
+ description: List of upstream NTP servers, separated by comma
+ label: NTP server list
+ regex:
+ error: Invalid NTP server list
+ source: ^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(?:\.\d{1,3}){3})\s*(?:,\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(\.\d{1,3}){3})\s*)*$
+ type: text
+ value: 0.pool.ntp.org, 1.pool.ntp.org
+ weight: 10
+ kernel_params:
+ kernel:
+ description: Default kernel parameters
+ label: Initial parameters
+ type: text
+ value: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90
+ nomodeset
+ weight: 45
+ metadata:
+ label: Kernel parameters
+ weight: 40
+ murano_settings:
+ metadata:
+ label: Murano Settings
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.murano.value == false
+ weight: 20
+ murano_repo_url:
+ description: ''
+ label: Murano Repository URL
+ type: text
+ value: http://storage.apps.openstack.org/
+ weight: 10
+ neutron_mellanox:
+ metadata:
+ enabled: true
+ label: Mellanox Neutron components
+ restrictions:
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ toggleable: false
+ weight: 50
+ plugin:
+ label: Mellanox drivers and SR-IOV plugin
+ type: radio
+ value: disabled
+ values:
+ - data: disabled
+ description: If selected, Mellanox drivers, Neutron and Cinder plugin will
+ not be installed.
+ label: Mellanox drivers and plugins disabled
+ restrictions:
+ - settings:storage.iser.value == true
+ - data: drivers_only
+ description: If selected, Mellanox Ethernet drivers will be installed to support
+ networking over Mellanox NIC. Mellanox Neutron plugin will not be installed.
+ label: Install only Mellanox drivers
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm'
+ - data: ethernet
+ description: If selected, both Mellanox Ethernet drivers and Mellanox network
+ acceleration (Neutron) plugin will be installed.
+ label: Install Mellanox drivers and SR-IOV plugin
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm' or not (cluster:net_provider
+ == 'neutron' and networking_parameters:segmentation_type == 'vlan')
+ weight: 60
+ vf_num:
+ description: Note that one virtual function will be reserved to the storage
+ network, in case of choosing iSER.
+ label: Number of virtual NICs
+ restrictions:
+ - settings:neutron_mellanox.plugin.value != 'ethernet'
+ type: text
+ value: '16'
+ weight: 70
+ opendaylight:
+ metadata:
+ enabled: true
+ label: OpenDaylight plugin
+ plugin_id: 1
+ restrictions:
+ - cluster:net_provider != 'neutron': Only neutron is supported by OpenDaylight
+ toggleable: true
+ weight: 70
+ rest_api_port:
+ description: Port on which ODL REST API will be available.
+ label: Port number
+ regex:
+ error: Invalid port number
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '8282'
+ weight: 40
+ use_vxlan:
+ description: Configure neutron to use VXLAN tunneling
+ label: Use vxlan
+ restrictions:
+ - action: disable
+ condition: networking_parameters:segmentation_type == 'vlan'
+ message: Neutron with GRE segmentation required
+ type: checkbox
+ value: true
+ weight: 20
+ vni_range_end:
+ description: VXLAN VNI IDs range end
+ label: VNI range end
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10000'
+ weight: 31
+ vni_range_start:
+ description: VXLAN VNI IDs range start
+ label: VNI range start
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10'
+ weight: 30
+ provision:
+ metadata:
+ label: Provision
+ weight: 80
+ method:
+ description: Which provision method to use for this cluster.
+ label: Provision method
+ type: radio
+ value: image
+ values:
+ - data: image
+ description: Copying pre-built images on a disk.
+ label: Image
+ - data: cobbler
+ description: Install from scratch using anaconda or debian-installer.
+ label: (DEPRECATED) Classic (use anaconda or debian-installer)
+ public_network_assignment:
+ assign_to_all_nodes:
+ description: When disabled, public network will be assigned to controllers only
+ label: Assign public network to all nodes
+ type: checkbox
+ value: false
+ weight: 10
+ metadata:
+ label: Public network assignment
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider != 'neutron'
+ weight: 50
+ repo_setup:
+ metadata:
+ always_editable: true
+ label: Repositories
+ weight: 50
+ repos:
+ description: 'Please note: the first repository will be considered the operating
+ system mirror that will be used during node provisioning.
+
+ To create a local repository mirror on the Fuel master node, please follow
+ the instructions provided by running "fuel-createmirror --help" on the Fuel
+ master node.
+
+ Please make sure your Fuel master node has Internet access to the repository
+ before attempting to create a mirror.
+
+ For more details, please refer to the documentation (https://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#external-ubuntu-ops).
+
+ '
+ extra_priority: null
+ type: custom_repo_configuration
+ value:
+ - name: ubuntu
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-updates
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-security
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: mos
+ priority: 1050
+ section: main restricted
+ suite: mos6.1
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/x86_64
+ - name: mos-updates
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-updates
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-security
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-security
+ type: deb
+ uri: hhttp://10.20.0.2:8080/mos-ubuntu
+ - name: mos-holdback
+ priority: 1100
+ section: main restricted
+ suite: mos6.1-holdback
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: Auxiliary
+ priority: 1150
+ section: main restricted
+ suite: auxiliary
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/auxiliary
+ storage:
+ ephemeral_ceph:
+ description: Configures Nova to store ephemeral volumes in RBD. This works best
+ if Ceph is enabled for volumes and images, too. Enables live migration of
+ all types of Ceph backed VMs (without this option, live migration will only
+ work with VMs launched from Cinder volumes).
+ label: Ceph RBD for ephemeral volumes (Nova)
+ type: checkbox
+ value: true
+ weight: 75
+ images_ceph:
+ description: Configures Glance to use the Ceph RBD backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: Ceph RBD for images (Glance)
+ restrictions:
+ - settings:storage.images_vcenter.value == true: Only one Glance backend could
+ be selected.
+ type: checkbox
+ value: true
+ weight: 30
+ images_vcenter:
+ description: Configures Glance to use the vCenter/ESXi backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: VMWare vCenter/ESXi datastore for images (Glance)
+ restrictions:
+ - action: hide
+ condition: settings:common.use_vcenter.value != true
+ - condition: settings:storage.images_ceph.value == true
+ message: Only one Glance backend could be selected.
+ type: checkbox
+ value: false
+ weight: 35
+ iser:
+ description: 'High performance block storage: Cinder volumes over iSER protocol
+ (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and
+ will use a dedicated virtual function for the storage network.'
+ label: iSER protocol for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
+ != 'kvm'
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ type: checkbox
+ value: false
+ weight: 11
+ metadata:
+ label: Storage
+ weight: 60
+ objects_ceph:
+ description: Configures RadosGW front end for Ceph RBD. This exposes S3 and
+ Swift API Interfaces. If enabled, this option will prevent Swift from installing.
+ label: Ceph RadosGW for objects (Swift API)
+ restrictions:
+ - settings:storage.images_ceph.value == false
+ type: checkbox
+ value: false
+ weight: 80
+ osd_pool_size:
+ description: Configures the default number of object replicas in Ceph. This
+ number must be equal to or lower than the number of deployed 'Storage - Ceph
+ OSD' nodes.
+ label: Ceph object replication factor
+ regex:
+ error: Invalid number
+ source: ^[1-9]\d*$
+ type: text
+ value: '2'
+ weight: 85
+ volumes_ceph:
+ description: Configures Cinder to store volumes in Ceph RBD images.
+ label: Ceph RBD for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value == true
+ type: checkbox
+ value: true
+ weight: 20
+ volumes_lvm:
+ description: It is recommended to have at least one Storage - Cinder LVM node.
+ label: Cinder LVM over iSCSI for volumes
+ restrictions:
+ - settings:storage.volumes_ceph.value == true
+ type: checkbox
+ value: false
+ weight: 10
+ syslog:
+ metadata:
+ label: Syslog
+ weight: 50
+ syslog_port:
+ description: Remote syslog port
+ label: Port
+ regex:
+ error: Invalid Syslog port
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '514'
+ weight: 20
+ syslog_server:
+ description: Remote syslog hostname
+ label: Hostname
+ type: text
+ value: ''
+ weight: 10
+ syslog_transport:
+ label: Syslog transport protocol
+ type: radio
+ value: tcp
+ values:
+ - data: udp
+ description: ''
+ label: UDP
+ - data: tcp
+ description: ''
+ label: TCP
+ weight: 30
+ workloads_collector:
+ enabled:
+ type: hidden
+ value: true
+ metadata:
+ label: Workloads Collector User
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 10
+ password:
+ type: password
+ value: pBkLbu1k
+ tenant:
+ type: text
+ value: services
+ user:
+ type: text
+ value: fuel_stats_user
diff --git a/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dha.yaml b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dha.yaml
new file mode 100644
index 000000000..724d6d833
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod1/dha.yaml
@@ -0,0 +1,49 @@
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version:
+created:
+comment: Config for LF POD1
+
+# Adapter to use for this definition
+adapter: ipmi
+
+# Node list.
+# Mandatory property is id, all other properties are adapter specific.
+
+nodes:
+- id: 1
+ pxeMac: 00:25:b5:b0:00:ef
+ ipmiIp: 172.30.8.69
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 2
+ pxeMac: 00:25:b5:b0:00:cf
+ ipmiIp: 172.30.8.78
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 3
+ pxeMac: 00:25:b5:b0:00:8f
+ ipmiIp: 172.30.8.68
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 4
+ pxeMac: 00:25:b5:b0:00:6f
+ ipmiIp: 172.30.8.77
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 5
+ pxeMac: 00:25:b5:b0:00:4f
+ ipmiIp: 172.30.8.67
+ ipmiUser: admin
+ ipmiPass: octopus
+# Adding the Fuel node as node id 6 which may not be correct - please
+# adjust as needed.
+- id: 6
+ libvirtName: fuel-opnfv
+ libvirtTemplate: templates/hardware_environment/vms/fuel.xml
+ isFuel: yes
+ username: root
+ password: r00tme
+
+disks:
+ fuel: 50G \ No newline at end of file
diff --git a/fuel/deploy/libvirt/dea.yaml b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dea.yaml
index 802293f62..81cbcbf5f 100644
--- a/fuel/deploy/libvirt/dea.yaml
+++ b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dea.yaml
@@ -1,40 +1,38 @@
title: Deployment Environment Adapter (DEA)
# DEA API version supported
-version: 1.1
-created: Sat Apr 25 16:26:22 UTC 2015
-comment: Small libvirt setup
-environment_name: opnfv59-b
-environment_mode: multinode
-wanted_release: Juno on Ubuntu 12.04.4
+version:
+created:
+comment: Config for LF POD2 - HA deployment with Ceph and Opendaylight
+environment:
+ name: opnfv
+ mode: ha
+ net_segment_type: gre
+wanted_release: Juno on Ubuntu 14.04.1
nodes:
- id: 1
- interfaces: interface1
- transformations: controller1
- role: controller
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
- id: 2
- interfaces: interface1
- transformations: controller1
- role: controller
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
- id: 3
- interfaces: interface1
- transformations: controller1
- role: controller
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
- id: 4
- interfaces: interface1
- transformations: compute1
- role: compute
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
- id: 5
- interfaces: interface1
- transformations: compute1
- role: compute
-- id: 6
- interfaces: interface1
- transformations: compute1
- role: compute
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
fuel:
ADMIN_NETWORK:
ipaddress: 10.20.0.2
- netmask: 255.255.255.0
+ netmask: 255.255.0.0
dhcp_pool_start: 10.20.0.3
dhcp_pool_end: 10.20.0.254
DNS_UPSTREAM: 8.8.8.8
@@ -43,178 +41,104 @@ fuel:
FUEL_ACCESS:
user: admin
password: admin
- HOSTNAME: opnfv59
+ HOSTNAME: opnfv
NTP1: 0.pool.ntp.org
NTP2: 1.pool.ntp.org
NTP3: 2.pool.ntp.org
-interfaces:
- interface1:
- eth0:
- - fuelweb_admin
- - management
- eth1:
- - storage
- eth2:
- - private
- eth3:
- - public
-transformations:
- controller1:
- - action: add-br
- name: br-eth0
- - action: add-port
- bridge: br-eth0
- name: eth0
- - action: add-br
- name: br-eth1
- - action: add-port
- bridge: br-eth1
- name: eth1
- - action: add-br
- name: br-eth2
- - action: add-port
- bridge: br-eth2
- name: eth2
- - action: add-br
- name: br-eth3
- - action: add-port
- bridge: br-eth3
- name: eth3
- - action: add-br
- name: br-ex
- - action: add-br
- name: br-mgmt
- - action: add-br
- name: br-storage
- - action: add-br
- name: br-fw-admin
- - action: add-patch
- bridges:
- - br-eth1
- - br-storage
- tags:
- - 102
- - 0
- vlan_ids:
- - 102
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-mgmt
- tags:
- - 101
- - 0
- vlan_ids:
- - 101
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-fw-admin
- trunks:
- - 0
- - action: add-patch
- bridges:
- - br-eth3
- - br-ex
- trunks:
- - 0
- - action: add-br
- name: br-prv
- - action: add-patch
- bridges:
- - br-eth2
- - br-prv
- compute1:
- - action: add-br
- name: br-eth0
- - action: add-port
- bridge: br-eth0
- name: eth0
- - action: add-br
- name: br-eth1
- - action: add-port
- bridge: br-eth1
- name: eth1
- - action: add-br
- name: br-eth2
- - action: add-port
- bridge: br-eth2
- name: eth2
- - action: add-br
- name: br-eth3
- - action: add-port
- bridge: br-eth3
- name: eth3
- - action: add-br
- name: br-mgmt
- - action: add-br
- name: br-storage
- - action: add-br
- name: br-fw-admin
- - action: add-patch
- bridges:
- - br-eth1
- - br-storage
- tags:
- - 102
- - 0
- vlan_ids:
- - 102
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-mgmt
- tags:
- - 101
- - 0
- vlan_ids:
- - 101
- - 0
- - action: add-patch
- bridges:
- - br-eth0
- - br-fw-admin
- trunks:
- - 0
- - action: add-br
- name: br-prv
- - action: add-patch
- bridges:
- - br-eth2
- - br-prv
-opnfv:
- compute: {}
- controller: {}
+interfaces_1:
+ eth0:
+ - fuelweb_admin
+ - management
+ - storage
+ - private
+ eth2:
+ - 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: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth0.300
+ - action: add-port
+ bridge: br-storage
+ name: eth0.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth0.302
+ - action: add-port
+ bridge: br-ex
+ name: eth2
+transformations_2:
+ 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-mesh
+ - action: add-port
+ bridge: br-fw-admin
+ name: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth0.300
+ - action: add-port
+ bridge: br-storage
+ name: eth0.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth0.302
network:
+ management_vip: 192.168.1.2
+ management_vrouter_vip: 192.168.1.3
networking_parameters:
base_mac: fa:16:3e:00:00:00
dns_nameservers:
- 8.8.4.4
- 8.8.8.8
floating_ranges:
- - - 172.16.0.130
- - 172.16.0.254
+ - - 172.30.10.160
+ - 172.30.10.254
gre_id_range:
- 2
- 65535
internal_cidr: 192.168.111.0/24
internal_gateway: 192.168.111.1
net_l23_provider: ovs
- segmentation_type: vlan
+ segmentation_type: gre
vlan_range:
- 1000
- 1030
networks:
- - cidr: 172.16.0.0/24
- gateway: 172.16.0.1
+ - cidr: 172.30.10.0/24
+ gateway: 172.30.10.1
ip_ranges:
- - - 172.16.0.2
- - 172.16.0.126
+ - - 172.30.10.64
+ - 172.30.10.159
meta:
- assign_vip: true
cidr: 172.16.0.0/24
configurable: true
floating_range_var: floating_ranges
@@ -227,16 +151,36 @@ network:
render_addr_mask: public
render_type: null
use_gateway: true
+ vips:
+ - haproxy
+ - vrouter
vlan_start: null
name: public
vlan_start: null
- - cidr: 192.168.0.0/24
+ - cidr: 192.168.2.0/24
gateway: null
ip_ranges:
- - - 192.168.0.1
- - 192.168.0.254
+ - - 192.168.2.2
+ - 192.168.2.254
+ meta:
+ cidr: 192.168.2.0/24
+ configurable: true
+ map_priority: 2
+ name: private
+ notation: cidr
+ render_addr_mask: private
+ render_type: cidr
+ seg_type: gre
+ use_gateway: false
+ vlan_start: 103
+ name: private
+ vlan_start: 302
+ - cidr: 192.168.1.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.1.2
+ - 192.168.1.254
meta:
- assign_vip: true
cidr: 192.168.0.0/24
configurable: true
map_priority: 2
@@ -245,16 +189,18 @@ network:
render_addr_mask: internal
render_type: cidr
use_gateway: false
+ vips:
+ - haproxy
+ - vrouter
vlan_start: 101
name: management
- vlan_start: 101
- - cidr: 192.168.1.0/24
+ vlan_start: 300
+ - cidr: 192.168.0.0/24
gateway: null
ip_ranges:
- - - 192.168.1.1
- - 192.168.1.254
+ - - 192.168.0.2
+ - 192.168.0.254
meta:
- assign_vip: false
cidr: 192.168.1.0/24
configurable: true
map_priority: 2
@@ -265,31 +211,13 @@ network:
use_gateway: false
vlan_start: 102
name: storage
- vlan_start: 102
- - cidr: null
- gateway: null
- ip_ranges: []
- meta:
- assign_vip: false
- configurable: false
- map_priority: 2
- name: private
- neutron_vlan_range: true
- notation: null
- render_addr_mask: null
- render_type: null
- seg_type: vlan
- use_gateway: false
- vlan_start: null
- name: private
- vlan_start: null
- - cidr: 10.20.0.0/24
- gateway: null
+ vlan_start: 301
+ - cidr: 10.20.0.0/16
+ gateway: 10.20.0.2
ip_ranges:
- - 10.20.0.3
- 10.20.0.254
meta:
- assign_vip: false
configurable: false
map_priority: 0
notation: ip_ranges
@@ -299,12 +227,17 @@ network:
use_gateway: true
name: fuelweb_admin
vlan_start: null
+ public_vip: 172.30.10.64
+ public_vrouter_vip: 172.30.10.65
settings:
editable:
access:
email:
description: Email address for Administrator
- label: email
+ label: Email
+ regex:
+ error: Invalid email
+ source: ^\S+@\S+$
type: text
value: admin@localhost
weight: 40
@@ -313,25 +246,30 @@ settings:
weight: 10
password:
description: Password for Administrator
- label: password
+ label: Password
+ regex:
+ error: Empty password
+ source: \S
type: password
value: admin
weight: 20
tenant:
description: Tenant (project) name for Administrator
- label: tenant
+ label: Tenant
regex:
error: Invalid tenant name
- source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$).*
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
type: text
value: admin
weight: 30
user:
description: Username for Administrator
- label: username
+ label: Username
regex:
error: Invalid username
- source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$).*
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
type: text
value: admin
weight: 10
@@ -351,6 +289,14 @@ settings:
metadata:
label: Additional Components
weight: 20
+ mongo:
+ description: If selected, You can use external Mongo DB as ceilometer backend
+ label: Use external Mongo DB
+ restrictions:
+ - settings:additional_components.ceilometer.value == false
+ type: checkbox
+ value: false
+ weight: 40
murano:
description: If selected, Murano component will be installed
label: Install Murano
@@ -369,7 +315,7 @@ settings:
auth_key:
description: Public key(s) to include in authorized_keys on deployed nodes
label: Public Key
- type: text
+ type: textarea
value: ''
weight: 70
auto_assign_floating_ip:
@@ -377,24 +323,11 @@ settings:
to a new instance
label: Auto assign floating IP
restrictions:
- - cluster:net_provider == 'neutron'
+ - action: hide
+ condition: cluster:net_provider == 'neutron'
type: checkbox
value: false
weight: 40
- compute_scheduler_driver:
- label: Scheduler driver
- type: radio
- value: nova.scheduler.filter_scheduler.FilterScheduler
- values:
- - data: nova.scheduler.filter_scheduler.FilterScheduler
- description: Currently the most advanced OpenStack scheduler. See the OpenStack
- documentation for details.
- label: Filter scheduler
- - data: nova.scheduler.simple.SimpleScheduler
- description: This is 'naive' scheduler which tries to find the least loaded
- host
- label: Simple scheduler
- weight: 40
debug:
description: Debug logging mode provides more information, but requires more
disk space.
@@ -402,17 +335,6 @@ settings:
type: checkbox
value: false
weight: 20
- disable_offload:
- description: If set, generic segmentation offload (gso) and generic receive
- offload (gro) on physical nics will be disabled. See ethtool man.
- label: Disable generic offload on physical nics
- restrictions:
- - action: hide
- condition: cluster:net_provider == 'neutron' and networking_parameters:segmentation_type
- == 'gre'
- type: checkbox
- value: true
- weight: 80
libvirt_type:
label: Hypervisor type
type: radio
@@ -421,21 +343,10 @@ settings:
- data: kvm
description: Choose this type of hypervisor if you run OpenStack on hardware
label: KVM
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- data: qemu
description: Choose this type of hypervisor if you run OpenStack on virtual
hosts.
label: QEMU
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
- - data: vcenter
- description: Choose this type of hypervisor if you run OpenStack in a vCenter
- environment.
- label: vCenter
- restrictions:
- - settings:common.libvirt_type.value != 'vcenter' or cluster:net_provider
- == 'neutron'
weight: 30
metadata:
label: Common
@@ -447,12 +358,19 @@ settings:
type: checkbox
value: false
weight: 25
+ puppet_debug:
+ description: Debug puppet logging mode provides more information, but requires
+ more disk space.
+ label: Puppet debug logging
+ type: checkbox
+ value: true
+ weight: 20
resume_guests_state_on_host_boot:
description: Whether to resume previous guests state when the host reboots.
If enabled, this option causes guests assigned to the host to resume their
previous state. If the guest was running a restart will be attempted when
- nova-compute starts. If the guest was not running previously, a restart
- will not be attempted.
+ nova-compute starts. If the guest was not running previously, a restart will
+ not be attempted.
label: Resume guests state on host boot
type: checkbox
value: true
@@ -465,6 +383,10 @@ settings:
type: checkbox
value: true
weight: 50
+ use_vcenter:
+ type: hidden
+ value: false
+ weight: 30
corosync:
group:
description: ''
@@ -494,19 +416,74 @@ settings:
dns_list:
description: List of upstream DNS servers, separated by comma
label: DNS list
+ regex:
+ error: Invalid IP address list
+ source: ^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$
type: text
- value: 8.8.8.8, 8.8.4.4
+ value: 8.8.4.4, 8.8.8.8
weight: 10
metadata:
- label: Upstream DNS
+ label: Host OS DNS Servers
weight: 90
+ external_mongo:
+ hosts_ip:
+ description: IP Addresses of MongoDB. Use comma to split IPs
+ label: MongoDB hosts IP
+ regex:
+ error: Invalid hosts ip sequence
+ source: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),)*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
+ type: text
+ value: ''
+ weight: 30
+ metadata:
+ label: External MongoDB
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.mongo.value == false
+ weight: 20
+ mongo_db_name:
+ description: Mongo database name
+ label: Database name
+ regex:
+ error: Invalid database name
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ mongo_password:
+ description: Mongo database password
+ label: Password
+ regex:
+ error: Password contains spaces
+ source: ^\S*$
+ type: password
+ value: ceilometer
+ weight: 30
+ mongo_replset:
+ description: Name for Mongo replication set
+ label: Replset
+ type: text
+ value: ''
+ weight: 30
+ mongo_user:
+ description: Mongo database username
+ label: Username
+ regex:
+ error: Empty username
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
external_ntp:
metadata:
- label: Upstream NTP
+ label: Host OS NTP Servers
weight: 100
ntp_list:
description: List of upstream NTP servers, separated by comma
- label: NTP servers list
+ label: NTP server list
+ regex:
+ error: Invalid NTP server list
+ source: ^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(?:\.\d{1,3}){3})\s*(?:,\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(\.\d{1,3}){3})\s*)*$
type: text
value: 0.pool.ntp.org, 1.pool.ntp.org
weight: 10
@@ -515,15 +492,32 @@ settings:
description: Default kernel parameters
label: Initial parameters
type: text
- value: console=ttyS0,9600 console=tty0 rootdelay=90 nomodeset
+ value: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90
+ nomodeset
weight: 45
metadata:
label: Kernel parameters
weight: 40
+ murano_settings:
+ metadata:
+ label: Murano Settings
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.murano.value == false
+ weight: 20
+ murano_repo_url:
+ description: ''
+ label: Murano Repository URL
+ type: text
+ value: http://storage.apps.openstack.org/
+ weight: 10
neutron_mellanox:
metadata:
enabled: true
label: Mellanox Neutron components
+ restrictions:
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
toggleable: false
weight: 50
plugin:
@@ -538,9 +532,8 @@ settings:
restrictions:
- settings:storage.iser.value == true
- data: drivers_only
- description: If selected, Mellanox Ethernet drivers will be installed to
- support networking over Mellanox NIC. Mellanox Neutron plugin will not
- be installed.
+ description: If selected, Mellanox Ethernet drivers will be installed to support
+ networking over Mellanox NIC. Mellanox Neutron plugin will not be installed.
label: Install only Mellanox drivers
restrictions:
- settings:common.libvirt_type.value != 'kvm'
@@ -561,117 +554,77 @@ settings:
type: text
value: '16'
weight: 70
- nsx_plugin:
- connector_type:
- description: Default network transport type to use
- label: NSX connector type
- type: select
- value: stt
- values:
- - data: gre
- label: GRE
- - data: ipsec_gre
- label: GRE over IPSec
- - data: stt
- label: STT
- - data: ipsec_stt
- label: STT over IPSec
- - data: bridge
- label: Bridge
- weight: 80
- l3_gw_service_uuid:
- description: UUID for the default L3 gateway service to use with this cluster
- label: L3 service UUID
- regex:
- error: Invalid L3 gateway service UUID
- source: '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'
- type: text
- value: ''
- weight: 50
+ opendaylight:
metadata:
- enabled: false
- label: VMware NSX
+ enabled: true
+ label: OpenDaylight plugin
+ plugin_id: 1
restrictions:
- - action: hide
- condition: cluster:net_provider != 'neutron' or networking_parameters:net_l23_provider
- != 'nsx'
- weight: 20
- nsx_controllers:
- description: One or more IPv4[:port] addresses of NSX controller node, separated
- by comma (e.g. 10.30.30.2,192.168.110.254:443)
- label: NSX controller endpoint
- regex:
- error: Invalid controller endpoints, specify valid IPv4[:port] pair
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?(,(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?)*$
- type: text
- value: ''
- weight: 60
- nsx_password:
- description: Password for Administrator
- label: NSX password
- regex:
- error: Empty password
- source: \S
- type: password
- value: ''
- weight: 30
- nsx_username:
- description: NSX administrator's username
- label: NSX username
+ - cluster:net_provider != 'neutron': Only neutron is supported by OpenDaylight
+ toggleable: true
+ weight: 70
+ rest_api_port:
+ description: Port on which ODL REST API will be available.
+ label: Port number
regex:
- error: Empty username
- source: \S
+ error: Invalid port number
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
type: text
- value: admin
+ value: '8282'
+ weight: 40
+ use_vxlan:
+ description: Configure neutron to use VXLAN tunneling
+ label: Use vxlan
+ restrictions:
+ - action: disable
+ condition: networking_parameters:segmentation_type == 'vlan'
+ message: Neutron with GRE segmentation required
+ type: checkbox
+ value: true
weight: 20
- packages_url:
- description: URL to NSX specific packages
- label: URL to NSX bits
+ vni_range_end:
+ description: VXLAN VNI IDs range end
+ label: VNI range end
regex:
- error: Invalid URL, specify valid HTTP/HTTPS URL with IPv4 address (e.g.
- http://10.20.0.2/nsx)
- source: ^https?://(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])(:(6553[0-5]|655[0-2][\d]|65[0-4][\d]{2}|6[0-4][\d]{3}|5[\d]{4}|[\d][\d]{0,3}))?(/.*)?$
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
type: text
- value: ''
- weight: 70
- replication_mode:
- description: ''
- label: NSX cluster has Service nodes
- type: checkbox
- value: true
- weight: 90
- transport_zone_uuid:
- description: UUID of the pre-existing default NSX Transport zone
- label: Transport zone UUID
+ value: '10000'
+ weight: 31
+ vni_range_start:
+ description: VXLAN VNI IDs range start
+ label: VNI range start
regex:
- error: Invalid transport zone UUID
- source: '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
type: text
- value: ''
- weight: 40
+ value: '10'
+ weight: 30
provision:
metadata:
label: Provision
- restrictions:
- - action: hide
- condition: not ('experimental' in version:feature_groups)
weight: 80
method:
description: Which provision method to use for this cluster.
label: Provision method
type: radio
- value: cobbler
+ value: image
values:
- data: image
description: Copying pre-built images on a disk.
label: Image
- data: cobbler
description: Install from scratch using anaconda or debian-installer.
- label: Classic (use anaconda or debian-installer)
+ label: (DEPRECATED) Classic (use anaconda or debian-installer)
public_network_assignment:
assign_to_all_nodes:
- description: When disabled, public network will be assigned to controllers
- and zabbix-server only
+ description: When disabled, public network will be assigned to controllers only
label: Assign public network to all nodes
type: checkbox
value: false
@@ -682,42 +635,118 @@ settings:
- action: hide
condition: cluster:net_provider != 'neutron'
weight: 50
+ repo_setup:
+ metadata:
+ always_editable: true
+ label: Repositories
+ weight: 50
+ repos:
+ description: 'Please note: the first repository will be considered the operating
+ system mirror that will be used during node provisioning.
+
+ To create a local repository mirror on the Fuel master node, please follow
+ the instructions provided by running "fuel-createmirror --help" on the Fuel
+ master node.
+
+ Please make sure your Fuel master node has Internet access to the repository
+ before attempting to create a mirror.
+
+ For more details, please refer to the documentation (https://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#external-ubuntu-ops).
+
+ '
+ extra_priority: null
+ type: custom_repo_configuration
+ value:
+ - name: ubuntu
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-updates
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-security
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: mos
+ priority: 1050
+ section: main restricted
+ suite: mos6.1
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/x86_64
+ - name: mos-updates
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-updates
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-security
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-security
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-holdback
+ priority: 1100
+ section: main restricted
+ suite: mos6.1-holdback
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: Auxiliary
+ priority: 1150
+ section: main restricted
+ suite: auxiliary
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/auxiliary
storage:
ephemeral_ceph:
- description: Configures Nova to store ephemeral volumes in RBD. This works
- best if Ceph is enabled for volumes and images, too. Enables live migration
- of all types of Ceph backed VMs (without this option, live migration will
- only work with VMs launched from Cinder volumes).
+ description: Configures Nova to store ephemeral volumes in RBD. This works best
+ if Ceph is enabled for volumes and images, too. Enables live migration of
+ all types of Ceph backed VMs (without this option, live migration will only
+ work with VMs launched from Cinder volumes).
label: Ceph RBD for ephemeral volumes (Nova)
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
type: checkbox
- value: false
+ value: true
weight: 75
images_ceph:
description: Configures Glance to use the Ceph RBD backend to store images.
If enabled, this option will prevent Swift from installing.
label: Ceph RBD for images (Glance)
+ restrictions:
+ - settings:storage.images_vcenter.value == true: Only one Glance backend could
+ be selected.
type: checkbox
- value: false
+ value: true
weight: 30
images_vcenter:
description: Configures Glance to use the vCenter/ESXi backend to store images.
If enabled, this option will prevent Swift from installing.
label: VMWare vCenter/ESXi datastore for images (Glance)
restrictions:
- - settings:common.libvirt_type.value != 'vcenter'
+ - action: hide
+ condition: settings:common.use_vcenter.value != true
+ - condition: settings:storage.images_ceph.value == true
+ message: Only one Glance backend could be selected.
type: checkbox
value: false
weight: 35
iser:
description: 'High performance block storage: Cinder volumes over iSER protocol
- (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC,
- and will use a dedicated virtual function for the storage network.'
+ (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and
+ will use a dedicated virtual function for the storage network.'
label: iSER protocol for volumes (Cinder)
restrictions:
- settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
!= 'kvm'
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
type: checkbox
value: false
weight: 11
@@ -735,123 +764,31 @@ settings:
weight: 80
osd_pool_size:
description: Configures the default number of object replicas in Ceph. This
- number must be equal to or lower than the number of deployed 'Storage -
- Ceph OSD' nodes.
+ number must be equal to or lower than the number of deployed 'Storage - Ceph
+ OSD' nodes.
label: Ceph object replication factor
regex:
error: Invalid number
source: ^[1-9]\d*$
- restrictions:
- - settings:common.libvirt_type.value == 'vcenter'
type: text
value: '2'
weight: 85
- vc_datacenter:
- description: Inventory path to a datacenter. If you want to use ESXi host
- as datastore, it should be "ha-datacenter".
- label: Datacenter name
- regex:
- error: Empty datacenter
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 65
- vc_datastore:
- description: Datastore associated with the datacenter.
- label: Datastore name
- regex:
- error: Empty datastore
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 60
- vc_host:
- description: IP Address of vCenter/ESXi
- label: vCenter/ESXi IP
- regex:
- error: Specify valid IPv4 address
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])$
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 45
- vc_image_dir:
- description: The name of the directory where the glance images will be stored
- in the VMware datastore.
- label: Datastore Images directory
- regex:
- error: Empty images directory
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: /openstack_glance
- weight: 70
- vc_password:
- description: vCenter/ESXi admin password
- label: Password
- regex:
- error: Empty password
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: password
- value: ''
- weight: 55
- vc_user:
- description: vCenter/ESXi admin username
- label: Username
- regex:
- error: Empty username
- source: \S
- restrictions:
- - action: hide
- condition: settings:storage.images_vcenter.value == false or settings:common.libvirt_type.value
- != 'vcenter'
- type: text
- value: ''
- weight: 50
volumes_ceph:
description: Configures Cinder to store volumes in Ceph RBD images.
label: Ceph RBD for volumes (Cinder)
restrictions:
- - settings:storage.volumes_lvm.value == true or settings:common.libvirt_type.value
- == 'vcenter'
+ - settings:storage.volumes_lvm.value == true
type: checkbox
- value: false
+ value: true
weight: 20
volumes_lvm:
- description: Requires at least one Storage - Cinder LVM node.
+ description: It is recommended to have at least one Storage - Cinder LVM node.
label: Cinder LVM over iSCSI for volumes
restrictions:
- settings:storage.volumes_ceph.value == true
type: checkbox
- value: true
- weight: 10
- volumes_vmdk:
- description: Configures Cinder to store volumes via VMware vCenter.
- label: VMware vCenter for volumes (Cinder)
- restrictions:
- - settings:common.libvirt_type.value != 'vcenter' or settings:storage.volumes_lvm.value
- == true
- type: checkbox
value: false
- weight: 15
+ weight: 10
syslog:
metadata:
label: Syslog
@@ -883,94 +820,22 @@ settings:
description: ''
label: TCP
weight: 30
- vcenter:
- cluster:
- description: vCenter cluster name. If you have multiple clusters, use comma
- to separate names
- label: Cluster
- regex:
- error: Invalid cluster list
- source: ^([^,\ ]+([\ ]*[^,\ ])*)(,[^,\ ]+([\ ]*[^,\ ])*)*$
- type: text
- value: ''
- weight: 40
- datastore_regex:
- description: The Datastore regexp setting specifies the data stores to use
- with Compute. For example, "nas.*". If you want to use all available datastores,
- leave this field blank
- label: Datastore regexp
- regex:
- error: Invalid datastore regexp
- source: ^(\S.*\S|\S|)$
- type: text
- value: ''
- weight: 50
- host_ip:
- description: IP Address of vCenter
- label: vCenter IP
- regex:
- error: Specify valid IPv4 address
- source: ^(([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])\.){3}([\d]|[1-9][\d]|1[\d]{2}|2[0-4][\d]|25[0-5])$
- type: text
- value: ''
- weight: 10
- metadata:
- label: vCenter
- restrictions:
- - action: hide
- condition: settings:common.libvirt_type.value != 'vcenter'
- weight: 20
- use_vcenter:
- description: ''
- label: ''
+ workloads_collector:
+ enabled:
type: hidden
value: true
- weight: 5
- vc_password:
- description: vCenter admin password
- label: Password
- regex:
- error: Empty password
- source: \S
- type: password
- value: admin
- weight: 30
- vc_user:
- description: vCenter admin username
- label: Username
- regex:
- error: Empty username
- source: \S
- type: text
- value: admin
- weight: 20
- vlan_interface:
- description: Physical ESXi host ethernet adapter for VLAN networking (e.g.
- vmnic1). If empty "vmnic0" is used by default
- label: ESXi VLAN interface
- restrictions:
- - action: hide
- condition: cluster:net_provider != 'nova_network' or networking_parameters:net_manager
- != 'VlanManager'
- type: text
- value: ''
- weight: 60
- zabbix:
metadata:
- label: Zabbix Access
+ label: Workloads Collector User
restrictions:
- action: hide
- condition: not ('experimental' in version:feature_groups)
- weight: 70
+ condition: 'true'
+ weight: 10
password:
- description: Password for Zabbix Administrator
- label: password
type: password
- value: zabbix
- weight: 20
- username:
- description: Username for Zabbix Administrator
- label: username
+ value: pBkLbu1k
+ tenant:
type: text
- value: admin
- weight: 10
+ value: services
+ user:
+ type: text
+ value: fuel_stats_user
diff --git a/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dha.yaml b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dha.yaml
new file mode 100644
index 000000000..cfc97094c
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2/dha.yaml
@@ -0,0 +1,49 @@
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version:
+created:
+comment: Config for LF POD2 and Opendaylight
+
+# Adapter to use for this definition
+adapter: ipmi
+
+# Node list.
+# Mandatory property is id, all other properties are adapter specific.
+
+nodes:
+- id: 1
+ pxeMac: 00:25:b5:a0:00:2a
+ ipmiIp: 172.30.8.75
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 2
+ pxeMac: 00:25:b5:a0:00:3a
+ ipmiIp: 172.30.8.65
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 3
+ pxeMac: 00:25:b5:a0:00:4a
+ ipmiIp: 172.30.8.74
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 4
+ pxeMac: 00:25:b5:a0:00:5a
+ ipmiIp: 172.30.8.73
+ ipmiUser: admin
+ ipmiPass: octopus
+- id: 5
+ pxeMac: 00:25:b5:a0:00:6a
+ ipmiIp: 172.30.8.72
+ ipmiUser: admin
+ ipmiPass: octopus
+# Adding the Fuel node as node id 6 which may not be correct - please
+# adjust as needed.
+- id: 6
+ libvirtName: fuel-opnfv
+ libvirtTemplate: templates/hardware_environment/vms/fuel.xml
+ isFuel: yes
+ username: root
+ password: r00tme
+
+disks:
+ fuel: 50G \ No newline at end of file
diff --git a/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dea.yaml b/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dea.yaml
new file mode 100644
index 000000000..0895e4f1d
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dea.yaml
@@ -0,0 +1,842 @@
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version:
+created:
+comment: Config for OPNFV BOX - HA deployment with Ceph
+environment:
+ name: opnfv_virt
+ mode: ha
+ net_segment_type: gre
+wanted_release: Juno on Ubuntu 14.04.1
+nodes:
+- id: 1
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 2
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 3
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 4
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 5
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+opnfv:
+ hosts:
+ - name:
+ address:
+ fqdn:
+fuel:
+ ADMIN_NETWORK:
+ ipaddress: 10.20.0.2
+ netmask: 255.255.0.0
+ dhcp_pool_start: 10.20.0.3
+ dhcp_pool_end: 10.20.0.254
+ DNS_UPSTREAM: 8.8.8.8
+ DNS_DOMAIN: domain.tld
+ DNS_SEARCH: domain.tld
+ FUEL_ACCESS:
+ user: admin
+ password: admin
+ HOSTNAME: opnfv
+ NTP1: 0.pool.ntp.org
+ NTP2: 1.pool.ntp.org
+ NTP3: 2.pool.ntp.org
+interfaces_1:
+ eth0:
+ - public
+ eth1:
+ - fuelweb_admin
+ - management
+ - storage
+ - private
+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: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth1.300
+ - action: add-port
+ bridge: br-storage
+ name: eth1.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth1.302
+ - action: add-port
+ bridge: br-ex
+ name: eth0
+transformations_2:
+ 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-mesh
+ - action: add-port
+ bridge: br-fw-admin
+ name: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth1.300
+ - action: add-port
+ bridge: br-storage
+ name: eth1.301
+ - action: add-port
+ bridge: br-mesh
+ name: eth1.302
+network:
+ networking_parameters:
+ base_mac: fa:16:3e:00:00:00
+ dns_nameservers:
+ - 8.8.4.4
+ - 8.8.8.8
+ floating_ranges:
+ - - 172.30.10.83
+ - 172.30.10.92
+ gre_id_range:
+ - 2
+ - 65535
+ internal_cidr: 192.168.111.0/24
+ internal_gateway: 192.168.111.1
+ net_l23_provider: ovs
+ segmentation_type: gre
+ vlan_range:
+ - 1000
+ - 1030
+ networks:
+ - cidr: 172.30.10.0/24
+ gateway: 172.30.10.1
+ ip_ranges:
+ - - 172.30.10.73
+ - 172.30.10.82
+ meta:
+ cidr: 172.30.10.0/24
+ configurable: true
+ floating_range_var: floating_ranges
+ ip_range:
+ - 172.30.10.73
+ - 172.30.10.82
+ map_priority: 1
+ name: public
+ notation: ip_ranges
+ render_addr_mask: public
+ render_type: null
+ use_gateway: true
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: null
+ name: public
+ vlan_start: null
+ - cidr: 192.168.0.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.0.1
+ - 192.168.0.254
+ meta:
+ cidr: 192.168.0.0/24
+ configurable: true
+ map_priority: 2
+ name: management
+ notation: cidr
+ render_addr_mask: internal
+ render_type: cidr
+ use_gateway: false
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: 300
+ name: management
+ vlan_start: 300
+ - cidr: 192.168.1.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.1.1
+ - 192.168.1.254
+ meta:
+ cidr: 192.168.1.0/24
+ configurable: true
+ map_priority: 2
+ name: storage
+ notation: cidr
+ render_addr_mask: storage
+ render_type: cidr
+ use_gateway: false
+ vlan_start: 301
+ name: storage
+ vlan_start: 301
+ - cidr: 192.168.2.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.2.1
+ - 192.168.2.254
+ meta:
+ assign_vip: 192.168.2.0/24
+ configurable: true
+ map_priority: 2
+ name: private
+ notation: cidr
+ render_addr_mask: private
+ render_type: cidr
+ seg_type: gre
+ use_gateway: false
+ vlan_start: 302
+ name: private
+ vlan_start: 302
+ - cidr: 10.20.0.0/24
+ gateway: 10.20.0.2
+ ip_ranges:
+ - - 10.20.0.3
+ - 10.20.255.254
+ meta:
+ configurable: false
+ map_priority: 0
+ notation: ip_ranges
+ render_addr_mask: null
+ render_type: null
+ unmovable: true
+ use_gateway: true
+ name: fuelweb_admin
+ vlan_start: null
+settings:
+ editable:
+ access:
+ email:
+ description: Email address for Administrator
+ label: Email
+ regex:
+ error: Invalid email
+ source: ^\S+@\S+$
+ type: text
+ value: admin@localhost
+ weight: 40
+ metadata:
+ label: Access
+ weight: 10
+ password:
+ description: Password for Administrator
+ label: Password
+ regex:
+ error: Empty password
+ source: \S
+ type: password
+ value: admin
+ weight: 20
+ tenant:
+ description: Tenant (project) name for Administrator
+ label: Tenant
+ regex:
+ error: Invalid tenant name
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 30
+ user:
+ description: Username for Administrator
+ label: Username
+ regex:
+ error: Invalid username
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 10
+ additional_components:
+ ceilometer:
+ description: If selected, Ceilometer component will be installed
+ label: Install Ceilometer
+ type: checkbox
+ value: false
+ weight: 40
+ heat:
+ description: ''
+ label: ''
+ type: hidden
+ value: true
+ weight: 30
+ metadata:
+ label: Additional Components
+ weight: 20
+ mongo:
+ description: If selected, You can use external Mongo DB as ceilometer backend
+ label: Use external Mongo DB
+ restrictions:
+ - settings:additional_components.ceilometer.value == false
+ type: checkbox
+ value: false
+ weight: 40
+ murano:
+ description: If selected, Murano component will be installed
+ label: Install Murano
+ restrictions:
+ - cluster:net_provider != 'neutron'
+ type: checkbox
+ value: false
+ weight: 20
+ sahara:
+ description: If selected, Sahara component will be installed
+ label: Install Sahara
+ type: checkbox
+ value: false
+ weight: 10
+ common:
+ auth_key:
+ description: Public key(s) to include in authorized_keys on deployed nodes
+ label: Public Key
+ type: textarea
+ value: ''
+ weight: 70
+ auto_assign_floating_ip:
+ description: If selected, OpenStack will automatically assign a floating IP
+ to a new instance
+ label: Auto assign floating IP
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider == 'neutron'
+ type: checkbox
+ value: false
+ weight: 40
+ debug:
+ description: Debug logging mode provides more information, but requires more
+ disk space.
+ label: OpenStack debug logging
+ type: checkbox
+ value: false
+ weight: 20
+ libvirt_type:
+ label: Hypervisor type
+ type: radio
+ value: kvm
+ values:
+ - data: kvm
+ description: Choose this type of hypervisor if you run OpenStack on hardware
+ label: KVM
+ - data: qemu
+ description: Choose this type of hypervisor if you run OpenStack on virtual
+ hosts.
+ label: QEMU
+ weight: 30
+ metadata:
+ label: Common
+ weight: 30
+ nova_quota:
+ description: Quotas are used to limit CPU and memory usage for tenants. Enabling
+ quotas will increase load on the Nova database.
+ label: Nova quotas
+ type: checkbox
+ value: false
+ weight: 25
+ puppet_debug:
+ description: Debug puppet logging mode provides more information, but requires
+ more disk space.
+ label: Puppet debug logging
+ type: checkbox
+ value: true
+ weight: 20
+ resume_guests_state_on_host_boot:
+ description: Whether to resume previous guests state when the host reboots.
+ If enabled, this option causes guests assigned to the host to resume their
+ previous state. If the guest was running a restart will be attempted when
+ nova-compute starts. If the guest was not running previously, a restart will
+ not be attempted.
+ label: Resume guests state on host boot
+ type: checkbox
+ value: true
+ weight: 60
+ use_cow_images:
+ description: For most cases you will want qcow format. If it's disabled, raw
+ image format will be used to run VMs. OpenStack with raw format currently
+ does not support snapshotting.
+ label: Use qcow format for images
+ type: checkbox
+ value: true
+ weight: 50
+ use_vcenter:
+ type: hidden
+ value: false
+ weight: 30
+ corosync:
+ group:
+ description: ''
+ label: Group
+ type: text
+ value: 226.94.1.1
+ weight: 10
+ metadata:
+ label: Corosync
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 50
+ port:
+ description: ''
+ label: Port
+ type: text
+ value: '12000'
+ weight: 20
+ verified:
+ description: Set True only if multicast is configured correctly on router.
+ label: Need to pass network verification.
+ type: checkbox
+ value: false
+ weight: 10
+ external_dns:
+ dns_list:
+ description: List of upstream DNS servers, separated by comma
+ label: DNS list
+ regex:
+ error: Invalid IP address list
+ source: ^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$
+ type: text
+ value: 8.8.4.4, 8.8.8.8
+ weight: 10
+ metadata:
+ label: Host OS DNS Servers
+ weight: 90
+ external_mongo:
+ hosts_ip:
+ description: IP Addresses of MongoDB. Use comma to split IPs
+ label: MongoDB hosts IP
+ regex:
+ error: Invalid hosts ip sequence
+ source: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),)*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
+ type: text
+ value: ''
+ weight: 30
+ metadata:
+ label: External MongoDB
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.mongo.value == false
+ weight: 20
+ mongo_db_name:
+ description: Mongo database name
+ label: Database name
+ regex:
+ error: Invalid database name
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ mongo_password:
+ description: Mongo database password
+ label: Password
+ regex:
+ error: Password contains spaces
+ source: ^\S*$
+ type: password
+ value: ceilometer
+ weight: 30
+ mongo_replset:
+ description: Name for Mongo replication set
+ label: Replset
+ type: text
+ value: ''
+ weight: 30
+ mongo_user:
+ description: Mongo database username
+ label: Username
+ regex:
+ error: Empty username
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ external_ntp:
+ metadata:
+ label: Host OS NTP Servers
+ weight: 100
+ ntp_list:
+ description: List of upstream NTP servers, separated by comma
+ label: NTP server list
+ regex:
+ error: Invalid NTP server list
+ source: ^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(?:\.\d{1,3}){3})\s*(?:,\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(\.\d{1,3}){3})\s*)*$
+ type: text
+ value: 0.pool.ntp.org, 1.pool.ntp.org
+ weight: 10
+ kernel_params:
+ kernel:
+ description: Default kernel parameters
+ label: Initial parameters
+ type: text
+ value: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90
+ nomodeset
+ weight: 45
+ metadata:
+ label: Kernel parameters
+ weight: 40
+ murano_settings:
+ metadata:
+ label: Murano Settings
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.murano.value == false
+ weight: 20
+ murano_repo_url:
+ description: ''
+ label: Murano Repository URL
+ type: text
+ value: http://storage.apps.openstack.org/
+ weight: 10
+ neutron_mellanox:
+ metadata:
+ enabled: true
+ label: Mellanox Neutron components
+ restrictions:
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ toggleable: false
+ weight: 50
+ plugin:
+ label: Mellanox drivers and SR-IOV plugin
+ type: radio
+ value: disabled
+ values:
+ - data: disabled
+ description: If selected, Mellanox drivers, Neutron and Cinder plugin will
+ not be installed.
+ label: Mellanox drivers and plugins disabled
+ restrictions:
+ - settings:storage.iser.value == true
+ - data: drivers_only
+ description: If selected, Mellanox Ethernet drivers will be installed to support
+ networking over Mellanox NIC. Mellanox Neutron plugin will not be installed.
+ label: Install only Mellanox drivers
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm'
+ - data: ethernet
+ description: If selected, both Mellanox Ethernet drivers and Mellanox network
+ acceleration (Neutron) plugin will be installed.
+ label: Install Mellanox drivers and SR-IOV plugin
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm' or not (cluster:net_provider
+ == 'neutron' and networking_parameters:segmentation_type == 'vlan')
+ weight: 60
+ vf_num:
+ description: Note that one virtual function will be reserved to the storage
+ network, in case of choosing iSER.
+ label: Number of virtual NICs
+ restrictions:
+ - settings:neutron_mellanox.plugin.value != 'ethernet'
+ type: text
+ value: '16'
+ weight: 70
+ opendaylight:
+ metadata:
+ enabled: true
+ label: OpenDaylight plugin
+ plugin_id: 1
+ restrictions:
+ - cluster:net_provider != 'neutron': Only neutron is supported by OpenDaylight
+ toggleable: true
+ weight: 70
+ rest_api_port:
+ description: Port on which ODL REST API will be available.
+ label: Port number
+ regex:
+ error: Invalid port number
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '8282'
+ weight: 40
+ use_vxlan:
+ description: Configure neutron to use VXLAN tunneling
+ label: Use vxlan
+ restrictions:
+ - action: disable
+ condition: networking_parameters:segmentation_type == 'vlan'
+ message: Neutron with GRE segmentation required
+ type: checkbox
+ value: true
+ weight: 20
+ vni_range_end:
+ description: VXLAN VNI IDs range end
+ label: VNI range end
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10000'
+ weight: 31
+ vni_range_start:
+ description: VXLAN VNI IDs range start
+ label: VNI range start
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10'
+ weight: 30
+ provision:
+ metadata:
+ label: Provision
+ weight: 80
+ method:
+ description: Which provision method to use for this cluster.
+ label: Provision method
+ type: radio
+ value: image
+ values:
+ - data: image
+ description: Copying pre-built images on a disk.
+ label: Image
+ - data: cobbler
+ description: Install from scratch using anaconda or debian-installer.
+ label: (DEPRECATED) Classic (use anaconda or debian-installer)
+ public_network_assignment:
+ assign_to_all_nodes:
+ description: When disabled, public network will be assigned to controllers only
+ label: Assign public network to all nodes
+ type: checkbox
+ value: false
+ weight: 10
+ metadata:
+ label: Public network assignment
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider != 'neutron'
+ weight: 50
+ repo_setup:
+ metadata:
+ always_editable: true
+ label: Repositories
+ weight: 50
+ repos:
+ description: 'Please note: the first repository will be considered the operating
+ system mirror that will be used during node provisioning.
+
+ To create a local repository mirror on the Fuel master node, please follow
+ the instructions provided by running "fuel-createmirror --help" on the Fuel
+ master node.
+
+ Please make sure your Fuel master node has Internet access to the repository
+ before attempting to create a mirror.
+
+ For more details, please refer to the documentation (https://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#external-ubuntu-ops).
+
+ '
+ extra_priority: null
+ type: custom_repo_configuration
+ value:
+ - name: ubuntu
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-updates
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-security
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: mos
+ priority: 1050
+ section: main restricted
+ suite: mos6.1
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/x86_64
+ - name: mos-updates
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-updates
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-security
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-security
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-holdback
+ priority: 1100
+ section: main restricted
+ suite: mos6.1-holdback
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: Auxiliary
+ priority: 1150
+ section: main restricted
+ suite: auxiliary
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/auxiliary
+ storage:
+ ephemeral_ceph:
+ description: Configures Nova to store ephemeral volumes in RBD. This works best
+ if Ceph is enabled for volumes and images, too. Enables live migration of
+ all types of Ceph backed VMs (without this option, live migration will only
+ work with VMs launched from Cinder volumes).
+ label: Ceph RBD for ephemeral volumes (Nova)
+ type: checkbox
+ value: true
+ weight: 75
+ images_ceph:
+ description: Configures Glance to use the Ceph RBD backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: Ceph RBD for images (Glance)
+ restrictions:
+ - settings:storage.images_vcenter.value == true: Only one Glance backend could
+ be selected.
+ type: checkbox
+ value: true
+ weight: 30
+ images_vcenter:
+ description: Configures Glance to use the vCenter/ESXi backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: VMWare vCenter/ESXi datastore for images (Glance)
+ restrictions:
+ - action: hide
+ condition: settings:common.use_vcenter.value != true
+ - condition: settings:storage.images_ceph.value == true
+ message: Only one Glance backend could be selected.
+ type: checkbox
+ value: false
+ weight: 35
+ iser:
+ description: 'High performance block storage: Cinder volumes over iSER protocol
+ (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and
+ will use a dedicated virtual function for the storage network.'
+ label: iSER protocol for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
+ != 'kvm'
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ type: checkbox
+ value: false
+ weight: 11
+ metadata:
+ label: Storage
+ weight: 60
+ objects_ceph:
+ description: Configures RadosGW front end for Ceph RBD. This exposes S3 and
+ Swift API Interfaces. If enabled, this option will prevent Swift from installing.
+ label: Ceph RadosGW for objects (Swift API)
+ restrictions:
+ - settings:storage.images_ceph.value == false
+ type: checkbox
+ value: false
+ weight: 80
+ osd_pool_size:
+ description: Configures the default number of object replicas in Ceph. This
+ number must be equal to or lower than the number of deployed 'Storage - Ceph
+ OSD' nodes.
+ label: Ceph object replication factor
+ regex:
+ error: Invalid number
+ source: ^[1-9]\d*$
+ type: text
+ value: '2'
+ weight: 85
+ volumes_ceph:
+ description: Configures Cinder to store volumes in Ceph RBD images.
+ label: Ceph RBD for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value == true
+ type: checkbox
+ value: true
+ weight: 20
+ volumes_lvm:
+ description: It is recommended to have at least one Storage - Cinder LVM node.
+ label: Cinder LVM over iSCSI for volumes
+ restrictions:
+ - settings:storage.volumes_ceph.value == true
+ type: checkbox
+ value: false
+ weight: 10
+ syslog:
+ metadata:
+ label: Syslog
+ weight: 50
+ syslog_port:
+ description: Remote syslog port
+ label: Port
+ regex:
+ error: Invalid Syslog port
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '514'
+ weight: 20
+ syslog_server:
+ description: Remote syslog hostname
+ label: Hostname
+ type: text
+ value: ''
+ weight: 10
+ syslog_transport:
+ label: Syslog transport protocol
+ type: radio
+ value: tcp
+ values:
+ - data: udp
+ description: ''
+ label: UDP
+ - data: tcp
+ description: ''
+ label: TCP
+ weight: 30
+ workloads_collector:
+ enabled:
+ type: hidden
+ value: true
+ metadata:
+ label: Workloads Collector User
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 10
+ password:
+ type: password
+ value: pBkLbu1k
+ tenant:
+ type: text
+ value: services
+ user:
+ type: text
+ value: fuel_stats_user
diff --git a/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dha.yaml b/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dha.yaml
new file mode 100644
index 000000000..c2624f2ba
--- /dev/null
+++ b/fuel/deploy/templates/hardware_environment/conf/opnfv_box/dha.yaml
@@ -0,0 +1,49 @@
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version:
+created:
+comment: Config for OPNFV BOX
+
+# Adapter to use for this definition
+adapter: ipmi
+
+# Node list.
+# Mandatory property is id, all other properties are adapter specific.
+
+nodes:
+- id: 1
+ pxeMac: b8:ae:ed:76:4d:a4
+ ipmiIp: <ipmi_ip>
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 2
+ pxeMac: b8:ae:ed:76:4d:94
+ ipmiIp: <ipmi_ip>
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 3
+ pxeMac: b8:ae:ed:76:4c:eb
+ ipmiIp: <ipmi_ip>
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 4
+ pxeMac: b8:ae:ed:76:37:62
+ ipmiIp: <ipmi_ip>
+ ipmiUser: <username>
+ ipmiPass: <password>
+- id: 5
+ pxeMac: b8:ae:ed:76:4d:95
+ ipmiIp: <ipmi_ip>
+ ipmiUser: <username>
+ ipmiPass: <password>
+# Adding the Fuel node as node id 6 which may not be correct - please
+# adjust as needed.
+- id: 6
+ libvirtName: fuel-opnfv
+ libvirtTemplate: templates/hardware_environment/vms/fuel.xml
+ isFuel: yes
+ username: root
+ password: r00tme
+
+disks:
+ fuel: 50G \ No newline at end of file
diff --git a/fuel/deploy/baremetal/vm/vFuel b/fuel/deploy/templates/hardware_environment/vms/fuel.xml
index 1b4f4eb47..e3e3f80bb 100644
--- a/fuel/deploy/baremetal/vm/vFuel
+++ b/fuel/deploy/templates/hardware_environment/vms/fuel.xml
@@ -1,15 +1,15 @@
-<domain type='kvm'>
- <name>vFuel</name>
+<domain type='kvm' id='62'>
+ <name>fuel</name>
<memory unit='KiB'>8290304</memory>
<currentMemory unit='KiB'>8290304</currentMemory>
- <vcpu placement='static'>2</vcpu>
+ <vcpu placement='static'>4</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
- <type arch='x86_64' machine='pc-i440fx-utopic'>hvm</type>
- <boot dev='hd'/>
+ <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='cdrom'/>
+ <boot dev='hd'/>
<bootmenu enable='no'/>
</os>
<features>
@@ -33,15 +33,14 @@
<suspend-to-disk enabled='no'/>
</pm>
<devices>
- <emulator>/usr/bin/kvm</emulator>
+ <emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
- <source file='/mnt/images/vFuel.raw'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
- <target dev='hda' bus='ide'/>
+ <target dev='hdb' bus='ide'/>
<readonly/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
@@ -55,19 +54,21 @@
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
</controller>
- <controller type='pci' index='0' model='pci-root'/>
- <controller type='virtio-serial' index='0'>
+ <controller type='pci' index='0' model='pci-root'>
</controller>
<controller type='ide' index='0'>
</controller>
+ <controller type='virtio-serial' index='0'>
+ </controller>
<interface type='bridge'>
- <source bridge='vfuelnet'/>
<model type='virtio'/>
</interface>
<serial type='pty'>
+ <source path='/dev/pts/0'/>
<target port='0'/>
</serial>
- <console type='pty'>
+ <console type='pty' tty='/dev/pts/0'>
+ <source path='/dev/pts/0'/>
<target type='serial' port='0'/>
</console>
<input type='mouse' bus='ps2'/>
@@ -83,5 +84,8 @@
<memballoon model='virtio'>
</memballoon>
</devices>
- <seclabel type='dynamic' model='apparmor' relabel='yes'/>
-</domain>
+ <seclabel type='dynamic' model='selinux' relabel='yes'>
+ <label>system_u:system_r:svirt_t:s0:c52,c932</label>
+ <imagelabel>system_u:object_r:svirt_image_t:s0:c52,c932</imagelabel>
+ </seclabel>
+</domain> \ No newline at end of file
diff --git a/fuel/deploy/templates/virtual_environment/conf/dea.yaml b/fuel/deploy/templates/virtual_environment/conf/dea.yaml
new file mode 100644
index 000000000..bc9a1f931
--- /dev/null
+++ b/fuel/deploy/templates/virtual_environment/conf/dea.yaml
@@ -0,0 +1,838 @@
+title: Deployment Environment Adapter (DEA)
+# DEA API version supported
+version:
+created:
+comment: Config for Virtual Environment - HA deployment with Ceph and Opendaylight
+environment:
+ name: opnfv_virt
+ mode: ha
+ net_segment_type: gre
+wanted_release: Juno on Ubuntu 14.04.1
+nodes:
+- id: 1
+ interfaces: interfaces_1
+ transformations: transformations_1
+ role: ceph-osd,controller
+- id: 2
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 3
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+- id: 4
+ interfaces: interfaces_1
+ transformations: transformations_2
+ role: ceph-osd,compute
+fuel:
+ ADMIN_NETWORK:
+ ipaddress: 10.20.0.2
+ netmask: 255.255.0.0
+ dhcp_pool_start: 10.20.0.3
+ dhcp_pool_end: 10.20.0.254
+ DNS_UPSTREAM: 10.118.32.193
+ DNS_DOMAIN: opnfvericsson.ca
+ DNS_SEARCH: opnfvericsson.ca
+ FUEL_ACCESS:
+ user: admin
+ password: admin
+ HOSTNAME: opnfv_virt
+ NTP1: 10.118.34.219
+ NTP2:
+ NTP3:
+interfaces_1:
+ eth0:
+ - fuelweb_admin
+ - management
+ eth1:
+ - storage
+ eth2:
+ - private
+ eth3:
+ - 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: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth0.101
+ - action: add-port
+ bridge: br-storage
+ name: eth1.102
+ - action: add-port
+ bridge: br-mesh
+ name: eth2.103
+ - action: add-port
+ bridge: br-ex
+ name: eth3
+transformations_2:
+ 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-mesh
+ - action: add-port
+ bridge: br-fw-admin
+ name: eth0
+ - action: add-port
+ bridge: br-mgmt
+ name: eth0.101
+ - action: add-port
+ bridge: br-storage
+ name: eth1.102
+ - action: add-port
+ bridge: br-mesh
+ name: eth2.103
+network:
+ management_vip: 192.168.0.2
+ management_vrouter_vip: 192.168.0.3
+ networking_parameters:
+ base_mac: fa:16:3e:00:00:00
+ dns_nameservers:
+ - 10.118.32.193
+ floating_ranges:
+ - - 172.16.0.130
+ - 172.16.0.254
+ gre_id_range:
+ - 2
+ - 65535
+ internal_cidr: 192.168.111.0/24
+ internal_gateway: 192.168.111.1
+ net_l23_provider: ovs
+ segmentation_type: gre
+ vlan_range:
+ - 1000
+ - 1030
+ networks:
+ - cidr: 172.16.0.0/24
+ gateway: 172.16.0.1
+ ip_ranges:
+ - - 172.16.0.2
+ - 172.16.0.126
+ meta:
+ cidr: 172.16.0.0/24
+ configurable: true
+ floating_range_var: floating_ranges
+ ip_range:
+ - 172.16.0.2
+ - 172.16.0.126
+ map_priority: 1
+ name: public
+ notation: ip_ranges
+ render_addr_mask: public
+ render_type: null
+ use_gateway: true
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: null
+ name: public
+ vlan_start: null
+ - cidr: 192.168.0.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.0.2
+ - 192.168.0.254
+ meta:
+ cidr: 192.168.0.0/24
+ configurable: true
+ map_priority: 2
+ name: management
+ notation: cidr
+ render_addr_mask: internal
+ render_type: cidr
+ use_gateway: false
+ vips:
+ - haproxy
+ - vrouter
+ vlan_start: 101
+ name: management
+ vlan_start: 101
+ - cidr: 192.168.1.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.1.1
+ - 192.168.1.254
+ meta:
+ cidr: 192.168.1.0/24
+ configurable: true
+ map_priority: 2
+ name: storage
+ notation: cidr
+ render_addr_mask: storage
+ render_type: cidr
+ use_gateway: false
+ vlan_start: 102
+ name: storage
+ vlan_start: 102
+ - cidr: 192.168.2.0/24
+ gateway: null
+ ip_ranges:
+ - - 192.168.2.2
+ - 192.168.2.254
+ meta:
+ cidr: 192.168.2.0/24
+ configurable: true
+ map_priority: 2
+ name: private
+ notation: cidr
+ render_addr_mask: private
+ render_type: cidr
+ seg_type: gre
+ use_gateway: false
+ vlan_start: 103
+ name: private
+ vlan_start: 103
+ - cidr: 10.20.0.0/16
+ gateway: 10.20.0.2
+ ip_ranges:
+ - - 10.20.0.3
+ - 10.20.0.254
+ meta:
+ configurable: false
+ map_priority: 0
+ notation: ip_ranges
+ render_addr_mask: null
+ render_type: null
+ unmovable: true
+ use_gateway: true
+ name: fuelweb_admin
+ vlan_start: null
+ public_vip: 172.16.0.2
+ public_vrouter_vip: 172.16.0.3
+settings:
+ editable:
+ access:
+ email:
+ description: Email address for Administrator
+ label: Email
+ regex:
+ error: Invalid email
+ source: ^\S+@\S+$
+ type: text
+ value: admin@localhost
+ weight: 40
+ metadata:
+ label: Access
+ weight: 10
+ password:
+ description: Password for Administrator
+ label: Password
+ regex:
+ error: Empty password
+ source: \S
+ type: password
+ value: admin
+ weight: 20
+ tenant:
+ description: Tenant (project) name for Administrator
+ label: Tenant
+ regex:
+ error: Invalid tenant name
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 30
+ user:
+ description: Username for Administrator
+ label: Username
+ regex:
+ error: Invalid username
+ source: ^(?!services$)(?!nova$)(?!glance$)(?!keystone$)(?!neutron$)(?!cinder$)(?!swift$)(?!ceph$)(?![Gg]uest$)(?!.*
+ +.*$).+
+ type: text
+ value: admin
+ weight: 10
+ additional_components:
+ ceilometer:
+ description: If selected, Ceilometer component will be installed
+ label: Install Ceilometer
+ type: checkbox
+ value: false
+ weight: 40
+ heat:
+ description: ''
+ label: ''
+ type: hidden
+ value: true
+ weight: 30
+ metadata:
+ label: Additional Components
+ weight: 20
+ mongo:
+ description: If selected, You can use external Mongo DB as ceilometer backend
+ label: Use external Mongo DB
+ restrictions:
+ - settings:additional_components.ceilometer.value == false
+ type: checkbox
+ value: false
+ weight: 40
+ murano:
+ description: If selected, Murano component will be installed
+ label: Install Murano
+ restrictions:
+ - cluster:net_provider != 'neutron'
+ type: checkbox
+ value: false
+ weight: 20
+ sahara:
+ description: If selected, Sahara component will be installed
+ label: Install Sahara
+ type: checkbox
+ value: false
+ weight: 10
+ common:
+ auth_key:
+ description: Public key(s) to include in authorized_keys on deployed nodes
+ label: Public Key
+ type: textarea
+ value: ''
+ weight: 70
+ auto_assign_floating_ip:
+ description: If selected, OpenStack will automatically assign a floating IP
+ to a new instance
+ label: Auto assign floating IP
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider == 'neutron'
+ type: checkbox
+ value: false
+ weight: 40
+ debug:
+ description: Debug logging mode provides more information, but requires more
+ disk space.
+ label: OpenStack debug logging
+ type: checkbox
+ value: false
+ weight: 20
+ libvirt_type:
+ label: Hypervisor type
+ type: radio
+ value: qemu
+ values:
+ - data: kvm
+ description: Choose this type of hypervisor if you run OpenStack on hardware
+ label: KVM
+ - data: qemu
+ description: Choose this type of hypervisor if you run OpenStack on virtual
+ hosts.
+ label: QEMU
+ weight: 30
+ metadata:
+ label: Common
+ weight: 30
+ nova_quota:
+ description: Quotas are used to limit CPU and memory usage for tenants. Enabling
+ quotas will increase load on the Nova database.
+ label: Nova quotas
+ type: checkbox
+ value: false
+ weight: 25
+ puppet_debug:
+ description: Debug puppet logging mode provides more information, but requires
+ more disk space.
+ label: Puppet debug logging
+ type: checkbox
+ value: true
+ weight: 20
+ resume_guests_state_on_host_boot:
+ description: Whether to resume previous guests state when the host reboots.
+ If enabled, this option causes guests assigned to the host to resume their
+ previous state. If the guest was running a restart will be attempted when
+ nova-compute starts. If the guest was not running previously, a restart will
+ not be attempted.
+ label: Resume guests state on host boot
+ type: checkbox
+ value: true
+ weight: 60
+ use_cow_images:
+ description: For most cases you will want qcow format. If it's disabled, raw
+ image format will be used to run VMs. OpenStack with raw format currently
+ does not support snapshotting.
+ label: Use qcow format for images
+ type: checkbox
+ value: true
+ weight: 50
+ use_vcenter:
+ type: hidden
+ value: false
+ weight: 30
+ corosync:
+ group:
+ description: ''
+ label: Group
+ type: text
+ value: 226.94.1.1
+ weight: 10
+ metadata:
+ label: Corosync
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 50
+ port:
+ description: ''
+ label: Port
+ type: text
+ value: '12000'
+ weight: 20
+ verified:
+ description: Set True only if multicast is configured correctly on router.
+ label: Need to pass network verification.
+ type: checkbox
+ value: false
+ weight: 10
+ external_dns:
+ dns_list:
+ description: List of upstream DNS servers, separated by comma
+ label: DNS list
+ regex:
+ error: Invalid IP address list
+ source: ^\*$|^(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3}(?:\s*,\s*(?:\d|1?\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d|1?\d\d|2[0-4]\d|25[0-5])){3})*$
+ type: text
+ value: 10.118.32.193
+ weight: 10
+ metadata:
+ label: Host OS DNS Servers
+ weight: 90
+ external_mongo:
+ hosts_ip:
+ description: IP Addresses of MongoDB. Use comma to split IPs
+ label: MongoDB hosts IP
+ regex:
+ error: Invalid hosts ip sequence
+ source: ^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),)*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
+ type: text
+ value: ''
+ weight: 30
+ metadata:
+ label: External MongoDB
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.mongo.value == false
+ weight: 20
+ mongo_db_name:
+ description: Mongo database name
+ label: Database name
+ regex:
+ error: Invalid database name
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ mongo_password:
+ description: Mongo database password
+ label: Password
+ regex:
+ error: Password contains spaces
+ source: ^\S*$
+ type: password
+ value: ceilometer
+ weight: 30
+ mongo_replset:
+ description: Name for Mongo replication set
+ label: Replset
+ type: text
+ value: ''
+ weight: 30
+ mongo_user:
+ description: Mongo database username
+ label: Username
+ regex:
+ error: Empty username
+ source: ^\w+$
+ type: text
+ value: ceilometer
+ weight: 30
+ external_ntp:
+ metadata:
+ label: Host OS NTP Servers
+ weight: 100
+ ntp_list:
+ description: List of upstream NTP servers, separated by comma
+ label: NTP server list
+ regex:
+ error: Invalid NTP server list
+ source: ^\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(?:\.\d{1,3}){3})\s*(?:,\s*(?:(?:\w+(?:-+\w+)*\.)+[a-z]+|\d{1,3}(\.\d{1,3}){3})\s*)*$
+ type: text
+ value: 10.118.34.219
+ weight: 10
+ kernel_params:
+ kernel:
+ description: Default kernel parameters
+ label: Initial parameters
+ type: text
+ value: console=ttyS0,9600 console=tty0 net.ifnames=0 biosdevname=0 rootdelay=90
+ nomodeset
+ weight: 45
+ metadata:
+ label: Kernel parameters
+ weight: 40
+ murano_settings:
+ metadata:
+ label: Murano Settings
+ restrictions:
+ - action: hide
+ condition: settings:additional_components.murano.value == false
+ weight: 20
+ murano_repo_url:
+ description: ''
+ label: Murano Repository URL
+ type: text
+ value: http://storage.apps.openstack.org/
+ weight: 10
+ neutron_mellanox:
+ metadata:
+ enabled: true
+ label: Mellanox Neutron components
+ restrictions:
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ toggleable: false
+ weight: 50
+ plugin:
+ label: Mellanox drivers and SR-IOV plugin
+ type: radio
+ value: disabled
+ values:
+ - data: disabled
+ description: If selected, Mellanox drivers, Neutron and Cinder plugin will
+ not be installed.
+ label: Mellanox drivers and plugins disabled
+ restrictions:
+ - settings:storage.iser.value == true
+ - data: drivers_only
+ description: If selected, Mellanox Ethernet drivers will be installed to support
+ networking over Mellanox NIC. Mellanox Neutron plugin will not be installed.
+ label: Install only Mellanox drivers
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm'
+ - data: ethernet
+ description: If selected, both Mellanox Ethernet drivers and Mellanox network
+ acceleration (Neutron) plugin will be installed.
+ label: Install Mellanox drivers and SR-IOV plugin
+ restrictions:
+ - settings:common.libvirt_type.value != 'kvm' or not (cluster:net_provider
+ == 'neutron' and networking_parameters:segmentation_type == 'vlan')
+ weight: 60
+ vf_num:
+ description: Note that one virtual function will be reserved to the storage
+ network, in case of choosing iSER.
+ label: Number of virtual NICs
+ restrictions:
+ - settings:neutron_mellanox.plugin.value != 'ethernet'
+ type: text
+ value: '16'
+ weight: 70
+ opendaylight:
+ metadata:
+ enabled: true
+ label: OpenDaylight plugin
+ plugin_id: 1
+ restrictions:
+ - cluster:net_provider != 'neutron': Only neutron is supported by OpenDaylight
+ toggleable: true
+ weight: 70
+ rest_api_port:
+ description: Port on which ODL REST API will be available.
+ label: Port number
+ regex:
+ error: Invalid port number
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '8282'
+ weight: 40
+ use_vxlan:
+ description: Configure neutron to use VXLAN tunneling
+ label: Use vxlan
+ restrictions:
+ - action: disable
+ condition: networking_parameters:segmentation_type == 'vlan'
+ message: Neutron with GRE segmentation required
+ type: checkbox
+ value: true
+ weight: 20
+ vni_range_end:
+ description: VXLAN VNI IDs range end
+ label: VNI range end
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10000'
+ weight: 31
+ vni_range_start:
+ description: VXLAN VNI IDs range start
+ label: VNI range start
+ regex:
+ error: Invalid ID number
+ source: ^\d+$
+ restrictions:
+ - action: hide
+ condition: networking_parameters:segmentation_type == 'vlan'
+ type: text
+ value: '10'
+ weight: 30
+ provision:
+ metadata:
+ label: Provision
+ weight: 80
+ method:
+ description: Which provision method to use for this cluster.
+ label: Provision method
+ type: radio
+ value: image
+ values:
+ - data: image
+ description: Copying pre-built images on a disk.
+ label: Image
+ - data: cobbler
+ description: Install from scratch using anaconda or debian-installer.
+ label: (DEPRECATED) Classic (use anaconda or debian-installer)
+ public_network_assignment:
+ assign_to_all_nodes:
+ description: When disabled, public network will be assigned to controllers only
+ label: Assign public network to all nodes
+ type: checkbox
+ value: false
+ weight: 10
+ metadata:
+ label: Public network assignment
+ restrictions:
+ - action: hide
+ condition: cluster:net_provider != 'neutron'
+ weight: 50
+ repo_setup:
+ metadata:
+ always_editable: true
+ label: Repositories
+ weight: 50
+ repos:
+ description: 'Please note: the first repository will be considered the operating
+ system mirror that will be used during node provisioning.
+
+ To create a local repository mirror on the Fuel master node, please follow
+ the instructions provided by running "fuel-createmirror --help" on the Fuel
+ master node.
+
+ Please make sure your Fuel master node has Internet access to the repository
+ before attempting to create a mirror.
+
+ For more details, please refer to the documentation (https://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#external-ubuntu-ops).
+
+ '
+ extra_priority: null
+ type: custom_repo_configuration
+ value:
+ - name: ubuntu
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-updates
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: ubuntu-security
+ priority: null
+ section: main
+ suite: trusty
+ type: deb
+ uri: http://10.20.0.2:8080/ubuntu-part
+ - name: mos
+ priority: 1050
+ section: main restricted
+ suite: mos6.1
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/x86_64
+ - name: mos-updates
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-updates
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-security
+ priority: 1050
+ section: main restricted
+ suite: mos6.1-security
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: mos-holdback
+ priority: 1100
+ section: main restricted
+ suite: mos6.1-holdback
+ type: deb
+ uri: http://10.20.0.2:8080/mos-ubuntu
+ - name: Auxiliary
+ priority: 1150
+ section: main restricted
+ suite: auxiliary
+ type: deb
+ uri: http://10.20.0.2:8080/2014.2.2-6.1/ubuntu/auxiliary
+ storage:
+ ephemeral_ceph:
+ description: Configures Nova to store ephemeral volumes in RBD. This works best
+ if Ceph is enabled for volumes and images, too. Enables live migration of
+ all types of Ceph backed VMs (without this option, live migration will only
+ work with VMs launched from Cinder volumes).
+ label: Ceph RBD for ephemeral volumes (Nova)
+ type: checkbox
+ value: true
+ weight: 75
+ images_ceph:
+ description: Configures Glance to use the Ceph RBD backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: Ceph RBD for images (Glance)
+ restrictions:
+ - settings:storage.images_vcenter.value == true: Only one Glance backend could
+ be selected.
+ type: checkbox
+ value: true
+ weight: 30
+ images_vcenter:
+ description: Configures Glance to use the vCenter/ESXi backend to store images.
+ If enabled, this option will prevent Swift from installing.
+ label: VMWare vCenter/ESXi datastore for images (Glance)
+ restrictions:
+ - action: hide
+ condition: settings:common.use_vcenter.value != true
+ - condition: settings:storage.images_ceph.value == true
+ message: Only one Glance backend could be selected.
+ type: checkbox
+ value: false
+ weight: 35
+ iser:
+ description: 'High performance block storage: Cinder volumes over iSER protocol
+ (iSCSI over RDMA). This feature requires SR-IOV capabilities in the NIC, and
+ will use a dedicated virtual function for the storage network.'
+ label: iSER protocol for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value != true or settings:common.libvirt_type.value
+ != 'kvm'
+ - action: hide
+ condition: not ('experimental' in version:feature_groups)
+ type: checkbox
+ value: false
+ weight: 11
+ metadata:
+ label: Storage
+ weight: 60
+ objects_ceph:
+ description: Configures RadosGW front end for Ceph RBD. This exposes S3 and
+ Swift API Interfaces. If enabled, this option will prevent Swift from installing.
+ label: Ceph RadosGW for objects (Swift API)
+ restrictions:
+ - settings:storage.images_ceph.value == false
+ type: checkbox
+ value: false
+ weight: 80
+ osd_pool_size:
+ description: Configures the default number of object replicas in Ceph. This
+ number must be equal to or lower than the number of deployed 'Storage - Ceph
+ OSD' nodes.
+ label: Ceph object replication factor
+ regex:
+ error: Invalid number
+ source: ^[1-9]\d*$
+ type: text
+ value: '2'
+ weight: 85
+ volumes_ceph:
+ description: Configures Cinder to store volumes in Ceph RBD images.
+ label: Ceph RBD for volumes (Cinder)
+ restrictions:
+ - settings:storage.volumes_lvm.value == true
+ type: checkbox
+ value: true
+ weight: 20
+ volumes_lvm:
+ description: It is recommended to have at least one Storage - Cinder LVM node.
+ label: Cinder LVM over iSCSI for volumes
+ restrictions:
+ - settings:storage.volumes_ceph.value == true
+ type: checkbox
+ value: false
+ weight: 10
+ syslog:
+ metadata:
+ label: Syslog
+ weight: 50
+ syslog_port:
+ description: Remote syslog port
+ label: Port
+ regex:
+ error: Invalid Syslog port
+ source: ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
+ type: text
+ value: '514'
+ weight: 20
+ syslog_server:
+ description: Remote syslog hostname
+ label: Hostname
+ type: text
+ value: ''
+ weight: 10
+ syslog_transport:
+ label: Syslog transport protocol
+ type: radio
+ value: tcp
+ values:
+ - data: udp
+ description: ''
+ label: UDP
+ - data: tcp
+ description: ''
+ label: TCP
+ weight: 30
+ workloads_collector:
+ enabled:
+ type: hidden
+ value: true
+ metadata:
+ label: Workloads Collector User
+ restrictions:
+ - action: hide
+ condition: 'true'
+ weight: 10
+ password:
+ type: password
+ value: pBkLbu1k
+ tenant:
+ type: text
+ value: services
+ user:
+ type: text
+ value: fuel_stats_user
diff --git a/fuel/deploy/templates/virtual_environment/conf/dha.yaml b/fuel/deploy/templates/virtual_environment/conf/dha.yaml
new file mode 100644
index 000000000..6d476b874
--- /dev/null
+++ b/fuel/deploy/templates/virtual_environment/conf/dha.yaml
@@ -0,0 +1,38 @@
+title: Deployment Hardware Adapter (DHA)
+# DHA API version supported
+version:
+created:
+comment: Config for Virtual Environment
+
+# Adapter to use for this definition
+adapter: libvirt
+
+# Node list.
+# Mandatory property is id, all other properties are adapter specific.
+
+nodes:
+- id: 1
+ libvirtName: controller1
+ libvirtTemplate: templates/virtual_environment/vms/controller.xml
+- id: 2
+ libvirtName: compute1
+ libvirtTemplate: templates/virtual_environment/vms/compute.xml
+- id: 3
+ libvirtName: compute2
+ libvirtTemplate: templates/virtual_environment/vms/compute.xml
+- id: 4
+ libvirtName: compute3
+ libvirtTemplate: templates/virtual_environment/vms/compute.xml
+- id: 5
+ libvirtName: fuel-master
+ libvirtTemplate: templates/virtual_environment/vms/fuel.xml
+ isFuel: yes
+ username: root
+ password: r00tme
+
+virtNetConfDir: templates/virtual_environment/networks
+
+disks:
+ fuel: 50G
+ controller: 50G
+ compute: 50G
diff --git a/fuel/deploy/libvirt/networks/fuel1 b/fuel/deploy/templates/virtual_environment/networks/fuel1.xml
index 7b2b15423..7b2b15423 100644
--- a/fuel/deploy/libvirt/networks/fuel1
+++ b/fuel/deploy/templates/virtual_environment/networks/fuel1.xml
diff --git a/fuel/deploy/libvirt/networks/fuel2 b/fuel/deploy/templates/virtual_environment/networks/fuel2.xml
index 615c92094..615c92094 100644
--- a/fuel/deploy/libvirt/networks/fuel2
+++ b/fuel/deploy/templates/virtual_environment/networks/fuel2.xml
diff --git a/fuel/deploy/libvirt/networks/fuel3 b/fuel/deploy/templates/virtual_environment/networks/fuel3.xml
index 2383e6c1f..2383e6c1f 100644
--- a/fuel/deploy/libvirt/networks/fuel3
+++ b/fuel/deploy/templates/virtual_environment/networks/fuel3.xml
diff --git a/fuel/deploy/libvirt/networks/fuel4 b/fuel/deploy/templates/virtual_environment/networks/fuel4.xml
index 5b69f912d..5b69f912d 100644
--- a/fuel/deploy/libvirt/networks/fuel4
+++ b/fuel/deploy/templates/virtual_environment/networks/fuel4.xml
diff --git a/fuel/deploy/libvirt/vms/compute b/fuel/deploy/templates/virtual_environment/vms/compute.xml
index 75915090c..fbef4bda7 100644
--- a/fuel/deploy/libvirt/vms/compute
+++ b/fuel/deploy/templates/virtual_environment/vms/compute.xml
@@ -1,5 +1,5 @@
<domain type='kvm'>
- <name>compute4</name>
+ <name>compute</name>
<memory unit='KiB'>8388608</memory>
<currentMemory unit='KiB'>8388608</currentMemory>
<vcpu placement='static'>2</vcpu>
@@ -7,7 +7,7 @@
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='network'/>
<boot dev='hd'/>
- <bootmenu enable='yes'/>
+ <bios rebootTimeout='30000'/>
</os>
<features>
<acpi/>
diff --git a/fuel/deploy/libvirt/vms/controller b/fuel/deploy/templates/virtual_environment/vms/controller.xml
index a87126296..3ff28218d 100644
--- a/fuel/deploy/libvirt/vms/controller
+++ b/fuel/deploy/templates/virtual_environment/vms/controller.xml
@@ -1,12 +1,13 @@
<domain type='kvm'>
- <name>controller1</name>
- <memory unit='KiB'>2097152</memory>
- <currentMemory unit='KiB'>2097152</currentMemory>
+ <name>controller</name>
+ <memory unit='KiB'>8388608</memory>
+ <currentMemory unit='KiB'>8388608</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='network'/>
<boot dev='hd'/>
+ <bios rebootTimeout='30000'/>
</os>
<features>
<acpi/>
diff --git a/fuel/deploy/libvirt/vms/fuel-master b/fuel/deploy/templates/virtual_environment/vms/fuel.xml
index f4e652bf2..1a3286001 100644
--- a/fuel/deploy/libvirt/vms/fuel-master
+++ b/fuel/deploy/templates/virtual_environment/vms/fuel.xml
@@ -1,5 +1,5 @@
<domain type='kvm'>
- <name>fuel-master</name>
+ <name>fuel</name>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>2</vcpu>
diff --git a/fuel/deploy/transplant_fuel_settings.py b/fuel/deploy/transplant_fuel_settings.py
index bb4f9b6d7..d2aece87a 100644
--- a/fuel/deploy/transplant_fuel_settings.py
+++ b/fuel/deploy/transplant_fuel_settings.py
@@ -1,3 +1,13 @@
+###############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# szilard.cserey@ericsson.com
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+###############################################################################
+
+
import sys
import common
import io
@@ -6,12 +16,16 @@ from dea import DeploymentEnvironmentAdapter
check_file_exists = common.check_file_exists
+ASTUTE_YAML = '/etc/fuel/astute.yaml'
+
+
def usage():
print '''
Usage:
python transplant_fuel_settings.py <deafile>
'''
+
def parse_arguments():
if len(sys.argv) != 2:
usage()
@@ -20,6 +34,7 @@ def parse_arguments():
check_file_exists(dea_file)
return dea_file
+
def transplant(dea, astute):
fuel_conf = dea.get_fuel_config()
for key in fuel_conf.iterkeys():
@@ -30,17 +45,17 @@ def transplant(dea, astute):
astute[key] = fuel_conf[key]
return astute
+
def main():
dea_file = parse_arguments()
- astute_yaml = '/etc/fuel/astute.yaml'
- check_file_exists(astute_yaml)
+ check_file_exists(ASTUTE_YAML)
dea = DeploymentEnvironmentAdapter(dea_file)
- with io.open(astute_yaml) as stream:
+ with io.open(ASTUTE_YAML) as stream:
astute = yaml.load(stream)
transplant(dea, astute)
- with io.open(astute_yaml, 'w') as stream:
+ with io.open(ASTUTE_YAML, 'w') as stream:
yaml.dump(astute, stream, default_flow_style=False)
if __name__ == '__main__':
- main() \ No newline at end of file
+ main()
diff --git a/fuel/docs/src/build-instructions.rst b/fuel/docs/src/build-instructions.rst
index b05164f98..790bcf513 100644
--- a/fuel/docs/src/build-instructions.rst
+++ b/fuel/docs/src/build-instructions.rst
@@ -1,6 +1,6 @@
-========================================================================
-OPNFV Build instructions for - Fuel deployment tool - OPNFV Arno release
-========================================================================
+============================================================================
+OPNFV Build instructions for - Fuel deployment tool - OPNFV Arno SR1 release
+============================================================================
.. contents:: Table of Contents
:backlinks: none
@@ -8,31 +8,34 @@ OPNFV Build instructions for - Fuel deployment tool - OPNFV Arno release
Abstract
========
-This document describes how to build the Fuel deployment tool for the Arno release of OPNFV, the build system, dependencies and required system resources.
+This document describes how to build the Fuel deployment tool for the Arno SR1 release of OPNFV, the build system, dependencies and required system resources.
License
=======
-Arno release of OPNFV when using Fuel as a deployment tool DOCs (c) by Jonas Bjurel (Ericsson AB)
+Arno SR1 release of OPNFV when using Fuel as a deployment tool DOCs (c) by Jonas Bjurel (Ericsson AB)
-Arno release of OPNFV when using Fuel as a deployment tool DOCs (c) are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
+Arno SR1 release of OPNFV when using Fuel as a deployment tool DOCs (c) are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
Version history
===============
-+--------------------+--------------------+--------------------+--------------------+
-| **Date** | **Ver.** | **Author** | **Comment** |
-| | | | |
-+--------------------+--------------------+--------------------+--------------------+
-| 2015-06-03 | 1.0.0 | Jonas Bjurel | Instructions for |
-| | | (Ericsson AB) | the Arno release |
-+--------------------+--------------------+--------------------+--------------------+
++--------------------+--------------------+--------------------+----------------------+
+| **Date** | **Ver.** | **Author** | **Comment** |
+| | | | |
++--------------------+--------------------+--------------------+----------------------+
+| 2015-06-03 | 1.0.0 | Jonas Bjurel | Instructions for |
+| | | (Ericsson AB) | the Arno release |
++--------------------+--------------------+--------------------+----------------------+
+| 2015-09-24 | 1.1.0 | Jonas Bjurel | Instructions for |
+| | | (Ericsson AB) | the Arno SR1 release |
++--------------------+--------------------+--------------------+----------------------+
Introduction
============
-This document describes the build system used to build the Fuel deployment tool for the Arno release of OPNFV, required dependencies and minimum requirements on the host to be used for the buildsystem.
+This document describes the build system used to build the Fuel deployment tool for the Arno SR1 release of OPNFV, required dependencies and minimum requirements on the host to be used for the buildsystem.
The Fuel build system is desigened around Docker containers such that dependencies outside of the build system can be kept to a minimum. It also shields the host from any potential dangerous operations performed by the build system.
@@ -100,9 +103,9 @@ Now it is time to clone the code repository:
Now you should have the OPNFV genesis repository with the Fuel directories stored locally on your build host.
-Check out the Arno release:
+Check out the Arno SR1 release:
<cd genesis>
-<git checkout arno.2015.1.0>
+<git checkout arno.2015.2.0>
Building
========
@@ -170,7 +173,7 @@ References
-
:Authors: Jonas Bjurel (Ericsson)
-:Version: 1.0.0
+:Version: 1.1.0
**Documentation tracking**
diff --git a/fuel/docs/src/installation-instructions.rst b/fuel/docs/src/installation-instructions.rst
index 56699e9c3..aedbb53d5 100644
--- a/fuel/docs/src/installation-instructions.rst
+++ b/fuel/docs/src/installation-instructions.rst
@@ -9,13 +9,13 @@ OPNFV Installation instructions for the Arno release of OPNFV when using Fuel as
Abstract
========
-This document describes how to install the Arno release of OPNFV when using Fuel as a deployment tool covering it's limitations, dependencies and required system resources.
+This document describes how to install the Arno SR1 release of OPNFV when using Fuel as a deployment tool covering it's limitations, dependencies and required system resources.
License
=======
-Arno release of OPNFV when using Fuel as a deployment tool Docs (c) by Jonas Bjurel (Ericsson AB)
+Arno SR1 release of OPNFV when using Fuel as a deployment tool Docs (c) by Jonas Bjurel (Ericsson AB)
-Arno release of OPNFV when using Fuel as a deployment tool Docs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
+Arno SR1 release of OPNFV when using Fuel as a deployment tool Docs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
Version history
===============
@@ -27,52 +27,61 @@ Version history
| 2015-06-03 | 1.0.0 | Jonas Bjurel | Installation |
| | | (Ericsson AB) | instructions for |
| | | | the Arno release |
+| | | | |
+| 2015-09-27 | 1.1.0 | Daniel Smith | ARNO SR1-RC1 |
+| | | (Ericsson AB) | update |
+| | | | |
+| | | | |
+--------------------+--------------------+--------------------+--------------------+
Introduction
============
-This document describes providing guidelines on how to install and configure the Arno release of OPNFV when using Fuel as a deployment tool including required software and hardware configurations.
+This document describes providing guidelines on how to install and configure the Arno SR1 release of OPNFV when using Fuel as a deployment tool including required software and hardware configurations.
-Although the available installation options gives a high degree of freedom in how the system is set-up including architecture, services and features, etc. said permutations may not provide an OPNFV compliant reference architecture. This instruction provides a step-by-step guide that results in an OPNFV Arno compliant deployment.
+Although the available installation options gives a high degree of freedom in how the system is set-up including architecture, services and features, etc. said permutations may not provide an OPNFV compliant reference architecture. This instruction provides a step-by-step guide that results in an OPNFV Arno SR1 compliant deployment.
The audience of this document is assumed to have good knowledge in networking and Unix/Linux administration.
Preface
=======
-Before starting the installation of the Arno release of OPNFV when using Fuel as a deployment tool, some planning must be done.
+Before starting the installation of the Arno SR1 release of OPNFV when using Fuel as a deployment tool, some planning must be done.
Retrieving the ISO image
------------------------
-First of all, the Fuel deployment ISO image needs to be retrieved, the .iso image of the Arno release of OPNFV when using Fuel as a deployment tool can be found at http://artifacts.opnfv.org/arno.2015.1.0/fuel/arno.2015.1.0.fuel.iso
+First of all, the Fuel deployment ISO image needs to be retrieved, the .iso image of the Arno SR1 release of OPNFV when using Fuel as a deployment tool can be found at http://artifacts.opnfv.org/arno.2015.2.0/fuel/arno.2015.2.0.fuel.iso
+
Building the ISO image
----------------------
+
Alternatively, you may build the .iso from source by cloning the opnfv/genesis git repository. To retrieve the repository for the Arno release use the following command:
-<git clone https://<linux foundation uid>@gerrit.opnf.org/gerrit/genesis>
+- git clone https://<linux foundation uid>@gerrit.opnf.org/gerrit/genesis
-Check-out the Arno release tag to set the branch to the baseline required to replicate the Arno release:
+Check-out the Arno SR1 release tag to set the branch to the baseline required to replicate the Arno SR1 release:
-<cd genesis; git checkout arno.2015.1.0>
+- cd genesis; git checkout stable/arno2015.2.0
Go to the fuel directory and build the .iso:
-<cd fuel/build; make all>
+- cd fuel/build; make all
+
+For more information on how to build, please see "OPNFV Build instructions for - Arno SR1 release of OPNFV when using Fuel as a deployment tool which you retrieved with the repository at </genesis/fuel/docs/src/build-instructions.rst>
-For more information on how to build, please see "OPNFV Build instructions for - Arno release of OPNFV when using Fuel as a deployment tool which you retrieved with the repository at </genesis/fuel/docs/src/build-instructions.rst>
+Next, familiarize yourself with the Fuel 6.1 version by reading the following documents:
-Next, familiarize yourself with the Fuel 6.0.1 version by reading the following documents:
+- Fuel planning guide <https://docs.mirantis.com/openstack/fuel/fuel-6.1/planning-guide.html>
-- Fuel planning guide <http://docs.mirantis.com/openstack/fuel/fuel-6.0/planning-guide.html#planning-guide>
+- Fuel user guide <http://docs.mirantis.com/openstack/fuel/fuel-6.1/user-guide.html#user-guide>
-- Fuel user guide <http://docs.mirantis.com/openstack/fuel/fuel-6.0/user-guide.html#user-guide>
+- Fuel operations guide <http://docs.mirantis.com/openstack/fuel/fuel-6.1/operations.html#operations-guide>
-- Fuel operations guide <http://docs.mirantis.com/openstack/fuel/fuel-6.0/operations.html#operations-guide>
+- Fuel Plugin Developers Guide <https://wiki.openstack.org/wiki/Fuel/Plugins>
A number of deployment specific parameters must be collected, those are:
@@ -84,27 +93,40 @@ A number of deployment specific parameters must be collected, those are:
4. Provider NTP addresses
+5. Network Topology you plan to Deploy (VLAN, GRE(VXLAN), FLAT)
+
+6. Linux Distro you intend to deploy.
+
+7. How many nodes and what roles you want to deploy (Controllers, Storage, Computes)
+
+8. Monitoring Options you want to deploy (Ceilometer, MongoDB).
+
+9. Other options not covered in the document are available in the links above
+
+
This information will be needed for the configuration procedures provided in this document.
Hardware requirements
=====================
-The following minimum hardware requirements must be met for the installation of Arno using Fuel:
+The following minimum hardware requirements must be met for the installation of Arno SR1 using Fuel:
+--------------------+------------------------------------------------------+
| **HW Aspect** | **Requirement** |
| | |
+--------------------+------------------------------------------------------+
-| **# of servers** | Minimum 5 (3 for non redundant deployment): |
+| **# of nodes** | Minimum 6 (3 for non redundant deployment): |
| | |
| | - 1 Fuel deployment master (may be virtualized) |
| | |
| | - 3(1) Controllers |
| | |
| | - 1 Compute |
-+--------------------+------------------------------------------------------+
-| **CPU** | Minimum 1 socket x86_AMD64 Ivy bridge 1.6 GHz |
| | |
+| | - 1 Ceilometer (VM option) |
++--------------------+------------------------------------------------------+
+| **CPU** | Minimum 1 socket x86_AMD64 with Virtualization |
+| | support |
+--------------------+------------------------------------------------------+
| **RAM** | Minimum 16GB/server (Depending on VNF work load) |
| | |
@@ -112,14 +134,30 @@ The following minimum hardware requirements must be met for the installation of
| **Disk** | Minimum 256GB 10kRPM spinning disks |
| | |
+--------------------+------------------------------------------------------+
-| **NICs** | - 2(1)x10GE Niantec for Private/Public (Redundant) |
+| **Networks** | 4 Tagged VLANs (PUBLIC, MGMT, STORAGE, PRIVATE) |
| | |
-| | - 2(1)x10GE Niantec for SAN (Redundant) |
-| | |
-| | - 2(1)x1GE for admin (PXE) and control (RabitMQ,etc) |
+| | 1 Un-Tagged VLAN for PXE Boot - ADMIN Network |
| | |
+| | note: These can be run on single NIC - or spread out |
+| | over other nics as your hardware supports |
+--------------------+------------------------------------------------------+
+Help with Hardware Requirements
+===============================
+
+
+Calculate hardware requirements:
+
+You can use the Fuel Hardware Calculator <https://www.mirantis.com/openstack-services/bom-calculator/> to calculate the hardware required for your OpenStack environment.
+
+When choosing the hardware on which you will deploy your OpenStack environment, you should think about:
+
+ - CPU -- Consider the number of virtual machines that you plan to deploy in your cloud environment and the CPU per virtual machine.
+ - Memory -- Depends on the amount of RAM assigned per virtual machine and the controller node.
+ - Storage -- Depends on the local drive space per virtual machine, remote volumes that can be attached to a virtual machine, and object storage.
+ - Networking -- Depends on the Choose Network Topology, the network bandwidth per virtual machine, and network storage.
+
+
Top of the rack (TOR) Configuration requirements
================================================
@@ -127,8 +165,7 @@ The switching infrastructure provides connectivity for the OPNFV infrastructure
The physical TOR switches are **not** automatically configured from the OPNFV reference platform. All the networks involved in the OPNFV infrastructure as well as the provider networks and the private tenant VLANs needs to be manually configured.
-
-Manual configuration of the Arno hardware platform should be carried out according to the Pharos specification http://artifacts.opnfv.org/arno.2015.1.0/docs/pharos-spec.arno.2015.1.0.pdf
+Manual configuration of the Arno SR1 hardware platform should be carried out according to the Pharos specification TODO-<insert link to Pharos ARNO SR1 Specification>
OPNFV Software installation and deployment
==========================================
@@ -137,35 +174,29 @@ This section describes the installation of the OPNFV installation server (Fuel m
Install Fuel master
-------------------
-1. Mount the built arno.2015.1.0.fuel.iso file as a boot device to the jump host server.
+1. Mount the Arno SR1 ISO file as a boot device to the jump host server.
2. Reboot the jump host to establish the Fuel server.
- The system now boots from the ISO image.
-3. Change the grub boot parameters
-
- - When the grub boot menu shows up - Press Tab to edit the kernel parameters
-
- - Change <showmenu=no> to <showmenu=yes>.
-
- - Change <netmask=255.255.255.0> to <netmask=255.255.0.0>.
+ - Select 'DVD Fuel Install (Static IP)'
- Press [Enter].
-4. Wait until screen Fuel setup is shown (Note: This can take up to 30 minutes).
+3. Wait until screen Fuel setup is shown (Note: This can take up to 30 minutes).
-5. Select PXE Setup and change the following fields to appropriate values (example below):
+4. Configure DHCP/Static IP information for your FUEL node - For example, ETH0 is 10.20.0.2/24 for FUEL booting and ETH1 is DHCP in your corporate/lab network.
- - Static Pool Start 10.20.0.3
+ - Configure eth1 or other network interfaces here as well (if you have them present on your FUEL server).
- - Static Pool End 10.20.0.254
+5. Select PXE Setup and change the following fields to appropriate values (example below):
- - DHCP Pool Start 10.20.128.3
+ - DHCP Pool Start 10.20.0.3
- - DHCP Pool End 10.20.128.254
+ - DHCP Pool End 10.20.0.254
-6. Select DNS & Hostname and change the following fields to appropriate values:
+ - DHCP Pool Gateway 10.20.0.2 (ip of Fuel node)
- Hostname <OPNFV Region name>-fuel
@@ -175,7 +206,7 @@ Install Fuel master
- Hostname to test DNS <Hostname to test DNS>
-7. Select Time Sync and change the following fields to appropriate values:
+6. Select Time Sync and change the following fields to appropriate values:
- NTP Server 1 <Customer NTP server 1>
@@ -183,67 +214,94 @@ Install Fuel master
- NTP Server 3 <Customer NTP server 3>
- **Note: This step is only to pass the network sanity test, the actual ntp parameters will be set with the pre-deploy script.**
-
-8. Start the installation.
+7. Start the installation.
- Select Quit Setup and press Save and Quit.
- Installation starts, wait until a screen with logon credentials is shown.
- Note: This will take about 15 minutes.
+
+Boot the Node Servers
+---------------------
+
+After the Fuel Master node has rebooted from the above step and is at the login prompt, you should boot the Node Servers (Your Compute/Control/Storage blades (nested or real)) with a PXE Booting Scheme so that the FUEL
+Master can pick them up for control.
+
+8. Enable PXE booting
+
+ - For every controller and compute server: enable PXE Booting as the first boot device in the BIOS boot order menu and hard disk as the second boot device in the same menu.
+
+9. Reboot all the control and compute blades.
+
+10. Wait for the availability of nodes showing up in the Fuel GUI.
+
+ - Wait until all nodes are displayed in top right corner of the Fuel GUI: <total number of server> TOTAL NODES and <total number of servers> UNALLOCATED NODES.
+
+
+
+Install ODL Plugin on FUEL node
+-------------------------------
+
+11. SSH to your FUEL node (e.g. root@10.20.0.2 pwd: r00tme)
+
+12. Verify the plugin exists at /opt/opnfv/opendaylight-0.6-0.6.1-1.noarch.rpm
+
+13. Install the plugin with the command
+
+ - "fuel plugins --install /opt/opnfv/opendaylight-0.6-0.6.1-1.noarch.rpm"
+
+ - Expected output: "Plugin opendaylight-0.6-0.6.1-1.noarch.rpm was successfully installed."
+
Create an OPNFV Environment
---------------------------
-9. Connect to Fuel with a browser towards port 8000
+14. Connect to Fuel WEB UI with a browser towards port http://<ip of fuel server>:8000 (login admin/admin)
-10. Create and name a new OpenStack environment, to be installed.
+15. Create and name a new OpenStack environment, to be installed.
-11. Select <Juno on Ubuntu> or <Juno on CentOS> as per your which in the "OpenStack Release" field.
+16. Select <Juno on Ubuntu> or <Juno on CentOS> as per your which in the "OpenStack Release" field and press "Next"
-12. Select deployment mode.
+17. Select compute virtulization method.
- - Select the Multi-node with HA.
+ - Select KVM as hypervisor (or one of your choosing) and press "Next"
-13. Select compute node mode.
+18. Select network mode.
- - Select KVM as hypervisor (unless you're not deploying bare metal or nested KVM/ESXI).
+ - Select Neutron with GRE segmentation and press "Next"
-14. Select network mode.
+ Note: this is the supportted method when using the ODL installation, other options will not work with the plugin and this Instruction Set.
- - Select Neutron with VLAN segmentation
+19. Select Storage Back-ends.
- ** Note: This will later be overridden to VXLAN by OpenDaylight.**
+ - Select "Yes, use Ceph" if you intend to deploy Ceph Backends and press "Next"
-15. Select Storage Back-ends.
- - Select Ceph for Cinder and default for glance.
+20. Select additional services you wish to install.
-16. Select additional services.
+ - Check option <Install Celiometer (OpenStack Telemetry)> and press "Next"
+ Note: If you use Ceilometer and you only have 5 nodes, you may have to run in a 3/1/1 (controller/ceilo-mongo/compute) configuration. Suggest adding more compute nodes
- - Check option <Install Celiometer (OpenStack Telemetry)>.
+21. Create the new environment.
-17. Create the new environment.
+ - Click "Create" Button
Configure the OPNFV environment
-------------------------------
-18. Enable PXE booting
+22. Enable PXE booting (if you haven't done this already)
- For every controller and compute server: enable PXE Booting as the first boot device in the BIOS boot order menu and hard disk as the second boot device in the same menu.
-19. Reboot all the control and compute blades.
-
-20. Wait for the availability of nodes showing up in the Fuel GUI.
+23. Wait for the availability of nodes showing up in the Fuel GUI.
- Wait until all nodes are displayed in top right corner of the Fuel GUI: <total number of server> TOTAL NODES and <total number of servers> UNALLOCATED NODES.
-21. Open the environment you previously created.
+24. Open the environment you previously created.
-22. Open the networks tab.
+25. Open the networks tab.
-23. Update the public network configuration.
+26. Update the Public network configuration.
Change the following fields to appropriate values:
@@ -253,57 +311,67 @@ Configure the OPNFV environment
- CIDR to <CIDR for Public IP Addresses>
- - Gateway to <Gateway for Public IP Addresses>
-
- Check VLAN tagging.
- Set appropriate VLAN id.
-24. Update the management network configuration.
+ - Gateway to <Gateway for Public IP Addresses>
+
+ - Set floating ip ranges
+
+
+27. Update the Storage Network Configuration
+
+ - Set CIDR to appropriate value (default 192.168.1.0/24)
- - Set CIDR to 172.16.255.128/25 (or as per your which).
+ - Set vlan to appropriate value (default 102)
+
+28. Update the Management network configuration.
+
+ - Set CIDR to appropriate value (default 192.168.0.0/24)
- Check VLAN tagging.
- - Set appropriate VLAN id.
+ - Set appropriate VLAN id. (default 101)
-25. Update the Neutron L2 configuration.
+29. Update the Private Network Information
- - Set VLAN ID range.
+ - Set CIDR to appropriate value (default 192.168.2.0/24
-26. Update the Neutron L3 configuration.
+ - Check and set VLAN tag appropriately (default 103)
+
+30. Update the Neutron L3 configuration.
- Set Internal network CIDR to an appropriate value
- Set Internal network gateway to an appropriate value
- - Set Floating IP ranges.
-
- - Set DNS Servers
+ - Set Guest OS DNS Server values appropriately
-27. Save Settings.
+31. Save Settings.
-28. Click "verify network" to check the network set-up consistency and connectivity
+32. Click on the "Nodes" Tab in the FUEL WEB UI.
-29. Update the storage configuration.
+33. Assign roles.
-30. Open the nodes tab.
+ - Click on "+Add Nodes" button
-31. Assign roles.
+ - Check "Controller" and the "Storage-Ceph OSD" in the Assign Roles Section
- - Check <Controller and Telemetry MongoDB>.
-
- - Check the three servers you want to be installed as Controllers in pane <Assign Role>.
+ - Check the 3 Nodes you want to act as Controllers from the bottom half of the screen
- Click <Apply Changes>.
- - Check <Compute>.
+ - Click on "+Add Nodes" button
+
+ - Check "Compute" in the Assign Roles Section
- - Check nodes to be installed as compute nodes in pane Assign Role.
+ - Check the Nodes that you want to act as Computes from the bottom half of the screen
- Click <Apply Changes>.
-32. Configure interfaces.
+
+34. Configure interfaces.
- Check Select <All> to select all nodes with Control, Telemetry, MongoDB and Compute node roles.
@@ -313,67 +381,84 @@ Configure the OPNFV environment
- Assign interfaces (bonded) for mgmt-, admin-, private-, public- and storage networks
-Deploy the OPNFV environment
-----------------------------
-**NOTE: Before the deployment is performed, the OPNFV pre-deploy script must be run**
+ - Note: Set MTU level to at least MTU=2090 (recommended MTU=2140 for SDN over VXLAN Usage) for each network
-35. Run the pre-deploy script.
- Log on as root to the Fuel node.
- Print Fuel environment Id (fuel env)
- #> id | status | name | mode | release_id | changes <id>| new | <CEE Region name>| ha_compact | 2 | <ite specific information>
+ - Click Apply
-36. Run the pre-deployment script (/opt/opnfv/pre-deploy.sh <id>)
- As prompted for-, set the DNS servers to go into /etc/resolv.conf.
- As prompted for-, set any Hosts file additions for controllers and compute nodes. You will be prompted for name, FQDN and IP for each entry. Press return when prompted for a name when you have completed your input.
- As prompted for-, set NTP upstream configuration for controllers. You will be prompted for a NTP server each entry. Press return when prompted for a NTP server when you have completed your input.
+Enable ODL
+----------
-37. Deploy the environment.
- In the Fuel GUI, click Deploy Changes.
+35. In the FUEL UI of your Enviornment, click the "Settings" Tab
-Installation health-check
-=========================
+ - Enable OpenStack debug logging (in the Common Section) - optional
+
+ - Check the OpenDaylight Lithium Plugin Section
+
+ - Check to enable VXLAN
+
+ - Modify VNI and Port Range if desired
+
+ - Click "Save Settings" at the bottom to Save.
+
+
+OPTIONAL - Set Local Mirror Repos
+---------------------------------
+
+The following steps can be executed if you are in an environment with no connection to the internet. The Fuel server delivers a local repo that can be used for
+installation / deployment of openstack.
+
+36. In the Fuel UI of your Environment, click the Settings Tab and scroll to the Repositories Section.
+
+ - Replace the URI values for the "Name" values outlined below:
+
+ - "ubuntu" URI="deb http://<ip-of-fuel-server>:8080/ubuntu-part trusty main"
+ - "ubuntu-security" URI="deb http://<ip-of-fuel-server>:8080/ubuntu-part trusty main"
+ - "ubuntu-updates" URI="deb http://<ip-of-fuel-server>:8080/ubuntu-part trusty main"
+ - "mos-updates" URI="deb http://<ip-of-fuel-server>:8080/mos-ubuntu mos6.1-updates main restricted"
+ - "mos-security" URI="deb http://<ip-of-fuel-server>:8080/mos-ubuntu mos6.1-security main restricted"
+ - "mos-holdback" URI="deb http://<ip-of-fuel-server>:8080/mos-ubuntu mos6.1-holdback main restricted"
-38. Perform system health-check
-Now that the OPNFV environment has been created, and before the post installation configurations is started, perform a system health check from the Fuel GUI:
+ - Click "Save Settings" at the bottom to Save your changes
-- Select the “Health check” TAB.
-- Select all test cases
-- And click “Run tests”
+Verify Networks
+---------------
-All test cases should pass.
+Its is important that Verify Networks be done as it will ensure that you can not only communicate on the networks you have setup, but can fetch the packages needed for a succesful
+deployment.
+
+37. From the FUEL UI in your Environment, Select the Networks Tab
+
+ - At the bottom of the page, Select "Verify Networks"
+
+ - Continue to fix your topology (physical switch, etc) until the "Verification Succeeded - Your network is configured correctly" message is shown
+
+Deploy Your Environment
+-----------------------
+
+38. Deploy the environment.
+ In the Fuel GUI, click Deploy Changes.
+
+ - Wait until your Environment is deployed and the Horizon URI to connect is displayed in the FUEL GUI for your Environment
+
+Installation health-check
+=========================
-Post installation and deployment actions
-========================================
+39. Perform system health-check
-Activate OpenDaylight and VXLAN network segmentation
-----------------------------------------------------
-** Note: With the current release, the OpenDaylight option is experimental!**
-** Note: With ODL enabled, L3 features will no longer be available **
-The activation of ODL within a deployed Fuel system is a two part process.
+ - Click the "Health Check" tab inside your Environment in the FUEL Web UI
-The first part involves staging the ODL container, i.e. starting the ODL container itself.
-The second part involves a reconfiguration of the underlying networking components to enable VXLAN tunneling.
-The staging of the ODL container works without manual intervention except for editing with a valid DNS IP for your system
+ - Check "Select All" and Click "Run Tests"
-For the second part - the reconfiguration of the networking, the script <config_net_odl.sh> is provided as a baseline example to show what needs to be configured for your system system setup. Since there are many variants of valid networking topologies, this script will not be 100% correct in all deployment cases and some manual script modifications maybe required.
+ Note: Live-Migraition test will fail (Bug in ODL currently), you can skip this test in the list if you choose to not see the error message, simply uncheck it in the list
-39. Enable the ODL controller
-ssh to any of the OpenStack controllers and issue the following command as root user: </opt/opnfv/odl/stage_odl.sh>
-This script will start ODL, load modules and make the Controller ready for use.
-** Note: - The script should only be ran on a single controller (even if the system is setup in a High Availability OpenStack mode). **
+ - Allow tests to run and investigate results where appropriate
40. Verify that the OpenDaylight GUI is accessible
-Point your browser to the following URL: <http://{ODL-CONTROLLER-IP}:8181/dlux/index.html> and login:
-Username: Admin
-Password: Admin
-41. Reconfiguring the networking and switch to VXLAN network segmentation
-ssh to all of the nodes and issue the following command </opt/opnfv/odl/config_net_odl.sh> in the order specified below:
-a. All compute nodes
-b. All OpenStack controller nodes except the one running the ODL-controller
-c. The OpenStack controller also running the ODL controller
+Point your browser to the following URL: http://{Controller-VIP}:8181/index.html> and login:
-This script will reconfigure the networking from VLAN Segregation to VXLAN mode.
+ - Username: admin
+ - Password: admin
References
==========
@@ -402,11 +487,11 @@ Fuel
`Fuel documentation <https://wiki.openstack.org/wiki/Fuel>`_
-:Authors: Jonas Bjurel (Ericsson AB)
-:Version: 1.0.0
+:Authors: Daniel Smith (Ericsson AB)
+:Version: 1.1.0
**Documentation tracking**
Revision: _sha1_
-Build date: _date_
+Build date: _date
diff --git a/fuel/docs/src/release-notes.rst b/fuel/docs/src/release-notes.rst
index 220e80b8a..435789767 100644
--- a/fuel/docs/src/release-notes.rst
+++ b/fuel/docs/src/release-notes.rst
@@ -1,6 +1,6 @@
-=====================================================================================
-OPNFV Release Note for the Arno release of OPNFV when using Fuel as a deployment tool
-=====================================================================================
+=========================================================================================
+OPNFV Release Note for the Arno SR1 release of OPNFV when using Fuel as a deployment tool
+=========================================================================================
.. contents:: Table of Contents
@@ -10,14 +10,14 @@ OPNFV Release Note for the Arno release of OPNFV when using Fuel as a deployment
Abstract
========
-This document compiles the release notes for the Arno release of OPNFV when using Fuel as a deployment tool.
+This document compiles the release notes for the Arno SR1 release of OPNFV when using Fuel as a deployment tool.
License
=======
-Arno release with the Fuel deployment tool Docs (c) by Jonas Bjurel (Ericsson AB)
+Arno SR1 release with the Fuel deployment tool Docs (c) by Jonas Bjurel (Ericsson AB)
-Arno release with the Fuel deployment tool Docs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
+Arno SR1 release with the Fuel deployment tool Docs are licensed under a Creative Commons Attribution 4.0 International License. You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
Version history
===============
@@ -29,6 +29,9 @@ Version history
| 2015-06-03 | 1.0.0 | Jonas Bjurel | Arno SR0 release |
| | | | |
+--------------------+--------------------+--------------------+--------------------+
+| 2015-09-28 | 1.1.3 | Jonas Bjurel | Arno SR1 release |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
Important notes
===============
@@ -40,7 +43,7 @@ Carefully follow the installation-instructions and pay special attention to the
Summary
=======
-For Arno, the typical use of Fuel as an OpenStack installer is supplemented with OPNFV unique components such as `OpenDaylight <http://www.opendaylight.org/software>`_ version Helium as well as OPNFV-unique configurations.
+For Arno SR1, the typical use of Fuel as an OpenStack installer is supplemented with OPNFV unique components such as `OpenDaylight <http://www.opendaylight.org/software>`_ version Helium as well as OPNFV-unique configurations.
This Arno artefact provides Fuel as the deployment stage tool in the OPNFV CI pipeline including:
@@ -60,16 +63,16 @@ Release Data
| **Project** | genesis/bgs |
| | |
+--------------------------------------+--------------------------------------+
-| **Repo/tag** | genesis/arno.2015.1.0 |
+| **Repo/tag** | genesis/arno.2015.2.0 |
| | |
+--------------------------------------+--------------------------------------+
-| **Release designation** | Arno Base Service release 0 (SR0) |
+| **Release designation** | Arno Base Service release 1 (SR1) |
| | |
+--------------------------------------+--------------------------------------+
-| **Release date** | 2015-06-04 |
+| **Release date** | 2015-10-01 |
| | |
+--------------------------------------+--------------------------------------+
-| **Purpose of the delivery** | OPNFV Arno Base SR0 release |
+| **Purpose of the delivery** | OPNFV Arno Base SR1 release |
| | |
+--------------------------------------+--------------------------------------+
@@ -78,15 +81,15 @@ Version change
Module version changes
~~~~~~~~~~~~~~~~~~~~~~
-This is the first tracked release of genesis/fuel. It is based on following upstream versions:
+This is the second tracked release of genesis/fuel. It is based on following upstream versions:
-- Fuel 6.0.1
+- Fuel 6.1.0
- OpenStack Juno release
-- OpenDaylight Helium-SR3
+- OpenDaylight Litium release
Document version changes
~~~~~~~~~~~~~~~~~~~~~~~~
-This is the first tracked version of the fuel installer for OPNFV. It comes with the following documentation:
+This is the second tracked version of the fuel installer for OPNFV. It comes with the following documentation:
- OPNFV Installation instructions for Arno with Fuel as deployment tool
- OPNFV Release Notes for Arno use of Fuel as deployment tool
@@ -102,10 +105,10 @@ Feature additions
| **JIRA REFERENCE** | **SLOGAN** |
| | |
+--------------------------------------+--------------------------------------+
-| JIRA:- | Baselining Fuel 6.0.1 for OPNFV |
+| JIRA: FUEL-4 | Baselining Fuel 6.0.1 for OPNFV |
| | |
+--------------------------------------+--------------------------------------+
-| JIRA:- | Integration of OpenDaylight |
+| JIRA: FUEL-17 | Integration of OpenDaylight |
| | |
+--------------------------------------+--------------------------------------+
@@ -118,8 +121,17 @@ Bug corrections
| **JIRA REFERENCE** | **SLOGAN** |
| | |
+--------------------------------------+--------------------------------------+
+| JIRA: BGS-57 | The OpenDaylight Helium release is |
+| | not fully functional and the |
+| | resulting Fuel integration is not |
+| | able to cope with the deficiancies. |
+| | It is therefore not recommended to |
+| | to enable this option. |
+| | A functional integration of ODL |
+| | version: Lithium is expected to be |
+| | available in an upcomming service |
+| | release. |
| | |
-| - | - |
+--------------------------------------+--------------------------------------+
Deliverables
@@ -127,13 +139,13 @@ Deliverables
Software deliverables
~~~~~~~~~~~~~~~~~~~~~
-Fuel-based installer iso file <arno.2015.1.0.fuel.iso>
+Fuel-based installer iso file <arno.2015.2.0.fuel.iso>
Documentation deliverables
~~~~~~~~~~~~~~~~~~~~~~~~~~
-- OPNFV Installation instructions for Arno release with the Fuel deployment tool - ver. 1.0.0
-- OPNFV Build instructions for Arno release with the Fuel deployment tool - ver. 1.0.0
-- OPNFV Release Note for Arno release with the Fuel deployment tool - ver. 1.0.0 (this document)
+- OPNFV Installation instructions for Arno release with the Fuel deployment tool - ver. 1.1.0
+- OPNFV Build instructions for Arno release with the Fuel deployment tool - ver. 1.1.0
+- OPNFV Release Note for Arno release with the Fuel deployment tool - ver. 1.1.3 (this document)
Known Limitations, Issues and Workarounds
=========================================
@@ -159,63 +171,32 @@ Known issues
| **JIRA REFERENCE** | **SLOGAN** |
| | |
+--------------------------------------+--------------------------------------+
-| JIRA: BGS-57 | The OpenDaylight Helium release is |
-| | not fully functional and the |
-| | resulting Fuel integration is not |
-| | able to cope with the deficiancies. |
-| | It is therefore not recommended to |
-| | to enable this option. |
-| | A functional integration of ODL |
-| | version: Lithium is expected to be |
-| | available in an upcomming service |
-| | release. |
-| | |
+| JIRA: FUEL-43 | VMs not accessible through SSH due |
+| | to VXLAN 50 Byte overhead and lack |
+| | of proper MTU value setting on |
+| | virtual ethernet devices |
++--------------------------------------+--------------------------------------+
+| JIRA: FUEL-44 | Centos 6.5 option has not been |
+| | enough verified |
+--------------------------------------+--------------------------------------+
+
Workarounds
-----------
-Current workaround for the JIRA: BGS-57 is not to enable OpenDaylight networking - see installation instructions.
+See JIRA: `FUEL-43 <https://jira.opnfv.org/browse/FUEL-43>`
Test Result
===========
-
-Arno release with the Fuel deployment tool has undergone QA test runs with the following results:
-
-+--------------------------------------+--------------------------------------+
-| **TEST-SUITE** | **Results:** |
-| | |
-+--------------------------------------+--------------------------------------+
-| Tempest test suite 1: | 27 out of 105 testcases fails |
-| | see note (1) and note (2) |
-+--------------------------------------+--------------------------------------+
-| Tempest test suite 2: | 26 out of 100 testcases fails |
-| | see note (1) and note (2) |
-+--------------------------------------+--------------------------------------+
-| Tempest test suite 3: | 14 out of 106 testcases fails |
-| | see note (1) and note (2) |
-+--------------------------------------+--------------------------------------+
-| Rally test suite suie 1: | 10 out of 18 testcases fails |
-| | see note (1) and note (3) |
-+--------------------------------------+--------------------------------------+
-| ODL test suite suie | 7 out of 7 testcases fails |
-| | see note (1) and note (4) |
-+--------------------------------------+--------------------------------------+
-| vPING | OK |
-| | see note (1) |
-+--------------------------------------+--------------------------------------+
-
-** - Note (1): Have been run with ODL controller active but not with integrated ODL networking VXLAN segmentation activated **
-** - Note (2): see https://wiki.opnfv.org/r1_tempest **
-** - Note (3): see https://wiki.opnfv.org/r1_rally_bench **
-** - Note (4): see https://wiki.opnfv.org/r1_odl_suite **
+Arno SR1 release with the Fuel deployment tool has undergone QA test runs with the following results:
+https://wiki.opnfv.org/arno_sr1_result_page?rev=1443626728
References
==========
For more information on the OPNFV Arno release, please see http://wiki.opnfv.org/releases/arno.
:Authors: Jonas Bjurel (Ericsson)
-:Version: 1.0.0
+:Version: 1.1.3
**Documentation tracking**
diff --git a/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_ha.yaml b/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_ha.yaml
index 9e7042732..25de4b98e 100644
--- a/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_ha.yaml
+++ b/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_ha.yaml
@@ -205,7 +205,7 @@ network:
gateway: 172.30.9.1
ip_ranges:
- - 172.30.9.70
- - 172.30.9.70
+ - 172.30.9.79
meta:
assign_vip: true
cidr: 172.16.0.0/24
diff --git a/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_no-ha.yaml b/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_no-ha.yaml
index fd0e7b3e8..3abbdce93 100644
--- a/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_no-ha.yaml
+++ b/fuel/prototypes/auto-deploy/configs/lf_pod1/dea_no-ha.yaml
@@ -205,7 +205,7 @@ network:
gateway: 172.30.9.1
ip_ranges:
- - 172.30.9.70
- - 172.30.9.70
+ - 172.30.9.79
meta:
assign_vip: true
cidr: 172.16.0.0/24
diff --git a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute4 b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute4
index 099c21e68..ad5d4d1c8 100644
--- a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute4
+++ b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute4
@@ -9,6 +9,7 @@
<boot dev='network'/>
<boot dev='hd'/>
<bootmenu enable='yes'/>
+ <bios rebootTimeout='30000'/>
</os>
<features>
<acpi/>
diff --git a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute5 b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute5
index 76569e0ca..39059066c 100644
--- a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute5
+++ b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/compute5
@@ -8,6 +8,7 @@
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='network'/>
<boot dev='hd'/>
+ <bios rebootTimeout='30000'/>
</os>
<features>
<acpi/>
diff --git a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/controller1 b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/controller1
index 715d4c4b4..ca1bd3b05 100644
--- a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/controller1
+++ b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/controller1
@@ -8,6 +8,7 @@
<type arch='x86_64' machine='pc-1.0'>hvm</type>
<boot dev='network'/>
<boot dev='hd'/>
+ <bios rebootTimeout='30000'/>
</os>
<features>
<acpi/>
diff --git a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/fuel-master b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/fuel-master
index 9ff801706..d2a78411c 100644
--- a/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/fuel-master
+++ b/fuel/prototypes/auto-deploy/examples/libvirt/conf/vms/fuel-master
@@ -98,6 +98,5 @@
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
</devices>
- <seclabel type='dynamic' model='apparmor' relabel='yes'/>
</domain>