From 2455319d8aa4e97d6fa0047ae7ffec2399d6045c Mon Sep 17 00:00:00 2001 From: Bryan Sullivan Date: Wed, 31 Jan 2018 19:21:04 -0800 Subject: Fix build process; add clearwater-live-test JIRA: MODELS-2 Change-Id: I8d8e6300959d788aeae2caef632c505265bae9c4 Signed-off-by: Bryan Sullivan --- build/clearwater-docker.sh | 63 +++++----- build/clearwater-live-test.sh | 76 ++++++++++++ tests/k8s-cloudify-clearwater.sh | 198 ++++++++++++++++++++++++++++++ tools/cloudify/k8s-cloudify-clearwater.sh | 189 ---------------------------- 4 files changed, 305 insertions(+), 221 deletions(-) create mode 100644 build/clearwater-live-test.sh create mode 100644 tests/k8s-cloudify-clearwater.sh delete mode 100644 tools/cloudify/k8s-cloudify-clearwater.sh diff --git a/build/clearwater-docker.sh b/build/clearwater-docker.sh index 9fa4bde..8e84618 100644 --- a/build/clearwater-docker.sh +++ b/build/clearwater-docker.sh @@ -42,36 +42,6 @@ function log() { echo "$f:$l ($(date)) $1" } -function build() { - log "Starting clearwater-docker build process" - if [[ -d /tmp/clearwater-docker ]]; then rm -rf /tmp/clearwater-docker; fi - - log "Cloning clearwater-docker repo to /tmp/clearwater-docker" - git clone https://github.com/Metaswitch/clearwater-docker.git \ - /tmp/clearwater-docker - - log "Building the images" - cd /tmp/clearwater-docker - vnfc="base astaire cassandra chronos bono ellis homer homestead homestead-prov ralf sprout" - for i in $vnfc ; do - log "Building $i" - sudo docker build $cache -t clearwater/$i $i - done -} - -function push() { - log "push images to docker hub" - for i in $vnfc ; do - log "Tagging the image as $hub_user/clearwater-$i:$tag" - id=$(sudo docker images | grep clearwater/$i | awk '{print $3}') - id=$(echo $id | cut -d ' ' -f 1) - sudo docker tag $id $hub_user/clearwater-$i:$tag - - log "Pushing the image to dockerhub as $hub_user/clearwater-$i" - sudo docker push $hub_user/clearwater-$i - done -} - hub_user=$1 tag=$2 cache="$3" @@ -85,7 +55,36 @@ else sudo yum update -y fi -build -push +if [[ "$cache" == "--no-cache" ]]; then + log "Purge old images" + images=$(sudo docker images clearwater-* | awk '/clearwater/ {print $1}') + for image in $images ; do sudo docker image rm $image; done +fi + +log "Starting clearwater-docker build process" +if [[ -d /tmp/clearwater-docker ]]; then rm -rf /tmp/clearwater-docker; fi + +log "Cloning clearwater-docker repo to /tmp/clearwater-docker" +git clone --recursive https://github.com/Metaswitch/clearwater-docker.git \ + /tmp/clearwater-docker + +log "Building the images" +cd /tmp/clearwater-docker +vnfc="base astaire cassandra chronos bono ellis homer homestead homestead-prov ralf sprout" +for i in $vnfc ; do + log "Building $i" + if [[ "$i" != "base" ]]; then + log "Reference $hub_user/clearwater-base:$tag" + sed -i -- "s~FROM clearwater/base~FROM $hub_user/clearwater-base:$tag~" \ + $i/Dockerfile + fi + sudo docker build $cache -t clearwater-$i $i + log "Tagging the image as $hub_user/clearwater-$i:$tag" + id=$(sudo docker images | grep "clearwater-$i " | awk '{print $3}') + id=$(echo $id | cut -d ' ' -f 1) + sudo docker tag $id $hub_user/clearwater-$i:$tag + log "Pushing the image to dockerhub as $hub_user/clearwater-$i" + sudo docker push $hub_user/clearwater-$i +done cd $WORK_DIR diff --git a/build/clearwater-live-test.sh b/build/clearwater-live-test.sh new file mode 100644 index 0000000..a4db776 --- /dev/null +++ b/build/clearwater-live-test.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# Copyright 2018 AT&T Intellectual Property, 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. +# +#. What this is: Build script for the github clearwater-live-test project +#. https://github.com/Metaswitch/clearwater-live-test +#. +#. Prerequisites: +#. Docker hub user logged on so images can be pushed to docker hub, i.e. via +#. $ docker login -u +#. +#. Usage: +#. bash clearwater-live-test.sh [--no-cache] +#. hub_user: username for dockerhub +#. tag: tag to apply to the built images +#. --no-cache: build clean +#. +#. Status: this is a work in progress, under test. + +trap 'fail' ERR + +fail() { + log "Build Failed!" + exit 1 +} + +function log() { + f=$(caller 0 | awk '{print $2}') + l=$(caller 0 | awk '{print $1}') + echo "" + echo "$f:$l ($(date)) $1" +} + +hub_user=$1 +tag=$2 +cache="$3" +dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'` +export WORK_DIR=$(pwd) + +log "Update package repos" +if [ "$dist" == "Ubuntu" ]; then + sudo apt-get update +else + sudo yum update -y +fi + +log "Starting clearwater-live-test build process" +if [[ -d /tmp/clearwater-live-test ]]; then rm -rf /tmp/clearwater-live-test; fi + +log "Cloning clearwater-live-test repo to /tmp/clearwater-live-test" +git clone --recursive https://github.com/Metaswitch/clearwater-live-test.git \ + /tmp/clearwater-live-test +cd /tmp/clearwater-live-test + +log "Building the image" +sudo docker build $cache -t clearwater/clearwater-live-test . + +log "Tagging the image as $hub_user/clearwater-live-test:$tag" +id=$(sudo docker images | grep "clearwater-live-test " | awk '{print $3}') +id=$(echo $id | cut -d ' ' -f 1) +sudo docker tag $id $hub_user/clearwater-live-test:$tag + +log "Pushing the image to dockerhub as $hub_user/clearwater-live-test" +sudo docker push $hub_user/clearwater-live-test + diff --git a/tests/k8s-cloudify-clearwater.sh b/tests/k8s-cloudify-clearwater.sh new file mode 100644 index 0000000..ce7176e --- /dev/null +++ b/tests/k8s-cloudify-clearwater.sh @@ -0,0 +1,198 @@ +#!/bin/bash +# Copyright 2017 AT&T Intellectual Property, 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. +# +#. What this is: Setup script for clearwater-docker as deployed by Cloudify +#. with Kubernetes. See https://github.com/Metaswitch/clearwater-docker +#. for more info. +#. +#. Prerequisites: +#. - Kubernetes cluster installed per k8s-cluster.sh (in this repo) +#. - user (running this script) added to the "docker" group +#. - clearwater-docker images created and uploaded to docker hub under the +#. account as /clearwater- where vnfc is the name +#. of the specific containers as built by build/clearwater-docker.sh +#. +#. Usage: +#. From a server with access to the kubernetes master node: +#. $ git clone https://gerrit.opnfv.org/gerrit/models ~/models +#. $ cd ~/models/tools/cloudify/ +#. $ bash k8s-cloudify-clearwater.sh start +#. k8s_master_hostname: hostname of the k8s master node +#. image_path: "image path" for images (e.g. user on docker hub) +#. image_tag: "image tag" for images e.g. latest, test, stable +#. $ bash k8s-cloudify-clearwater.sh stop> +#. k8s_master_hostname: hostname of the k8s master node +#. +#. Status: this is a work in progress, under test. + +function fail() { + log "$1" + exit 1 +} + +function log() { + f=$(caller 0 | awk '{print $2}') + l=$(caller 0 | awk '{print $1}') + echo "" + echo "$f:$l ($(date)) $1" +} + +function build_local() { + log "deploy local docker registry on k8s master" + # Per https://docs.docker.com/registry/deploying/ + ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ + ubuntu@$k8s_master sudo docker run -d -p 5000:5000 --restart=always --name \ + registry registry:2 + + # per https://github.com/Metaswitch/clearwater-docker + log "clone clearwater-docker" + cd ~ + if [[ ! -d ~/clearwater-docker ]]; then + git clone --recursive https://github.com/Metaswitch/clearwater-docker.git + fi + + log "build docker images" + cd clearwater-docker + vnfc="base astaire cassandra chronos bono ellis homer homestead homestead-prov ralf sprout" + for i in $vnfc ; do + docker build -t clearwater/$i $i + done + + # workaround for https://www.bountysource.com/issues/37326551-server-gave-http-response-to-https-client-error + # May not need both... + if [[ "$dist" == "ubuntu" ]]; then + check=$(grep -c $k8s_master /etc/default/docker) + if [[ $check -eq 0 ]]; then + echo "DOCKER_OPTS=\"--insecure-registry $k8s_master:5000\"" | sudo tee -a /etc/default/docker + sudo systemctl daemon-reload + sudo service docker restart + fi + fi + check=$(grep -c insecure-registry /lib/systemd/system/docker.service) + if [[ $check -eq 0 ]]; then + sudo sed -i -- "s~ExecStart=/usr/bin/dockerd -H fd://~ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry $k8s_master:5000~" /lib/systemd/system/docker.service + sudo systemctl daemon-reload + sudo service docker restart + fi + + log "deploy local docker registry on k8s master" + # Per https://docs.docker.com/registry/deploying/ + # sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2 + + log "push images to local docker repo on k8s master" + for i in $vnfc ; do + docker tag clearwater/$i:latest $k8s_master:5000/clearwater/$i:latest + docker push $k8s_master:5000/clearwater/$i:latest + done +} + +function start() { + ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ + $k8s_user@$k8s_master <~/callsip.yaml +apiVersion: v1 +kind: Pod +metadata: + name: callsip + namespace: default +spec: + containers: + - name: callsip + image: ubuntu + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + restartPolicy: Always +EOF +kubectl create -f ~/callsip.yaml +kubectl exec -d --namespace default callsip < account as /clearwater- where vnfc is the name -#. of the specific containers as built by build/clearwater-docker.sh -#. -#. Usage: -#. From a server with access to the kubernetes master node: -#. $ git clone https://gerrit.opnfv.org/gerrit/models ~/models -#. $ cd ~/models/tools/cloudify/ -#. $ bash k8s-cloudify-clearwater.sh start -#. k8s_master_hostname: hostname of the k8s master node -#. image_path: "image path" for images (e.g. user on docker hub) -#. image_tag: "image tag" for images e.g. latest, test, stable -#. $ bash k8s-cloudify-clearwater.sh stop> -#. k8s_master_hostname: hostname of the k8s master node -#. -#. Status: this is a work in progress, under test. - -function fail() { - log "$1" - exit 1 -} - -function log() { - f=$(caller 0 | awk '{print $2}') - l=$(caller 0 | awk '{print $1}') - echo "" - echo "$f:$l ($(date)) $1" -} - -function build_local() { - log "deploy local docker registry on k8s master" - # Per https://docs.docker.com/registry/deploying/ - ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ - ubuntu@$k8s_master sudo docker run -d -p 5000:5000 --restart=always --name \ - registry registry:2 - - # per https://github.com/Metaswitch/clearwater-docker - log "clone clearwater-docker" - cd ~ - if [[ ! -d ~/clearwater-docker ]]; then - git clone --recursive https://github.com/Metaswitch/clearwater-docker.git - fi - - log "build docker images" - cd clearwater-docker - vnfc="base astaire cassandra chronos bono ellis homer homestead homestead-prov ralf sprout" - for i in $vnfc ; do - docker build -t clearwater/$i $i - done - - # workaround for https://www.bountysource.com/issues/37326551-server-gave-http-response-to-https-client-error - # May not need both... - if [[ "$dist" == "ubuntu" ]]; then - check=$(grep -c $k8s_master /etc/default/docker) - if [[ $check -eq 0 ]]; then - echo "DOCKER_OPTS=\"--insecure-registry $k8s_master:5000\"" | sudo tee -a /etc/default/docker - sudo systemctl daemon-reload - sudo service docker restart - fi - fi - check=$(grep -c insecure-registry /lib/systemd/system/docker.service) - if [[ $check -eq 0 ]]; then - sudo sed -i -- "s~ExecStart=/usr/bin/dockerd -H fd://~ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry $k8s_master:5000~" /lib/systemd/system/docker.service - sudo systemctl daemon-reload - sudo service docker restart - fi - - log "deploy local docker registry on k8s master" - # Per https://docs.docker.com/registry/deploying/ - # sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2 - - log "push images to local docker repo on k8s master" - for i in $vnfc ; do - docker tag clearwater/$i:latest $k8s_master:5000/clearwater/$i:latest - docker push $k8s_master:5000/clearwater/$i:latest - done -} - -function start() { - ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \ - $k8s_user@$k8s_master <~/callsip.yaml -apiVersion: v1 -kind: Pod -metadata: - name: callsip - namespace: default -spec: - containers: - - name: callsip - image: ubuntu - command: - - sleep - - "3600" - imagePullPolicy: IfNotPresent - restartPolicy: Always -EOF -kubectl create -f ~/callsip.yaml -kubectl exec -d --namespace default callsip <