From f937a8bd0c2244b1011ea06865092539c45c9679 Mon Sep 17 00:00:00 2001
From: garciadeblas <gerardo.garciadeblas@telefonica.com>
Date: Thu, 21 Jul 2016 14:53:32 +0200
Subject: [PATCH] RO scripts added. Also possible now to create privileged
 containers  - SETTINGS files in template and riftware were modified to allow
 option for privileged container  - New function in common/container to create
 privileged containers  - RO SETTINGS and start_build skeleton were created

Change-Id: I80143214708e65c62c899efecd30d4b84fb715ce
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
---
 jenkins/RO/SETTINGS       | 28 ++++++++++++++++++++
 jenkins/RO/start_build    | 54 +++++++++++++++++++++++++++++++++++++++
 jenkins/common/container  | 13 ++++++++--
 jenkins/host/start_build  | 10 +++++---
 jenkins/riftware/SETTINGS |  4 ++-
 jenkins/template/SETTINGS | 15 ++++++++---
 6 files changed, 115 insertions(+), 9 deletions(-)
 create mode 100644 jenkins/RO/SETTINGS
 create mode 100755 jenkins/RO/start_build

diff --git a/jenkins/RO/SETTINGS b/jenkins/RO/SETTINGS
new file mode 100644
index 00000000..50c3e3fd
--- /dev/null
+++ b/jenkins/RO/SETTINGS
@@ -0,0 +1,28 @@
+#   Copyright 2016 RIFT.IO Inc
+#
+#   Licensed 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.
+#
+# sample SETTINGS file
+#
+# 24 June 2016 -- Jeremy Mordkoff -- Genesis 
+#
+# this variable holds the name of the container image needed to build or run this product
+export OSM_BASE_IMAGE=ubuntu:14.04
+#
+# this variable holds the name of the container to be used to build a package
+# if this container already exists, the build process can skip the container build
+export OSM_BUILD_CONTAINER=RO
+#
+# this variable holds the name of the container to be used to run a package
+# if this container already exists, the run processes can skip the container build
+export OSM_RUNTIME_CONTAINER=RO
diff --git a/jenkins/RO/start_build b/jenkins/RO/start_build
new file mode 100755
index 00000000..92b29944
--- /dev/null
+++ b/jenkins/RO/start_build
@@ -0,0 +1,54 @@
+#!/bin/bash
+#   Copyright 2016 RIFT.IO Inc
+#
+#   Licensed 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.
+# 
+# TEMPLATE script to start a build. This is run inside a container
+#
+# 6 July 2016 -- Jeremy.Mordkoff@riftio.com -- adapted from the riftware version
+# 
+
+HERE=$(realpath $(dirname $0))
+OSM_JENKINS=$(dirname $HERE)
+. $OSM_JENKINS/common/all_funcs
+
+# SET YOU MDG repository name here
+export OSM_MDG=RO
+OSM_load_config
+
+
+# Here is an example for how to handle an incremental build
+if [ -d $OSM_MDG ]; then
+	INFO "reusing existing workspace"
+	cd $OSM_MDG
+	git pull 
+else
+	INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG"
+	git clone $OSM_GIT_URL/$OSM_MDG
+	cd $OSM_MDG
+fi
+INFO "starting build"
+
+### for start_build
+### put your commands here to
+### build, test and produce coverage reports
+
+##CODE HERE
+touch compiled
+
+RC=0
+
+INFO "done, RC=$RC"
+exit $RC
+
+
diff --git a/jenkins/common/container b/jenkins/common/container
index 89db8bab..3c09d7f2 100644
--- a/jenkins/common/container
+++ b/jenkins/common/container
@@ -37,13 +37,22 @@ create_container() {
 	fi
 	INFO "creating container $2 using image $1"
 	DEBUG "lxc launch $1 $2"
-	sudo lxc launch "$1" "$2"
+	lxc launch "$1" "$2"
+}
+
+create_privileged_container() {
+	if [ $# -ne 2 ]; then
+		FATAL "args are image container"
+	fi
+	INFO "creating container $2 using image $1"
+	DEBUG "lxc launch $1 $2"
+	lxc launch "$1" "$2" -c security.privileged=true
 }
 
 container_exec() { 
 	container="$1"
 	shift
-	DEBUG "exec in $1 \"$*\""
+	DEBUG "exec in $container \"$*\""
 	lxc exec "$container" -- $*
 }
 
diff --git a/jenkins/host/start_build b/jenkins/host/start_build
index d6fbea8d..06ce3a6e 100755
--- a/jenkins/host/start_build
+++ b/jenkins/host/start_build
@@ -28,21 +28,25 @@ export OSM_MDG=$1
 OSM_load_config
 
 if ! container_exists $OSM_BUILD_CONTAINER; then
-	create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER
+	if [[ "$OSM_BUILD_CONTAINER_PRIVILEGED" == yes ]]; then
+		create_privileged_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER
+	else
+		create_container $OSM_BASE_IMAGE $OSM_BUILD_CONTAINER
+	fi
 	wait_container_up $OSM_BUILD_CONTAINER
 	RE="fedora|fc[0-9]"
 	if [[ $OSM_BASE_IMAGE =~ $RE ]]; then
 		container_exec $OSM_BUILD_CONTAINER yum -y install git
 	else
-		container_exec $OSM_BUILD_CONTAINER apt install git
+		container_exec $OSM_BUILD_CONTAINER apt -y install git realpath
 	fi
 	container_exec $OSM_BUILD_CONTAINER git clone ${OSM_GIT_URL}/devops
 else
 	container_exec $OSM_BUILD_CONTAINER git -C devops pull
 fi
 
-
 container_exec $OSM_BUILD_CONTAINER ./devops/jenkins/$OSM_MDG/start_build
 RC=$?
 INFO "$OSM_MDG build complete. Return code was $RC"
 exit $RC
+
diff --git a/jenkins/riftware/SETTINGS b/jenkins/riftware/SETTINGS
index d1af4176..50f9982d 100644
--- a/jenkins/riftware/SETTINGS
+++ b/jenkins/riftware/SETTINGS
@@ -17,6 +17,8 @@
 # 24 June 2016 -- Jeremy Mordkoff -- Genesis
 #
 # see ../template/SETTINGS for descriptions
-export OSM_BASE_IMAGE=fc20
+export OSM_BASE_IMAGE=fedora20
 export OSM_BUILD_CONTAINER=rift-build
+export OSM_BUILD_CONTAINER_PRIVILEGED=yes
 export OSM_RUNTIME_CONTAINER=rift-runtime
+export OSM_RUNTIME_CONTAINER_PRIVILEGED=yes
diff --git a/jenkins/template/SETTINGS b/jenkins/template/SETTINGS
index 09cae6dd..86202eba 100644
--- a/jenkins/template/SETTINGS
+++ b/jenkins/template/SETTINGS
@@ -17,12 +17,21 @@
 # 24 June 2016 -- Jeremy Mordkoff -- Genesis 
 #
 # this variable holds the name of the container image needed to build or run this product
-export OSM_BASE_IMAGE=fc20
+export OSM_BASE_IMAGE=ubuntu:16.04
 #
 # this variable holds the name of the container to be used to build a package
 # if this container already exists, the build process can skip the container build
-export OSM_BUILD_CONTAINER=rift-build
+export OSM_BUILD_CONTAINER=container_name-build
+#
+# this variable must be set to allow creating the build container in privileged mode
+# this variable should be removed in the future when no privileged mode is required
+#export OSM_BUILD_CONTAINER_PRIVILEGED=yes
 #
 # this variable holds the name of the container to be used to run a package
 # if this container already exists, the run processes can skip the container build
-export OSM_RUNTIME_CONTAINER=rift-runtime
+export OSM_RUNTIME_CONTAINER=container_name-runtime
+#
+# this variable must be set to allow creating the runtime container in privileged mode
+# this variable should be removed in the future when no privileged mode is required
+#export OSM_RUNTIME_CONTAINER_PRIVILEGED=yes
+
-- 
GitLab