From 02d44a030687100d0ebf68d1645536536d42cbb9 Mon Sep 17 00:00:00 2001 From: Leo Wang Date: Wed, 22 Mar 2017 21:40:58 -0400 Subject: Launch a local TESTAPI DB instance JIRA: DOVETAIL-374 User may want to dry run the test, and does not intend to upload test results to OPNFV DB. So dovetail provide a way to launch a local TESTAPI DB instance, then user can upload test results to this local db, and browse test results locally. Change-Id: I17b6153c9a308bd3cd59a2450c415200496cb855 Signed-off-by: Leo Wang --- utils/init_db.py | 80 ++++++++++++++++++++++++++++++++++++++++++++ utils/launch_db.sh | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++ utils/restart_db.sh | 29 ++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 utils/init_db.py create mode 100755 utils/launch_db.sh create mode 100755 utils/restart_db.sh (limited to 'utils') diff --git a/utils/init_db.py b/utils/init_db.py new file mode 100644 index 00000000..129c61f8 --- /dev/null +++ b/utils/init_db.py @@ -0,0 +1,80 @@ +############################################################################## +# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others. +# +# 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 +############################################################################## + +import requests +import json +import sys + +db_host_ip = sys.argv[1] +testapi_port = sys.argv[2] + +source_url = 'http://testresults.opnfv.org/test/api/v1' +target_url = 'http://{}:{}/api/v1'.format(db_host_ip, testapi_port) +print(target_url) + + +def get(url): + return requests.get(url).json() + + +def post(url, data): + headers = {'Content-Type': 'application/json'} + res = requests.post(url, data=json.dumps(data), headers=headers) + print(res.text) + + +def pod(): + source = '{}/pods'.format(source_url) + target = '{}/pods'.format(target_url) + + pods = get(source)['pods'] + for p in pods: + post(target, p) + + add_pod('master', 'metal') + add_pod('virtual_136_2', 'virtual') + + +def project(): + source = '{}/projects'.format(source_url) + target = '{}/projects'.format(target_url) + + projects = get(source)['projects'] + for p in projects: + post(target, p) + + +def cases(): + project_list = ['yardstick', 'functest', 'dovetail'] + + for p in project_list: + source = '{}/projects/{}/cases'.format(source_url, p) + target = '{}/projects/{}/cases'.format(target_url, p) + + cases = get(source)['testcases'] + for c in cases: + post(target, c) + + +def add_pod(name, mode): + data = { + "role": "", + "name": name, + "details": '', + "mode": mode, + "creation_date": "2017-2-23 11:23:03.765581" + } + pod_url = '{}/pods'.format(target_url) + post(pod_url, data) + + +if __name__ == '__main__': + pod() + project() + cases() diff --git a/utils/launch_db.sh b/utils/launch_db.sh new file mode 100755 index 00000000..008c9600 --- /dev/null +++ b/utils/launch_db.sh @@ -0,0 +1,96 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others. +# +# 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 +############################################################################## + +if [ "$#" -ne 1 ]; then + echo "Error: missing parameter! try again like this:" + echo "" + echo "./launch_db.sh 192.168.115.2" + echo "" + echo "parameters:" + echo " db_host_ip: your localhost ip address " + echo "" + exit 1 +fi + +export mongodb_port=${mongodb_port:-"27017"} +export testapi_port=${testapi_port:-"8000"} +export db_host_ip=${db_host_ip:-"$1"} + +set -e + +echo "===================" +echo "Create the mongodb." +echo "===================" + +# pull image kkltcjk/mongodb:reporting +mongodb_img="kkltcjk/mongodb:reporting" +echo "Step1: pull the image $mongodb_img." +sudo docker pull $mongodb_img > /dev/null + +container_name='mongodb' + +echo "Step2: remove the exist container with the same name '$container_name' if exists." +sudo docker ps -a -f "name=${container_name}" + +if [[ ! -z $(sudo docker ps -aq -f "name=${container_name}") ]]; then + sudo docker ps -aq -f "name=${container_name}" | xargs sudo docker rm -f +fi + +# run mongodb container +echo "Step3: run ${container_name} container." +cmd="sudo docker run -itd -p ${mongodb_port}:27017 --name ${container_name} ${mongodb_img}" +echo $cmd +${cmd} + +echo "Successfully create mongo DB." + + +echo "==========================" +echo "Create the testapi service." +echo "==========================" + +# pull image kkltcjk/testapi:reporting +testapi_img="kkltcjk/testapi:reporting" +echo "Step1: pull the image $testapi_img." +sudo docker pull $testapi_img > /dev/null + +container_name='testapi' + +echo "Step2: remove the exist container with the same name '$container_name' if exists." +sudo docker ps -a -f "name=${container_name}" + +if [[ ! -z $(sudo docker ps -aq -f "name=${container_name}") ]]; then + sudo docker ps -aq -f "name=${container_name}" | xargs sudo docker rm -f +fi + +# run testapi container +echo "Step3: run ${container_name} container." +cmd="sudo docker run -itd -p ${testapi_port}:8000 --name ${container_name} -e mongodb_url=mongodb://${db_host_ip}:${mongodb_port}/ ${testapi_img}" +echo $cmd +${cmd} + +echo "Successfully create the testapi service." + +echo "=================================" +echo "Upload default project info to DB" +echo "=================================" + +# install python packages +sudo apt-get update > /dev/null +sudo apt-get install -y python-pip > /dev/null +pip install requests > /dev/null + +echo "Init DB info..." +cmd="python ./init_db.py ${db_host_ip} ${testapi_port}" +echo ${cmd} +${cmd} > /dev/null + +echo "Successfully load DB info." + diff --git a/utils/restart_db.sh b/utils/restart_db.sh new file mode 100755 index 00000000..39b60e05 --- /dev/null +++ b/utils/restart_db.sh @@ -0,0 +1,29 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others. +# +# 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 +############################################################################## + + +if [ "$#" -ne 1 ]; then + echo "Error: missing parameter! try again like this:" + echo "" + echo "./restart_db.sh 192.168.115.2" + echo "" + echo "parameters:" + echo " db_host_ip: your localhost ip address" + echo "" + exit 1 +fi + +export mongodb_port=${mongodb_port:-"27017"} +export testapi_port=${testapi_port:-"8000"} +export db_host_ip=${db_host_ip:-"$1"} + +sudo docker rm -f testapi +sudo docker run -itd -p $testapi_port:8000 --name testapi \ + -e mongodb_url=mongodb://$db_host_ip:$mongodb_port/ kkltcjk/testapi:reporting -- cgit 1.2.3-korg