summaryrefslogtreecommitdiffstats
path: root/jjb/infra/bifrost-verify.sh
blob: 4115ffcc436479deb7e8c635a7207412f0b146bb (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
#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2016 Ericsson AB 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 -o errexit
set -o nounset
set -o pipefail

trap cleanup_and_upload EXIT

function upload_logs() {
    BIFROST_CONSOLE_LOG="${BUILD_URL}/consoleText"
    BIFROST_GS_URL=${BIFROST_LOG_URL/http:/gs:}

    # Make sure the old landing page is gone in case
    # we break later on. We don't want to publish
    # stale information.
    # TODO: Maybe cleanup the entire $BIFROST_GS_URL directory
    # before we upload the new data.
    gsutil -q rm ${BIFROST_GS_URL}/index.html || true

    echo "Uploading collected bifrost build logs to ${BIFROST_LOG_URL}"

    if [[ -d ${WORKSPACE}/logs ]]; then
        pushd ${WORKSPACE}/logs &> /dev/null
        for x in *.log; do
            echo "Compressing and uploading $x"
            gsutil -q cp -Z ${x} ${BIFROST_GS_URL}/${x}
        done
        popd &> /dev/null
    fi

    echo "Generating the ${BIFROST_LOG_URL}/index.html landing page"
    cat > ${WORKSPACE}/index.html <<EOF
<html>
<h1>Build results for <a href=https://$GERRIT_NAME/#/c/$GERRIT_CHANGE_NUMBER/$GERRIT_PATCHSET_NUMBER>$GERRIT_NAME/$GERRIT_CHANGE_NUMBER/$GERRIT_PATCHSET_NUMBER</a></h1>
<h2>Job: <a href=${BUILD_URL}>$JOB_NAME</a></h2>
<ul>
<li><a href=${BIFROST_LOG_URL}/build_log.txt>build_log.txt</a></li>
EOF

    if [[ -d ${WORKSPACE}/logs ]]; then
        pushd ${WORKSPACE}/logs &> /dev/null
        for x in *.log; do
            echo "<li><a href=${BIFROST_LOG_URL}/${x}>${x}</a></li>" >> ${WORKSPACE}/index.html
        done
        popd &> /dev/null
    fi

    cat >> ${WORKSPACE}/index.html << EOF
</ul>
</html>
EOF

    # Finally, download and upload the entire build log so we can retain
    # as much build information as possible
    echo "Uploading the final console output"
    curl -s -L ${BIFROST_CONSOLE_LOG} > ${WORKSPACE}/build_log.txt
    gsutil -q cp -Z ${WORKSPACE}/build_log.txt ${BIFROST_GS_URL}/build_log.txt
    rm ${WORKSPACE}/build_log.txt

    # Upload landing page
    gsutil -q cp ${WORKSPACE}/index.html ${BIFROST_GS_URL}/index.html
    rm ${WORKSPACE}/index.html
}

function fix_ownership() {
    if [ -z "${JOB_URL+x}" ]; then
        echo "Not running as part of Jenkins. Handle the logs manually."
    else
        # Make sure cache exists
        [[ ! -d ${HOME}/.cache ]] && mkdir ${HOME}/.cache

        sudo chown -R jenkins:jenkins $WORKSPACE
        sudo chown -R jenkins:jenkins ${HOME}/.cache
    fi
}

function cleanup_and_upload() {
    original_exit=$?
    fix_ownership
    upload_logs
    exit $original_exit
}

# check distro to see if we support it
if [[ ! "$DISTRO" =~ (trusty|centos7|suse) ]]; then
    echo "Distro $DISTRO is not supported!"
    exit 1
fi

# remove previously cloned repos
sudo /bin/rm -rf /opt/bifrost /opt/puppet-infracloud /opt/stack /opt/releng

# Fix up permissions
fix_ownership

# clone all the repos first and checkout the patch afterwards
sudo git clone https://git.openstack.org/openstack/bifrost /opt/bifrost
sudo git clone https://git.openstack.org/openstack-infra/puppet-infracloud /opt/puppet-infracloud
sudo git clone https://gerrit.opnfv.org/gerrit/releng /opt/releng

# checkout the patch
cd $CLONE_LOCATION
sudo git fetch $PROJECT_REPO $GERRIT_REFSPEC && sudo git checkout FETCH_HEAD

# combine opnfv and upstream scripts/playbooks
sudo /bin/cp -rf /opt/releng/prototypes/bifrost/* /opt/bifrost/

# place bridge creation file on the right path
sudo mkdir -p /opt/puppet-infracloud/files/elements/infra-cloud-bridge/static/opt
sudo cp /opt/puppet-infracloud/templates/bifrost/create_bridge.py.erb /opt/puppet-infracloud/files/elements/infra-cloud-bridge/static/opt/create_bridge.py

# replace bridge name
sudo sed -i s/"<%= @bridge_name -%>"/br_opnfv/g /opt/puppet-infracloud/files/elements/infra-cloud-bridge/static/opt/create_bridge.py

# cleanup remnants of previous deployment
cd /opt/bifrost
sudo -E ./scripts/destroy-env.sh

# provision 3 VMs; jumphost, controller, and compute
cd /opt/bifrost
sudo -E ./scripts/test-bifrost-deployment.sh

# list the provisioned VMs
cd /opt/bifrost
source env-vars
ironic node-list
virsh list