summaryrefslogtreecommitdiffstats
path: root/ci/deploy.sh
blob: 85374e757e8787ab20f112d6e678e495c2f9fdbd (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

@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
}
##############################################################################
# Copyright (c) 2017 kristian.hunt@gmail.com 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
##############################################################################
---
# Sample benchmark task config file
# use perf to perform Linux performance measurements
# this sample demonstrates measurements of various software perf events

schema
#!/bin/bash

set -ex

source common/tools.sh

#need to put multiple cases here where decide this bundle to deploy by default use the odl bundle.
# Below parameters are the default and we can according the release

opnfvsdn=nosdn
opnfvtype=noha
openstack=ocata
opnfvlab=default
opnfvlabfile=
opnfvrel=e
opnfvfeature=none
opnfvdistro=xenial
opnfvarch=amd64
opnfvmodel=openstack
virtinstall=0
maasinstall=0

jujuver=`juju --version`

usage() { echo "Usage: $0
    [-s|--sdn <nosdn|odl|opencontrail>]
    [-t|--type <noha|ha|tip>]
    [-o|--openstack <ocata>]
    [-l|--lab <default|custom>]
    [-f|--feature <ipv6,dpdk,lxd,dvr,openbaton>]
    [-d|--distro <xenial>]
    [-a|--arch <amd64|ppc64el|aarch64>]
    [-m|--model <openstack|kubernetes>]
    [-i|--virtinstall <0|1>]
    [--maasinstall <0|1>]
    [--labfile <labvonfig.yaml file>]
    [-r|--release <e>]" 1>&2 exit 1;
}

#A string with command options
options=$@

# An array with all the arguments
arguments=($options)

# Loop index
index=0

for argument in $options
    do
        # Incrementing index
        index=`expr $index + 1`

        # The conditions
        case $argument in
            -h|--help )
                usage;
                ;;
            -s|--sdn  )
                if ([ "arguments[index]" != "" ]); then
                    opnfvsdn=${arguments[index]}
                fi;
                ;;
            -t|--type )
                if ([ "arguments[index]" != "" ]); then
                    opnfvtype=${arguments[index]}
                fi;
                ;;
            -o|--openstack )
                if ([ "arguments[index]" != "" ]); then
                    openstack=${arguments[index]}
                fi;
                ;;

            -l|--lab  )
                if ([ "arguments[index]" != "" ]); then
                    opnfvlab=${arguments[index]}
                fi;
                ;;

            -r|--release )
                if ([ "arguments[index]" != "" ]); then
                    opnfvrel=${arguments[index]}
                fi;
                ;;

            -f|--feature )
                if ([ "arguments[index]" != "" ]); then
                    opnfvfeature=${arguments[index]}
                fi;
                ;;

            -d|--distro )
                if ([ "arguments[index]" != "" ]); then
                    opnfdistro=${arguments[index]}
                fi;
                ;;

            -a|--arch  )
                if ([ "arguments[index]" != "" ]); then
                    opnfvarch=${arguments[index]}
                fi;
                ;;

            -m|--model )
                if ([ "arguments[index]" != "" ]); then
                    opnfvmodel=${arguments[index]}
                fi;
                ;;

            -i|--virtinstall )
                if ([ "arguments[index]" != "" ]); then
                    virtinstall=${arguments[index]}
                fi;
                ;;
            --maasinstall )
                if ([ "arguments[index]" != "" ]); then
                    maasinstall=${arguments[index]}
                fi;
                ;;
            --labfile )
                if ([ "arguments[index]" != "" ]); then
                    labfile=${arguments[index]}
                fi;
                ;;
          esac
    done


#by default maas creates two VMs in case of three more VM needed.
createresource() {
    # TODO: make sure this function run with the same parameters used in 03-maasdeploy.sh
    PROFILE=${PROFILE:-ubuntu}
    MAAS_IP=$(grep " ip_address" deployconfig.yaml | cut -d ':' -f 2 | sed -e 's/ //')
    API_SERVER="http://$MAAS_IP:5240/MAAS/api/2.0"
    API_KEY=`sudo maas-region apikey --username=ubuntu`
    maas login $PROFILE $API_SERVER $API_KEY

    for node in node3-control node4-control
    do
        node_id=$(maas $PROFILE machines read | \
                  jq -r ".[] | select(.hostname == \"$node\").system_id")
        if [[ -z "$node_id" ]]; then
            sudo virt-install --connect qemu:///system --name $node \
                --ram 8192 --cpu host --vcpus 4 \
                --disk size=120,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \
                --network bridge=virbr0,model=virtio \
                --network bridge=virbr0,model=virtio \
                --boot network,hd,menu=off \
                --noautoconsole --vnc --print-xml | tee _node.xml
            node_mac=$(grep "mac address" _node.xml | head -1 | cut -d "'" -f 2)
            sudo virsh -c qemu:///system define --file _node.xml
            rm -f _node.xml

            maas $PROFILE nodes new autodetect_nodegroup='yes' name=$node \
                tags='control' hostname=$name power_type='virsh' \
                mac_addresses=$node3controlmac \
                power_parameters_power_address="qemu+ssh://$USER@192.168.122.1/system" \
                architecture='amd64/generic' power_parameters_power_id='node3-control'
            node_id=$(maas $PROFILE machines read | \
                  jq -r ".[] | select(.hostname == \"$node\").system_id")
        fi
        if [[ -z "$node_id" ]]; then
            echo_error "Error: failed to create node $node ."
            exit 1
        fi
        maas $PROFILE tag update-nodes control add=$node_id || true
    done
}

#copy the files and create extra resources needed for HA deployment
# in case of default VM labs.
deploy() {
    if [ ! -f ./labconfig.yaml ] && [ -e ~/joid_config/labconfig.yaml ]; then
        cp ~/joid_config/labconfig.yaml ./labconfig.yaml

        if [ ! -f ./deployconfig.yaml ] && [ -e ~/joid_config/deployconfig.yaml ]; then
            cp ~/joid_config/deployconfig.yaml ./deployconfig.yaml
        else
            python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
        fi
    else
        if [ -e ./labconfig.yaml ]; then
            if [ ! -f ./deployconfig.yaml ] && [ -e ~/joid_config/deployconfig.yaml ]; then
                cp ~/joid_config/deployconfig.yaml ./deployconfig.yaml
            else
                python genDeploymentConfig.py -l labconfig.yaml > deployconfig.yaml
            fi
        else
            echo_error "MAAS not deployed please deploy MAAS first."
        fi
    fi

    #create json file which is missing in case of new deployment after maas and git tree cloned freshly.
    python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < labconfig.yaml > labconfig.json
    python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < deployconfig.yaml > deployconfig.json

    # Install MAAS and expecting the labconfig.yaml at local directory.

    if [ "$maasinstall" -eq 1 ]; then
        ./clean.sh || true
        PROFILE=${PROFILE:-ubuntu}
        MAAS_IP=$(grep " ip_address" deployconfig.yaml | cut -d ':' -f 2 | sed -e 's/ //')
        API_SERVER="http://$MAAS_IP:5240/MAAS/api/2.0"
        if which maas > /dev/null; then
            API_KEY=`sudo maas-region apikey --username=ubuntu`
            maas login $PROFILE $API_SERVER $API_KEY

            # make sure there is no machine entry in maas
            for m in $(maas $PROFILE machines read | jq -r '.[].system_id')
            do
                maas $PROFILE machine delete $m || true
            done
            podno=$(maas $PROFILE pods read | jq -r ".[]".id)
            maas $PROFILE pod delete $podno || true
        fi
        ./cleanvm.sh || true

        if [ "$virtinstall" -eq 1 ]; then
            ./00-maasdeploy.sh virtual
        else
            if [ -z "$labfile" ]; then
                if [ ! -e ./labconfig.yaml ]; then
                    echo_error "Labconfig file must be specified when using custom"
                else
                    echo_warning "Labconfig was not specified, using ./labconfig.yaml instead"
                fi
            elif [ ! -e "$labfile" ]; then
                echo_warning "Labconfig not found locally, trying download"
                wget $labfile -t 3 -T 10 -O ./labconfig.yaml || true
                count=`wc -l labconfig.yaml  | cut -d " " -f 1`
                if [ $count -lt 10 ]; then
                    echo_error "Unable to download labconfig"
                    exit 1
                fi
            else
                echo_info "Using $labfile to setup deployment"
                cp $labfile ./labconfig.yaml
            fi

            ./00-maasdeploy.sh custom
        fi
    fi

    if [[ "$opnfvtype" = "ha" && "$opnfvlab" = "default" ]]; then
        createresource
    fi

    #bootstrap the node
    ./01-bootstrap.sh

    juju model-config default-series=$opnfvdistro enable-os-refresh-update=false enable-os-upgrade=false

    # case default deploy the opnfv platform:
    ./02-deploybundle.sh $opnfvtype $openstack $opnfvlab $opnfvsdn $opnfvfeature $opnfvdistro $opnfvmodel
}

#check whether charms are still executing the code even juju-deployer says installed.
check_status() {
    waitstatus=$1
    retval=0
    timeoutiter=0

    echo_info "Executing the relationships within charms..."
    while [ $retval -eq 0 ]; do
        if juju status | grep -q $waitstatus; then
           echo_info "Still waiting for $waitstatus units"
           if [ $timeoutiter -ge 180 ]; then
               echo_error 'Timed out'
               retval=1
           else
               sleep 30
           fi
           timeoutiter=$((timeoutiter+1))
       else
           echo_info 'Done executing the relationships'
           retval=1
       fi
    done

    if [[ "$opnfvmodel" = "openstack" ]]; then
        juju expose ceph-radosgw || true
        #juju ssh ceph/0 \ 'sudo radosgw-admin user create --uid="ubuntu" --display-name="Ubuntu Ceph"'
    fi

    echo_info "Deployment finishing..."
 }


# In the case of a virtual deployment
if [ "$virtinstall" -eq 1 ]; then
    ./clean.sh || true
fi

echo_info "Deployment started"
deploy

check_status executing

echo_info "Deployment finished"
juju status --format=tabular

# translate bundle.yaml to json
python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < bundles.yaml > bundles.json

# Configuring deployment
if ([ $opnfvmodel == "openstack" ]); then
    echo_info "Configuring OpenStack deployment"

    ./openstack.sh "$opnfvsdn" "$opnfvlab" "$opnfvdistro" "$openstack" || true

    # creating heat domain after pushing the public API into /etc/hosts
    if [[ "$jujuver" > "2" ]]; then
        status=`juju run-action heat/0 domain-setup`
        echo $status
    else
        status=`juju action do heat/0 domain-setup`
        echo $status
    fi

    sudo ../juju/get-cloud-images || true
    ../juju/joid-configure-openstack || true

    if grep -q 'openbaton' bundles.yaml; then
        juju add-relation openbaton keystone
    fi

elif ([ $opnfvmodel == "kubernetes" ]); then
   #Workarounf for master chanrm as it takes 5 minutes to run properly
    check_status waiting
    check_status executing
    echo_info "Configuring Kubernetes deployment"

    ./k8.sh
fi

# expose the juju gui-url to login into juju gui

echo_info "Juju GUI can be accessed using the following URL and credentials:"
juju gui --show-credentials --no-browser

echo "Finished deployment and configuration"