Launch a local TESTAPI DB instance 55/31455/3
authorLeo Wang <grakiss.wanglei@huawei.com>
Thu, 23 Mar 2017 01:40:58 +0000 (21:40 -0400)
committerLeo Wang <grakiss.wanglei@huawei.com>
Sat, 25 Mar 2017 01:19:01 +0000 (21:19 -0400)
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 <grakiss.wanglei@huawei.com>
utils/init_db.py [new file with mode: 0644]
utils/launch_db.sh [new file with mode: 0755]
utils/restart_db.sh [new file with mode: 0755]

diff --git a/utils/init_db.py b/utils/init_db.py
new file mode 100644 (file)
index 0000000..129c61f
--- /dev/null
@@ -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 (executable)
index 0000000..008c960
--- /dev/null
@@ -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 (executable)
index 0000000..39b60e0
--- /dev/null
@@ -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