diff options
author | 2017-01-16 06:47:20 -0800 | |
---|---|---|
committer | 2017-01-16 15:48:16 -0800 | |
commit | ef5156a42dcd119aa0a647f824e31fc05e48f9f3 (patch) | |
tree | e91c1b6345acb355c5d92af307705843335bebea /tests | |
parent | 96742933100aa90a3b9cded5cc86fbc9ce533dbb (diff) |
Add test utility to create OpenStack client container.
JIRA: MODELS-4
Installs OS clients in a docker container, avoiding the need to
create a virtualenv or install additional software on the host.
Tests and manual operations can then be invoked thru the docker API.
Fixed usage notes.
Change-Id: Idba579225abc05bcb897f938f0f5ad6530bed6f0
Signed-off-by: Bryan Sullivan <bryan.sullivan@att.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/utils/osclient.sh | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/tests/utils/osclient.sh b/tests/utils/osclient.sh new file mode 100644 index 0000000..175ef83 --- /dev/null +++ b/tests/utils/osclient.sh @@ -0,0 +1,175 @@ +#!/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 OpenStack Clients running in +# an Unbuntu Xenial docker container. +# +# Status: this is a work in progress, under test. +# +# How to use: +# $ bash osclient.sh setup|run +# setup: install the OpenStack CLI clients in the container +# bash osclient.sh setup credential_script [branch] +# credential_script: OpenStack CLI env setup script (e.g. admin-openrc.sh) +# branch: git repo branch to install (e.g. stable/newton) +# run: run a command in the container +# bash osclient.sh run command +# command: command to run, in quotes + +trap 'fail' ERR + +pass() { + echo "$0: $(date) Install success!" + end=`date +%s` + runtime=$((end-start)) + echo "$0: $(date) Duration = $runtime seconds" + exit 0 +} + +fail() { + echo "$0: $(date) Install Failed!" + end=`date +%s` + runtime=$((end-start)) + runtime=$((runtime/60)) + echo "$0: $(date) Duration = $runtime seconds" + exit 1 +} + +function create_container() { + echo "$0: $(date) Creating docker container for osclient" + if [ "$dist" == "Ubuntu" ]; then + echo "$0: $(date) Ubuntu-based install" + sudo apt-get update + sudo apt-get install apt-transport-https ca-certificates + sudo apt-key adv \ + --keyserver hkp://ha.pool.sks-keyservers.net:80 \ + --recv-keys 58118E89F3A912897C070ADBF76221572C52609D + repo="deb https://apt.dockerproject.org/repo ubuntu-xenial main" + echo "$repo" | sudo tee /etc/apt/sources.list.d/docker.list + sudo apt-get update + sudo apt-get install -y linux-image-extra-$(uname -r) linux-image-extra-virtual + sudo apt-get install -y docker-engine + sudo service docker start + # xenial is needed for python 3.5 + sudo docker pull ubuntu:xenial + sudo service docker start + sudo docker run -i -t -d -v /tmp/osclient/:/tmp/osclient --name osclient \ + ubuntu:xenial /bin/bash + sudo docker exec osclient /bin/bash /tmp/osclient/osclient-setup.sh \ + setup /tmp/osclient/admin-openrc.sh $branch + else + # Centos + echo "Centos-based install" + sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' +[dockerrepo] +name=Docker Repository--parents +baseurl=https://yum.dockerproject.org/repo/main/centos/7/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg +EOF + sudo yum install -y docker-engine + # xenial is needed for python 3.5 + sudo service docker start + sudo docker pull ubuntu:xenial + sudo docker run -i -t -d -v /tmp/osclient/:/tmp/osclient --name osclient \ + ubuntu:xenial /bin/bash + sudo docker exec osclient /bin/bash /tmp/osclient/osclient-setup.sh setup \ + /tmp/osclient/admin-openrc.sh $branch + fi +} + +install_client () { + echo "$0: $(date) Install $1" + git clone https://github.com/openstack/$1.git + cd $1 + if [ $# -eq 2 ]; then git checkout $2; fi + pip install -r requirements.txt + pip install . + cd .. +} + +function setup () { + apt-get update + apt-get install -y python + apt-get install -y python-dev + apt-get install -y python-pip + apt-get install -y wget + apt-get install -y git + apt-get install -y apg + apt-get install -y libffi-dev + apt-get install -y libssl-dev + + cd /tmp/osclient + + echo "$0: $(date) Upgrage pip" + pip install --upgrade pip + + echo "$0: $(date) Install OpenStack clients" + install_client python-openstackclient $branch + install_client python-neutronclient $branch + install_client python-heatclient $branch + install_client python-congressclient $branch + + echo "$0: $(date) Setup shell environment variables" + echo "source $openrc" >>~/.bashrc + source ~/.bashrc +} + +start=`date +%s` +dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'` + +case "$1" in + setup) + openrc=$2 + branch=$3 + if [[ -f /.dockerenv ]]; then + echo "$0: $(date) Running inside docker - finish setup" + setup $openrc $branch + else + echo "$0: $(date) Setup shared virtual folder and save $1 script there" + if [[ ! -d /tmp/osclient ]]; then mkdir /tmp/osclient; fi + cp $0 /tmp/osclient/osclient-setup.sh + cp $openrc /tmp/osclient/admin-openrc.sh + chmod 755 /tmp/osclient/*.sh + create_container + fi + pass + ;; + run) + cat >/tmp/osclient/command.sh <<EOF +source /tmp/osclient/admin-openrc.sh +$2 +exit +EOF + sudo docker exec osclient /bin/bash /tmp/osclient/command.sh "$0" + ;; + clean) + sudo docker stop osclient + sudo docker rm -v osclient + rm -rf /tmp/osclient + pass + ;; + *) + echo "$ bash osclient.sh setup|run" + echo "setup: install the OpenStack CLI clients in the container" + echo " $ bash osclient.sh setup credential_script [branch]" + echo " credential_script: OpenStack CLI env setup script (e.g. admin-openrc.sh)" + echo " branch: git repo branch to install (e.g. stable/newton)" + echo "run: run a command in the container" + echo " $ bash osclient.sh run command" + echo " command: command to run, in quotes" + fail +esac |