Commit 67cbc2a4 authored by Mark Beierl's avatar Mark Beierl
Browse files

Updates



Added logging, creation of subnets, improved cleanup

Signed-off-by: default avatarMark Beierl <mark.beierl@canonical.com>
parent f68153bd
Loading
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
@@ -14,20 +14,13 @@ FLAVOR: the flavour of the new VM to launch. Must have at least 4 CPUs, 8 GB RA
PROJECT: The project ID in which to launch the new VM
SUBNET: the first three octets of the subnet to use.  IP addresses will be allocated from this subnet, starting with .101 - .199

### Creating ports
This script will create the ports in Openstack on the subnet specified
```
./create-osm-vm-ports.sh
```

### Launching VM
This script will launch all the OSM VMs in a loop
### Creating Openstack Tenants
This script will create users and projects in Openstack for hackfest-1, -2, -3, etc.  These projects are for deploying workloads to, OSM itself will be installed under the admin tenant.  It also creates SGi, S1, Private and Management networks, and launches OSM, VyOS and Microk8s VMs in the tenant.

```
./create-osm-vm-servers.sh
./run-create-openstack-user-and-project.sh
```


### Initial Configuration
This script updates apt, upgrades the system to the latest 20.04 and installs remote desktop software

@@ -35,6 +28,14 @@ This script updates apt, upgrades the system to the latest 20.04 and installs re
./run-vm-setup.sh
```

### Install Microk8s

This script will configure the Microk8s VM launched by the create-openstack-user-and-project script.
```
./run-microk8s-setup.sh
```


### Install OSM

This script downloads the installer and runs it.  It also sets the OSM admin password to `hackfest`.
@@ -47,3 +48,14 @@ This script downloads the installer and runs it. It also sets the OSM admin pas
```
./run-osm-vim-k8scluster-add.sh
```

## Full Flow

```
./run-create-openstack-user-and-project.sh 1 1
./run-vm-setup.sh 1 1
./run-microk8s-setup.sh 1 1
./run-install-osm.sh 1 1
./run-osm-vim-k8scluster-add.sh 1 1
```
+12 −2
Original line number Diff line number Diff line
if [ ! -z ${DEBUG} ]; then
    set -x
fi

START=1
MAX=1

@@ -5,13 +9,19 @@ if [ ! -z $2 ] ; then
    START=$1
    MAX=$2
elif [ ! -z $1 ] ; then
    START=$1
    MAX=$1
fi

# ETSI VIM ADMIN_DOMAIN=default, Partner Cloud=admin_domain
ADMIN_DOMAIN=default
APT_PROXY=http://172.21.1.1:3142
FLAVOR=m1.xlarge
KEY_NAME=mbeierl
FLAVOR=osm.sanity
KEY_NAME=hackfest
NETWORK=osm-ext
SUBNET=172.21.248

MANAGEMENT_SUBNET=10.0.0
SGi_SUBNET=192.168.2
S1_SUBNET=192.168.0
PRIVATE_SUBNET=192.168.239
 No newline at end of file
+98 −37
Original line number Diff line number Diff line
#!/bin/bash
echo $0 started at $(date)

. ./common-vars
. ./admin-credentials.rc

for PARTICIPANT in `seq ${START} ${MAX}` ; do
PARTICIPANT=${1}

OPENSTACK_USER=hackfest-${PARTICIPANT}
PROJECT=hackfest-${PARTICIPANT}
@@ -11,32 +12,92 @@ for PARTICIPANT in `seq ${START} ${MAX}` ; do

echo "Creating OpenStack project: $PROJECT"
openstack project create --domain ${ADMIN_DOMAIN} $PROJECT
    PROJECT_ID=`openstack project list | grep $PROJECT | awk '{print $2}'`
    openstack quota set --cores 64 --ram 131072 $PROJECT_ID
PROJECT_ID=`openstack project list | grep "${PROJECT} " | awk '{print $2}'`
openstack quota set --cores 64 --ram 131072 --instances 12 $PROJECT_ID &

echo "Creating OpenStack User"
openstack user create --domain ${ADMIN_DOMAIN} --password $PASSWORD $OPENSTACK_USER
    openstack role add --user $OPENSTACK_USER --project $PROJECT member
openstack role add --user $OPENSTACK_USER --project $PROJECT member &

echo "Creating OpenStack Network RBAC policy access_as_external, for network $NETWORK and project $PROJECT"
openstack network rbac create \
    --target-project $PROJECT \
    --type network \
    --action access_as_external \
        $NETWORK
    $NETWORK &

echo "Creating OpenStack Network RBAC policy access_as_shared, for network $NETWORK and project $PROJECT"
openstack network rbac create \
    --target-project $PROJECT \
    --type network \
    --action access_as_shared \
        $NETWORK
    $NETWORK &
wait

echo "Adding security groups"
for i in $(openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group list | awk '/default/{ print $2 }'); do
        openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol icmp --remote-ip 0.0.0.0/0
        openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol udp --remote-ip 0.0.0.0/0
        openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol tcp --remote-ip 0.0.0.0/0
    openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol icmp --remote-ip 0.0.0.0/0 &
    openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol udp --remote-ip 0.0.0.0/0 &
    openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID security group rule create $i --protocol tcp --remote-ip 0.0.0.0/0 &
done
wait

echo "Creating networks"
NETWORK=management
echo "Creating ${NETWORK} network"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID network create ${NETWORK} --enable --no-share
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID subnet create ${NETWORK}-subnet --network=${NETWORK} --subnet-range=${MANAGEMENT_SUBNET}.0/24
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router create ${NETWORK}-router
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router add subnet ${NETWORK}-router ${NETWORK}-subnet
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router set --external-gateway osm-ext ${NETWORK}-router

NETWORK=SGi
echo "Creating ${NETWORK} network"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID network create ${NETWORK} --enable --no-share
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID subnet create ${NETWORK}-subnet --network=${NETWORK} --subnet-range=${SGi_SUBNET}.0/24
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router create ${NETWORK}-router
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router add subnet ${NETWORK}-router ${NETWORK}-subnet
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router set --external-gateway osm-ext ${NETWORK}-router

NETWORK=S1
echo "Creating ${NETWORK} network"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID network create ${NETWORK} --enable --no-share
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID subnet create ${NETWORK}-subnet --network=${NETWORK} --subnet-range=${S1_SUBNET}.0/24
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router create ${NETWORK}-router
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router add subnet ${NETWORK}-router ${NETWORK}-subnet
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID router set --external-gateway osm-ext ${NETWORK}-router

echo "Creating Private network"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID network create private --enable --no-share
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID subnet create private-subnet --network=private --subnet-range=${PRIVATE_SUBNET}.0/24

echo "Creating ports"
# This port gets created as the admin
IP=`expr ${PARTICIPANT} + 100`
openstack port create --fixed-ip ip-address=${SUBNET}.${IP} --project=${PROJECT} --enable --network osm-ext hackfest-osm-${PARTICIPANT} &
# Create as the project user
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID port create --fixed-ip ip-address=192.168.239.250 --enable --disable-port-security --network private VyOS-private &
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID port create --fixed-ip ip-address=10.0.0.10 --enable --network management OSM-management &
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID port create --fixed-ip ip-address=10.0.0.11 --enable --network management MK8s-management &
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID port create --fixed-ip ip-address=10.0.0.250 --enable --network management VyOS-management &

echo "Creating Keypair"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID keypair create --public-key ./hackfest_rsa.pub ${KEY_NAME} &
wait

echo "Launching OSM VM"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID server create --key-name ${KEY_NAME} --flavor ${FLAVOR} --image ubuntu20.04 --nic port-id=hackfest-osm-${PARTICIPANT} --nic port-id=OSM-management --user-data ./osm-cloud-init.yaml osm-${PARTICIPANT}
echo "Launching Microk8s VM"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID server create --key-name ${KEY_NAME} --flavor ${FLAVOR} --image ubuntu22.04 --nic port-id=MK8s-management microk8s
echo "Launching VyOS Router"
openstack --os-username=$OPENSTACK_USER --os-password=$PASSWORD --os-project-id=$PROJECT_ID server create --flavor m1.small --image vyos-1.1.7 --nic port-id=VyOS-management --nic port-id=VyOS-private --config-drive True --user-data "`pwd`/vyos-userdata.vsh" vyos-pnf-router

echo "Waiting for OSM VM to be ready"

while [ 1 ] ; do
    sleep 5
    ALIVE=$(ssh -T -o ConnectTimeout=1 -o StrictHostKeyChecking=no -i hackfest_rsa ubuntu@${SUBNET}.${IP} 'cloud-init status --wait | tail -1' 2> /dev/null)
    if [ "${ALIVE}" == "status: done" ] ; then break ; fi
done

echo $0 $@ complete at $(date)
 No newline at end of file
+0 −10
Original line number Diff line number Diff line
#!/bin/bash
. ./common-vars $@

. ./admin-credentials.rc

for PARTICIPANT in `seq ${START} ${MAX}` ; do
  IP=`expr ${PARTICIPANT} + 100`
  PROJECT="hackfest-${PARTICIPANT}"
  openstack port create --fixed-ip ip-address=${SUBNET}.${IP} --project=${PROJECT} --enable --network osm-ext hackfest-osm-${PARTICIPANT}
done
+0 −9
Original line number Diff line number Diff line
#!/bin/bash
. ./common-vars $@

. ./admin-credentials.rc

for PARTICIPANT in `seq ${START} ${MAX}` ; do
  openstack server create --key-name ${KEY_NAME} --flavor ${FLAVOR} --image ubuntu20.04 --nic port-id=hackfest-osm-${PARTICIPANT} osm-${PARTICIPANT}
done
Loading