summaryrefslogtreecommitdiffstats
path: root/jjb/bottlenecks/bottlenecks-run-suite.sh
blob: 0e325e115d129f2c96bcbafbde8086999e43fddd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash
##############################################################################
# Copyright (c) 2017 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
##############################################################################

#set -e
[[ $GERRIT_REFSPEC_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
BOTTLENECKS_IMAGE=opnfv/bottlenecks
REPORT="True"

RELENG_REPO=${WORKSPACE}/releng
[ -d ${RELENG_REPO} ] && rm -rf ${RELENG_REPO}
git clone https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO} >${redirect}

YARDSTICK_REPO=${WORKSPACE}/yardstick
[ -d ${YARDSTICK_REPO} ] && rm -rf ${YARDSTICK_REPO}
git clone https://gerrit.opnfv.org/gerrit/yardstick ${YARDSTICK_REPO} >${redirect}

OPENRC=/tmp/admin_rc.sh
OS_CACERT=/tmp/os_cacert

BOTTLENECKS_CONFIG=/tmp

if [[ $SUITE_NAME == *posca* ]]; then
    POSCA_SCRIPT=/home/opnfv/bottlenecks/testsuites/posca
    sudo rm -f ${OPENRC}

    # Preparing OpenStack RC and Cacert files
    echo "BOTTLENECKS INFO: fetching os credentials from $INSTALLER_TYPE"
    if [[ $INSTALLER_TYPE == 'compass' ]]; then
        if [[ ${BRANCH} == 'master' ]]; then
            ${RELENG_REPO}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} -o ${OS_CACERT} >${redirect}
            if [[ -f ${OS_CACERT} ]]; then
                echo "BOTTLENECKS INFO: successfully fetching os_cacert for openstack: ${OS_CACERT}"
            else
                echo "BOTTLENECKS ERROR: couldn't find os_cacert file: ${OS_CACERT}, please check if the it's been properly provided."
                exit 1
            fi
        else
            ${RELENG_REPO}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP}  >${redirect}
        fi
    fi

    if [[ -f ${OPENRC} ]]; then
        echo "BOTTLENECKS INFO: openstack credentials path is ${OPENRC}"
        if [[ $INSTALLER_TYPE == 'compass' && ${BRANCH} == 'master' ]]; then
            echo "BOTTLENECKS INFO: writing ${OS_CACERT} to ${OPENRC}"
            echo "export OS_CACERT=${OS_CACERT}" >> ${OPENRC}
        fi
        cat ${OPENRC}
    else
        echo "BOTTLENECKS ERROR: couldn't find openstack rc file: ${OPENRC}, please check if the it's been properly provided."
        exit 1
    fi

    # Finding and crearting POD description files from different deployments
    ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

    if [ "$INSTALLER_TYPE" == "fuel" ]; then
        echo "Fetching id_rsa file from jump_server $INSTALLER_IP..."
        sshpass -p r00tme sudo scp $ssh_options root@${INSTALLER_IP}:~/.ssh/id_rsa ${BOTTLENECKS_CONFIG}/id_rsa
    fi

    if [ "$INSTALLER_TYPE" == "apex" ]; then
        echo "Fetching id_rsa file from jump_server $INSTALLER_IP..."
        sudo scp $ssh_options stack@${INSTALLER_IP}:~/.ssh/id_rsa ${BOTTLENECKS_CONFIG}/id_rsa
    fi

    set +e

    sudo -H pip install virtualenv

    cd ${RELENG_REPO}/modules
    sudo virtualenv venv
    source venv/bin/activate
    sudo -H pip install -e ./ >/dev/null
    sudo -H pip install netaddr

    if [[ ${INSTALLER_TYPE} == compass ]]; then
        options="-u root -p root"
    elif [[ ${INSTALLER_TYPE} == fuel ]]; then
        options="-u root -p r00tme"
    elif [[ ${INSTALLER_TYPE} == apex ]]; then
        options="-u stack -k /root/.ssh/id_rsa"
    else
        echo "Don't support to generate pod.yaml on ${INSTALLER_TYPE} currently."
    fi

    if [[ ${INSTALLER_TYPE} != compass ]]; then
        cmd="sudo python ${RELENG_REPO}/utils/create_pod_file.py -t ${INSTALLER_TYPE} \
         -i ${INSTALLER_IP} ${options} -f ${BOTTLENECKS_CONFIG}/pod.yaml \
         -s ${BOTTLENECKS_CONFIG}/id_rsa"
        echo ${cmd}
        ${cmd}
    else
        cmd="sudo cp ${YARDSTICK_REPO}/etc/yardstick/nodes/compass_sclab_virtual/pod.yaml \
        ${BOTTLENECKS_CONFIG}"
        echo ${cmd}
        ${cmd}
    fi

    deactivate

    sudo rm -rf ${RELENG_REPO}/modules/venv
    sudo rm -rf ${RELENG_REPO}/modules/opnfv.egg-info

    set -e

    cd ${WORKSPACE}

    if [ -f ${BOTTLENECKS_CONFIG}/pod.yaml ]; then
        echo "FILE: ${BOTTLENECKS_CONFIG}/pod.yaml:"
        cat ${BOTTLENECKS_CONFIG}/pod.yaml
    else
        echo "ERROR: cannot find file ${BOTTLENECKS_CONFIG}/pod.yaml. Please check if it is existing."
        sudo ls -al ${BOTTLENECKS_CONFIG}
    fi

    # Pulling Bottlenecks docker and passing environment variables
    echo "INFO: pulling Bottlenecks docker ${DOCKER_TAG}"
    docker pull opnfv/bottlenecks:${DOCKER_TAG} >$redirect

    opts="--privileged=true -id"
    envs="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP} \
          -e NODE_NAME=${NODE_NAME} -e EXTERNAL_NET=${EXTERNAL_NETWORK} \
          -e BRANCH=${BRANCH} -e GERRIT_REFSPEC_DEBUG=${GERRIT_REFSPEC_DEBUG} \
          -e BOTTLENECKS_DB_TARGET=${BOTTLENECKS_DB_TARGET} -e PACKAGE_URL=${PACKAGE_URL} \
          -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} -e BUILD_TAG=${BUILD_TAG}"
    docker_volume="-v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp"

    cmd="docker run ${opts} ${envs} --name bottlenecks-load-master ${docker_volume} opnfv/bottlenecks:${DOCKER_TAG} /bin/bash"
    echo "BOTTLENECKS INFO: running docker run commond: ${cmd}"
    ${cmd} >$redirect
    sleep 5

    # Running test cases through Bottlenecks docker
    if [[ $SUITE_NAME == posca_stress_traffic ]]; then
        TEST_CASE=posca_factor_system_bandwidth
        testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT"
        echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}"
        ${testcase_cmd} >$redirect
    elif [[ $SUITE_NAME == posca_stress_ping ]]; then
        TEST_CASE=posca_factor_ping
        testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT"
        echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}"
        ${testcase_cmd} >$redirect
    fi
fi