From 02831889deee512a5a7e06beffe973532a5e4f5d Mon Sep 17 00:00:00 2001
From: Dan Radez <dradez@redhat.com>
Date: Fri, 14 Aug 2015 09:49:45 -0400
Subject: Adding initial build scripts based on RDO manager

Change-Id: Ib5f8ed4dfcaa42bcefcf2a7914c201a887beeacd
Signed-off-by: Dan Radez <dradez@redhat.com>
---
 build/Makefile   | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 build/cache.mk   |  78 +++++++++++++++++++++++++++++++
 build/config.mk  |   0
 build/instack.sh |  96 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 313 insertions(+)
 create mode 100644 build/Makefile
 create mode 100644 build/cache.mk
 create mode 100644 build/config.mk
 create mode 100755 build/instack.sh

(limited to 'build')

diff --git a/build/Makefile b/build/Makefile
new file mode 100644
index 00000000..c33c1755
--- /dev/null
+++ b/build/Makefile
@@ -0,0 +1,139 @@
+##############################################################################
+# Copyright (c) 2015 Ericsson AB and others.
+# stefan.k.berg@ericsson.com
+# jonas.bjurel@ericsson.com
+# dradez@redhat.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
+############################################################################
+# BEGIN of variables to customize
+#
+#Input args
+export UNIT_TEST = FALSE
+export INTERACTIVE = TRUE
+export CENTDNLD = http://mirrors.cat.pdx.edu/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
+export ISOSRC = file:$(shell pwd)/CentOS-7-x86_64-DVD-1503-01.iso
+export ISOCACHE = $(shell pwd)/$(shell basename $(ISOSRC))
+export PRODNO = "OPNFV_BGS"
+export REVSTATE = "P0000"
+export NEWISO = $(shell pwd)/release/OPNFV-CentOS-7-x86_64-${REVSTATE}.iso
+export GENESISRPM = $(shell pwd)/x86_64/opnfv-genesis-0.1-1.x86_64.rpm
+
+# Note! Invoke with "make REVSTATE=RXXXX all" to make release build!
+# Invoke with ICOCACHE=/full/path/to/iso if cached ISO is in non-standard location.
+
+#Build variables
+export BUILD_BASE := $(shell pwd)
+export CACHE_DIR := $(BUILD_BASE)/cache
+export VERSION_FILE := $(BUILD_BASE)/.versions
+export TOPDIR := $(shell pwd)
+
+CENTDIR := $(TOPDIR)/centiso
+#
+# END of variables to customize
+#############################################################################
+
+SUBCLEAN = $(addsuffix .clean,$(SUBDIRS))
+
+
+.PHONY: all
+all: iso
+	@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)
+
+############################################################################
+# BEGIN of Include definitions
+#
+include config.mk
+include cache.mk
+#
+# END Include definitions
+#############################################################################
+
+$(ISOCACHE):
+	test -s $(ISOCACHE) || { wget -nv $(CENTDNLD) ; }
+
+.PHONY: mount-centiso umount-centiso
+mount-centiso: $(ISOCACHE)
+	@echo "Mounting CentOS ISO in $(CENTDIR)"
+	@mkdir -p $(CENTDIR)
+	@fuseiso $(ISOCACHE) $(CENTDIR)
+
+umount-centiso:
+	@set +e
+	@echo "Unmounting CentOS ISO from $(CENTDIR)"
+	@fusermount -u $(CENTDIR)
+	@rmdir $(CENTDIR)
+	@set -e
+
+.PHONY: build-clean $(SUBCLEAN)
+build-clean: $(SUBCLEAN)
+	@rm -Rf centos
+	@rm -Rf release
+	@rm -Rf newiso
+	@rm -f $(NEWISO)
+
+.PHONY: clean $(SUBCLEAN)
+clean:  clean-cache $(SUBCLEAN)
+	@rm -f *.iso
+	@rm -Rf release
+	@rm -Rf newiso
+	@rm -f $(NEWISO)
+	@rm -f $(BUILD_BASE)/.versions
+
+$(SUBCLEAN): %.clean:
+	$(MAKE) -C $* -f Makefile clean
+
+.PHONY: rpm-clean
+rpm-clean:
+	rpmbuild --clean opnfv-genesis.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)'
+
+.PHONY: rpm
+rpm:
+	pushd ../../ && git archive --format=tar --prefix=opnfv-genesis-0.1/ HEAD | gzip > foreman/build/opnfv-genesis.tar.gz
+	rpmbuild -ba opnfv-genesis.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' 
+	@make rpm-clean
+
+.PHONY: instack
+instack: instack.qcow2
+
+instack.qcow2:
+	@./instack.sh
+
+.PHONY: instack-clean
+instack-clean:
+	@virsh destroy instack 2> /dev/null || echo -n ''
+	@virsh undefine instack 2> /dev/null || echo -n ''
+	@virsh destroy baremetal_0 2> /dev/null || echo -n ''
+	@virsh undefine baremetal_0 2> /dev/null || echo -n ''
+	@virsh destroy baremetal_1 2> /dev/null || echo -n ''
+	@virsh undefine baremetal_1 2> /dev/null || echo -n ''
+	rm -f instack.xml
+	rm -f instack.qcow2
+	rm -rf stack
+
+
+# Todo: Make things smarter - we shouldn't need to clean everything
+# betwen make invocations.
+.PHONY: iso
+iso:	build-clean $(ISOCACHE) instack.qcow2 rpm
+	@make mount-centiso
+	@mkdir centos release
+	cp -r $(CENTDIR)/* centos
+	@make umount-centiso
+	# modify the installer iso's contents
+	@cp -f isolinux.cfg centos/isolinux/isolinux.cfg
+	@cp $(GENESISRPM) centos/Packages
+	# regenerate yum repo data
+	@echo "Generating new yum metadata"
+	createrepo --update -g ../c7-opnfv-x86_64-comps.xml centos
+	# build the iso
+	@echo "Building OPNFV iso"
+	mkisofs -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -V "OPNFV CentOS 7 x86_64" -R -J -v -T -o $(NEWISO) centos
+	@printf "\n\nISO is built at $(NEWISO)\n\n"
diff --git a/build/cache.mk b/build/cache.mk
new file mode 100644
index 00000000..fdfd0034
--- /dev/null
+++ b/build/cache.mk
@@ -0,0 +1,78 @@
+##############################################################################
+# 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
+CACHEVALIDATE := $(addsuffix .validate,$(SUBDIRS))
+CACHECLEAN := $(addsuffix .clean,$(CACHEFILES) $(CACHEDIRS))
+
+############################################################################
+# BEGIN of variables to customize
+#
+CACHEFILES += .versions
+CACHEFILES += $(shell basename $(ISOSRC))
+#
+# END of variables to customize
+############################################################################
+
+.PHONY: prepare-cache
+prepare-cache: make-cache-dir $(CACHEDIRS) $(CACHEFILES)
+
+.PHONY: make-cache-dir
+make-cache-dir:
+	@rm -rf ${CACHE_DIR}
+	@mkdir ${CACHE_DIR}
+
+.PHONY: clean-cache
+clean-cache: $(CACHECLEAN)
+	@rm -rf ${CACHE_DIR}
+
+.PHONY: $(CACHEDIRS)
+$(CACHEDIRS):
+	@mkdir -p $(dir $(CACHE_DIR)/$@)
+	@if [ ! -d $(BUILD_BASE)/$@ ]; then\
+	   mkdir -p $(BUILD_BASE)/$@;\
+	fi
+	@ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@
+
+.PHONY: $(CACHEFILES)
+$(CACHEFILES):
+	@mkdir -p $(dir $(CACHE_DIR)/$@)
+	@if [ ! -d $(dir $(BUILD_BASE)/$@) ]; then\
+	   mkdir -p $(dir $(BUILD_BASE)/$@);\
+	fi
+
+	@if [ ! -f $(BUILD_BASE)/$@ ]; then\
+	   echo " " > $(BUILD_BASE)/$@;\
+ 	   ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@;\
+	   rm -f $(BUILD_BASE)/$@;\
+	else\
+	   ln -s $(BUILD_BASE)/$@ $(CACHE_DIR)/$@;\
+	fi
+
+.PHONY: validate-cache
+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\
+	   echo "Cache does not match current cache.mk definition, cache must be rebuilt";\
+	   exit 1;\
+	fi;
+
+.PHONY: $(CACHEVALIDATE)
+$(CACHEVALIDATE): %.validate:
+	@echo VALIDATE $(CACHEVALIDATE)
+	$(MAKE) -C $* -f Makefile validate-cache
+
+.PHONY: $(CACHECLEAN)
+$(CACHECLEAN): %.clean:
+	rm -rf ${CACHE_DIR}/$*
diff --git a/build/config.mk b/build/config.mk
new file mode 100644
index 00000000..e69de29b
diff --git a/build/instack.sh b/build/instack.sh
new file mode 100755
index 00000000..6ead347c
--- /dev/null
+++ b/build/instack.sh
@@ -0,0 +1,96 @@
+#!/bin/sh 
+set -e
+if ! id stack > /dev/null; then
+    useradd stack;
+    echo 'stack ALL=(root) NOPASSWD:ALL' | sudo tee -a /etc/sudoers.d/stack
+    echo 'Defaults:stack !requiretty' | sudo tee -a /etc/sudoers.d/stack
+    chmod 0440 /etc/sudoers.d/stack
+    echo 'Added user stack'
+fi
+
+if ! rpm -q epel-release > /dev/null; then
+    yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
+fi
+
+if ! rpm -q rdo-release > /dev/null; then
+    yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm
+fi
+
+if ! [ -a /etc/yum.repos.d/rdo-management-trunk.repo ]; then
+    curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo
+fi
+
+if ! rpm -q instack-undercloud > /dev/null; then
+    yum install -y instack-undercloud
+fi
+
+sudo -u stack -- sh -c 'cd; instack-virt-setup'
+#if ! ovs-vsctl show | grep brbm; then
+#    ovs-vsctl add-port brbm em2
+#fi
+cp /home/stack/.ssh/id_rsa* /root/.ssh/
+UNDERCLOUD=$(virsh net-dhcp-leases default | grep instack | awk '{print $5}' | awk -F '/' '{print $1}')
+
+ssh -T -o "StrictHostKeyChecking no" root@$UNDERCLOUD <<EOI
+if ! rpm -q rdo-release > /dev/null; then
+    yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm
+fi
+
+if ! [ -a /etc/yum.repos.d/rdo-management-trunk.repo ]; then
+    curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo
+fi
+
+yum install -y python-rdomanager-oscplugin
+cp /root/.ssh/authorized_keys /home/stack/.ssh/authorized_keys
+chown stack:stack /home/stack/.ssh/authorized_keys
+EOI
+
+ssh -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "openstack undercloud install"
+#ssh -T -o "StrictHostKeyChecking no" stack@$UNDERCLOUD <<EOI
+#echo "Running undercloud install"
+#openstack undercloud install
+#dontexit=\$(openstack undercloud install)
+#openstack undercloud install && sudo halt -p
+#EOI
+echo "Shuttind down instack to take snapshop"
+virsh shutdown instack
+
+echo "Waiting for instack VM to shutdown"
+while virsh list | grep instack; do
+    echo -n "."
+    sleep 5
+done
+
+echo "Copying instack disk image and starting instack VM."
+cp -f /var/lib/libvirt/images/instack.qcow2 .
+virsh dumpxml instack > instack.xml
+virsh vol-dumpxml instack.qcow2 --pool default > instack.qcow2.xml
+virsh start instack
+
+echo "Waiting for instack VM to start"
+while ! ping -c 1 $UNDERCLOUD > /dev/null; do
+    echo -n "."
+    sleep 5
+done
+while ! ssh -T -o "StrictHostKeyChecking no" root@$UNDERCLOUD "echo ''" > /dev/null; do
+    echo -n "."
+    sleep 3
+done
+
+echo "Copying CentOS Cache to instack VM"
+ssh -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "mkdir .cache"
+scp -r /home/stack/.cache/image-create/CentOS-7-x86_64-GenericCloud* stack@$UNDERCLOUD:.cache/
+
+echo "Building overcloud images"
+ssh -tt -o "StrictHostKeyChecking no" stack@$UNDERCLOUD "openstack overcloud image build --all"
+
+echo "Copying overcloud images"
+mkdir stack
+scp stack@$UNDERCLOUD:deploy-ramdisk-ironic.initramfs stack
+scp stack@$UNDERCLOUD:deploy-ramdisk-ironic.kernel stack
+scp stack@$UNDERCLOUD:discovery-ramdisk.initramfs stack
+scp stack@$UNDERCLOUD:discovery-ramdisk.kernel stack
+scp stack@$UNDERCLOUD:fedora-user.qcow2 stack
+scp stack@$UNDERCLOUD:overcloud-full.initrd stack
+scp stack@$UNDERCLOUD:overcloud-full.qcow2 stack
+scp stack@$UNDERCLOUD:overcloud-full.vmlinuz stack
-- 
cgit