summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Sullivan <bryan.sullivan@att.com>2017-01-16 06:47:20 -0800
committerBryan Sullivan <bryan.sullivan@att.com>2017-01-16 15:48:16 -0800
commitef5156a42dcd119aa0a647f824e31fc05e48f9f3 (patch)
treee91c1b6345acb355c5d92af307705843335bebea
parent96742933100aa90a3b9cded5cc86fbc9ce533dbb (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>
-rw-r--r--tests/utils/osclient.sh175
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