summaryrefslogtreecommitdiffstats
path: root/ci/openstack.sh
blob: 139a0dfc662008074afec4acd28a0e11fa77eed7 (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#!/bin/bash -ex
##############################################################################
# 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 -ex

source common/tools.sh

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

opnfvsdn=$1
opnfvlab=$2
opnfvdistro=$3
opnfvos=$4

if [ -f ./deployconfig.yaml ];then
    EXTERNAL_NETWORK=`grep floating-ip-range deployconfig.yaml | cut -d ' ' -f 4 `

    # split EXTERNAL_NETWORK=first ip;last ip; gateway;network

    EXTNET=(${EXTERNAL_NETWORK//,/ })

    EXTNET_FIP=${EXTNET[0]}
    EXTNET_LIP=${EXTNET[1]}
    EXTNET_GW=${EXTNET[2]}
    EXTNET_NET=${EXTNET[3]}
    EXTNET_PORT=`grep "ext-port" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //' | tr ',' ' '`
    ADMNET_GW=`grep "admNetgway" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //' | tr ',' ' '`
fi

# launch eth on computer nodes and remove default gw route
launch_eth() {
    computer_list=$(juju status --format short | grep -Eo 'nova-compute/[0-9]')
    for node in $computer_list; do
        echo "node name is ${node}"
        juju ssh $node "sudo ifconfig $EXTNET_PORT up"
        #juju ssh $node "sudo route del default gw $ADMNET_GW"
    done
}

# Update gateway mac to onos for l3 function
update_gw_mac() {
    ## get gateway mac
    EXTNET_GW_MAC=$(juju ssh nova-compute/0 "arp -a ${EXTNET_GW} | grep -Eo '([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})'")
    ## set external gateway mac in onos
    juju config onos-controller gateway-mac=$EXTNET_GW_MAC
}

unitAddress() {
    juju status --format yaml | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"applications\"][\"$1\"][\"units\"][\"$1/$2\"][\"public-address\"]" 2> /dev/null
}

unitMachine() {
    juju status --format yaml | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"applications\"][\"$1\"][\"units\"][\"$1/$2\"][\"machine\"]" 2> /dev/null
}

keystoneIp() {
    if [ $(juju status keystone --format=short | grep " keystone"|wc -l) == 1 ];then
        unitAddress keystone 0
    else
        juju config keystone vip | cut -d " " -f 1
    fi
}

# create external network and subnet in openstack
create_openrc() {
    echo_info "Creating the openrc (OpenStack client environment scripts)"

    mkdir -m 0700 -p cloud
    usessl=$(juju config keystone ssl_ca)
    if [[ "$usessl" == "" ]]; then
        usessl=no
    else
        usessl=yes
    fi
    keystoneIp=$(juju config keystone os-public-hostname | cut -d " " -f 1)
    if [[ "$keystoneIp" == "" ]]; then
        keystoneIp=$(keystoneIp)
    fi
    adminPasswd=$(juju config keystone admin-password | cut -d " " -f 1)

    v3api=$(juju config keystone  preferred-api-version)

    if [[ "$v3api" == "3" ]]; then
        if [ "$usessl" == "yes" ]; then
            configOpenrc admin $adminPasswd admin https://$keystoneIp:5000/v3 RegionOne publicURL > ~/joid_config/admin-openrc
        else
            configOpenrc admin $adminPasswd admin http://$keystoneIp:5000/v3 RegionOne publicURL > ~/joid_config/admin-openrc
        fi
        chmod 0600 ~/joid_config/admin-openrc
        source ~/joid_config/admin-openrc
        projectid=`openstack project show admin -c id -f value`
        projectdomainid=`openstack domain show admin_domain -c id -f value`
        userdomainid=`openstack user show admin -c domain_id -f value`
        urlapi=`openstack catalog show keystone --format yaml | python -c "import yaml; import sys; print yaml.load(sys.stdin)['endpoints']" | grep public | cut -d " " -f 4`
        configOpenrc admin $adminPasswd admin $urlapi RegionOne > ~/joid_config/admin-openrc
    else
        configOpenrc2 admin $adminPasswd admin http://$keystoneIp:5000/v2.0 RegionOne > ~/joid_config/admin-openrc
        chmod 0600 ~/joid_config/admin-openrc
    fi
}

configOpenrc2() {
cat <<-EOF
export SERVICE_ENDPOINT=$4
unset SERVICE_TOKEN
unset SERVICE_ENDPOINT
export OS_USERNAME=$1
export OS_PASSWORD=$2
export OS_TENANT_NAME=$3
export OS_AUTH_URL=$4
export OS_REGION_NAME=$5
EOF
}

configOpenrc() {
if [ "$usessl" == "yes" ]; then
cat <<-EOF
#export OS_NO_CACHE='true'
export OS_AUTH_URL=$4
export OS_USER_DOMAIN_NAME=admin_domain
export OS_PROJECT_DOMAIN_NAME=admin_domain
export OS_USERNAME=$1
export OS_TENANT_NAME=$3
export OS_PROJECT_NAME=$3
export OS_PASSWORD=$2
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=$5
export OS_INTERFACE=public
export OS_CACERT=~/joid_config/keystone_juju_ca_cert.crt
EOF
else
cat <<-EOF
#export OS_NO_CACHE='true'
export OS_AUTH_URL=$4
export OS_USER_DOMAIN_NAME=admin_domain
export OS_PROJECT_DOMAIN_NAME=admin_domain
export OS_USERNAME=$1
export OS_TENANT_NAME=$3
export OS_PROJECT_NAME=$3
export OS_PASSWORD=$2
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=$5
export OS_INTERFACE=public
#export OS_CACERT=~/joid_config/bradm.etsi-ubuntu-jh.maas.pem
EOF
fi
}


if [ "$usessl" == "yes" ]; then
    juju scp keystone/0:/usr/local/share/ca-certificates/keystone_juju_ca_cert.crt ~/joid_config/
fi

# Create an load openrc
create_openrc

. ~/joid_config/admin-openrc

##
## removing the swift API endpoint which is created by radosgw.
## one option is not to used radosgw and other one is remove endpoint.
##

#echo "Removing swift endpoint and service"
#swift_service_id=$(openstack service list | grep swift | cut -d ' ' -f 2)
#swift_endpoint_id=$(openstack endpoint list | grep swift | cut -d ' ' -f 2)
#openstack endpoint delete $swift_endpoint_id
#openstack service delete $swift_service_id

##
## Create external subnet Network
##

echo_info "Creating external network with neutron"

if [ "onos" == "$opnfvsdn" ]; then
    launch_eth
    openstack network show ext-net > /dev/null 2>&1 || openstack network create \
                                                   --external --share --enable ext-net
elif [ "ocl" == "$opnfvsdn" ]; then
    openstack network show ext-net > /dev/null 2>&1 || openstack network create \
                                                   --external --share --enable ext-net

else
    openstack network show ext-net > /dev/null 2>&1 || openstack network create \
                                                   --provider-network-type flat \
                                                   --provider-physical-network physnet1 \
                                                   --external --share --enable  ext-net
fi

openstack subnet show ext-subnet > /dev/null 2>&1 || openstack subnet create \
   --allocation-pool start=$EXTNET_FIP,end=$EXTNET_LIP \
   --no-dhcp --gateway $EXTNET_GW --network ext-net --subnet-range $EXTNET_NET ext-subnet

# Ocl can push packets to the fabric network in order to reach a gateway if BGP/L3VPN hasn't been configured.
if [ "ocl" == "$opnfvsdn" ]; then
    echo "Creating simple gateway functions on ocl vRouters"
      juju run --application nova-compute "sudo \
        python /opt/contrail/utils/provision_vgw_interface.py \
         --oper create --interface vgw1 --subnets $EXTNET_NET --routes 0.0.0.0/24 --vrf default-domain:admin:ext-net:ext-net" 
fi

#congress team is not updating and supporting charm anymore so defer it.

# Create Congress datasources
#sudo apt-get install -y python-congressclient

#openstack congress datasource create nova "nova" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0
#openstack congress datasource create neutronv2 "neutronv2" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0
#openstack congress datasource create ceilometer "ceilometer" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0
#openstack congress datasource create cinder "cinder" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0
#openstack congress datasource create glancev2 "glancev2" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0
#openstack congress datasource create keystone "keystone" \
#  --config username=$OS_USERNAME \
#  --config tenant_name=$OS_TENANT_NAME \
#  --config password=$OS_PASSWORD \
#  --config auth_url=http://$keystoneIp:5000/v2.0