added support for install from git repository. please modify
[joid.git] / ci / 03-maasdeploy.sh
index 4307088..f66d0cb 100755 (executable)
@@ -12,7 +12,7 @@ fi
 #install the packages needed
 sudo apt-add-repository ppa:juju/stable -y
 sudo apt-add-repository ppa:maas/stable -y
-sudo apt-add-repository cloud-archive:newton -y
+sudo apt-add-repository cloud-archive:ocata -y
 sudo apt-get update -y
 #sudo apt-get dist-upgrade -y
 sudo apt-get install bridge-utils openssh-server bzr git virtinst qemu-kvm libvirt-bin juju \
@@ -92,7 +92,7 @@ SUBNETDATA_CIDR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="data"
 SUBNETPUB_CIDR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="public")'.cidr | cut -d \" -f 2 `
 SUBNETSTOR_CIDR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="storage")'.cidr | cut -d \" -f 2 `
 SUBNETFLOAT_CIDR=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="floating")'.cidr | cut -d \" -f 2 `
-VLAN_TAG="untagged"
+VLAN_UNTTAGED="untagged"
 
 # In the case of a virtual deployment get deployconfig.yaml
 if [ "$virtinstall" -eq 1 ]; then
@@ -222,8 +222,8 @@ configuremaas(){
 
     #maas $PROFILE boot-source update $SOURCE_ID \
     #     url=$URL keyring_filename=$KEYRING_FILE || true
-    #maas $PROFILE boot-resources import || true
-    #sleep 60
+    maas $PROFILE boot-resources import || true
+    sleep 10
 
     while [ "$(maas $PROFILE boot-resources is-importing)" == "true" ];
     do
@@ -231,6 +231,74 @@ configuremaas(){
     done
 }
 
+deleteexistingnetw(){
+    NETID_LIST=$(maas $PROFILE subnets read | jq ".[].id")
+    for NETID in $NETW; do
+        maas $PROFILE subnet delete $NETID_LIST
+    done
+}
+
+setopnfvfabrics(){
+    # Based on first node we get the fabric mapping
+    NODE_0_MAC_LIST=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[0].nics[] ".mac[] | sort -u)
+    FAB_ID=1
+    for MAC in $NODE_0_MAC_LIST; do
+        # Create a new fabric
+        FABRIC_ID=$(maas $PROFILE fabrics create name=opnfv$FAB_ID| jq --raw-output ".id")
+        # Get the spaces attached to a mac
+        IF_SPACES=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].nics[] | select(.mac[] | contains(\"$MAC\")) ".spaces[])
+        # Create the network attached to a space
+        for SPACE in $IF_SPACES; do
+            # First check if this space have a vlan
+            SP_VLAN=$(cat labconfig.json | jq --raw-output ".opnfv.spaces[] | select(.type==\"$SPACE\")".vlan)
+            # Create it if needed
+            if ([ $SP_VLAN ] && [ "$SP_VLAN" != "null" ]); then
+                maas $PROFILE vlans create $FABRIC_ID vid=$SP_VLAN
+                VID="vid=$SP_VLAN"
+            else
+                SP_VLAN=$VLAN_UNTTAGED
+                VID=""
+            fi
+            # Create the network
+            case "$SPACE" in
+                'admin')    SUBNET_CIDR=$SUBNET_CIDR;       JUJU_SPACE="admin";         DHCP='enabled' ;;
+                'data')     SUBNET_CIDR=$SUBNETDATA_CIDR;   JUJU_SPACE="tenant-data";   DHCP='' ;;
+                'public')   SUBNET_CIDR=$SUBNETPUB_CIDR;    JUJU_SPACE="public-api";    DHCP='' ;;
+                'storage')  SUBNET_CIDR=$SUBNETSTOR_CIDR;   JUJU_SPACE="tenant-api";    DHCP='' ;;
+                'floating') SUBNET_CIDR=$SUBNETFLOAT_CIDR;  JUJU_SPACE="tenant-public"; DHCP='' ;;
+                *) JUJU_SPACE='null'; DHCP='OFF'; echo "      >>> Unknown SPACE" ;;
+            esac
+            # If we have a network, we create it
+            if ([ $SUBNET_CIDR ] && [ "$SUBNET_CIDR" != "null" ]); then
+                maas $PROFILE subnets create fabric=$FABRIC_ID cidr=$SUBNET_CIDR $VID
+                # Add the Gateway
+                GW=$(cat labconfig.json | jq ".opnfv.spaces[] | select(.type==\"$SPACE\")".gateway | cut -d \" -f 2)
+                if ([ $GW ] && [ "$GW" != "null" ]); then
+                    maas $PROFILE subnet update $SUBNET_CIDR gateway_ip=$GW || true
+                fi
+                # Set ranges
+                SUBNET_PREFIX=${SUBNET_CIDR::-5}
+                IP_RES_RANGE_LOW="$SUBNET_PREFIX.1"
+                IP_RES_RANGE_HIGH="$SUBNET_PREFIX.39"
+                IP_DYNAMIC_RANGE_LOW="$SUBNET_PREFIX.40"
+                IP_DYNAMIC_RANGE_HIGH="$SUBNET_PREFIX.150"
+                maas $PROFILE ipranges create type=reserved \
+                     start_ip=$IP_RES_RANGE_LOW end_ip=$IP_RES_RANGE_HIGH \
+                     comment='This is a reserved range' || true
+                maas $PROFILE ipranges create type=dynamic \
+                    start_ip=$IP_DYNAMIC_RANGE_LOW end_ip=$IP_DYNAMIC_RANGE_HIGH \
+                    comment='This is a reserved dynamic range' || true
+                # Set DHCP
+                if [ $DHCP ]; then
+                    PRIMARY_RACK_CONTROLLER=$(maas $PROFILE rack-controllers read | jq -r '.[0].system_id')
+                    maas $PROFILE vlan update $FABRIC_ID $SP_VLAN dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
+                fi
+            fi
+        done
+        FAB_ID=$((FAB_ID+1))
+    done
+}
+
 enablesubnetanddhcp(){
     TEMP_CIDR=$1
     enabledhcp=$2
@@ -270,7 +338,7 @@ enablesubnetanddhcp(){
         SPACEID=$(maas $PROFILE space read internal-api | jq '.id')
         maas $PROFILE subnet update $TEMP_CIDR space=$SPACEID || true
         if [ "$enabledhcp" == "true" ]; then
-            maas $PROFILE vlan update $FABRIC_ID $VLAN_TAG dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
+            maas $PROFILE vlan update $FABRIC_ID $VLAN_UNTTAGED dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
         fi
     elif [ "$space" == "data" ]; then
         MY_GATEWAY=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="data")'.gateway | cut -d \" -f 2 `
@@ -281,7 +349,7 @@ enablesubnetanddhcp(){
         SPACEID=$(maas $PROFILE space read admin-api | jq '.id')
         maas $PROFILE subnet update $TEMP_CIDR space=$SPACEID || true
         if [ "$enabledhcp" == "true" ]; then
-            maas $PROFILE vlan update $FABRIC_ID $VLAN_TAG dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
+            maas $PROFILE vlan update $FABRIC_ID $VLAN_UNTTAGED dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
         fi
     elif [ "$space" == "public" ]; then
         MY_GATEWAY=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="data")'.public | cut -d \" -f 2 `
@@ -292,7 +360,7 @@ enablesubnetanddhcp(){
         SPACEID=$(maas $PROFILE space read public-api | jq '.id')
         maas $PROFILE subnet update $TEMP_CIDR space=$SPACEID || true
         if [ "$enabledhcp" == "true" ]; then
-            maas $PROFILE vlan update $FABRIC_ID $VLAN_TAG dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
+            maas $PROFILE vlan update $FABRIC_ID $VLAN_UNTTAGED dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
         fi
     elif [ "$space" == "storage" ]; then
         MY_GATEWAY=`cat labconfig.json | jq '.opnfv.spaces[] | select(.type=="data")'.storage | cut -d \" -f 2 `
@@ -303,7 +371,7 @@ enablesubnetanddhcp(){
         SPACEID=$(maas $PROFILE space read storage-data | jq '.id')
         maas $PROFILE subnet update $TEMP_CIDR space=$SPACEID || true
         if [ "$enabledhcp" == "true" ]; then
-            maas $PROFILE vlan update $FABRIC_ID $VLAN_TAG dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
+            maas $PROFILE vlan update $FABRIC_ID $VLAN_UNTTAGED dhcp_on=True primary_rack=$PRIMARY_RACK_CONTROLLER || true
         fi
     fi
 }
@@ -336,7 +404,7 @@ addnodes(){
     fi
 
     sudo virt-install --connect qemu:///system --name bootstrap --ram 4098 --cpu host --vcpus 2 --video \
-                 cirrus --arch x86_64 --disk size=20,format=qcow2,bus=virtio,io=native,pool=default \
+                 cirrus --arch x86_64 --disk size=20,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \
                  $netw --boot network,hd,menu=off --noautoconsole \
                  --vnc --print-xml | tee bootstrap
 
@@ -369,7 +437,7 @@ addnodes(){
            NODE_NAME=`cat labconfig.json | jq ".lab.racks[].nodes[$units].name" | cut -d \" -f 2 `
 
             sudo virt-install --connect qemu:///system --name $NODE_NAME --ram 8192 --cpu host --vcpus 4 \
-                     --disk size=120,format=qcow2,bus=virtio,io=native,pool=default \
+                     --disk size=120,format=qcow2,bus=virtio,cache=directsync,io=native,pool=default \
                      $netw $netw --boot network,hd,menu=off --noautoconsole --vnc --print-xml | tee $NODE_NAME
 
             nodemac=`grep  "mac address" $NODE_NAME | head -1 | cut -d '"' -f 2`
@@ -558,9 +626,10 @@ if [ -e ./labconfig.json ]; then
         NODE_SYS_ID=$(maas $PROFILE nodes read | jq -r ".[] |  select(.hostname==\"$NODE_NAME\")".system_id)
         echo ">>> Configuring node $NODE_NAME [$NODE_ID][$NODE_SYS_ID]"
         # Recover the network interfaces list and configure each one
-        #   with sorting the list, we have hardware interface first the vlan interfaces
-        IF_LIST=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].nics[] ".ifname | sort -u)
+        #   with sorting the list, we have hardware interface first, than the vlan interfaces
+        IF_LIST=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].nics[] ".ifname )
         for IF_NAME in $IF_LIST; do
+            # get the space of the interface
             IF_SPACE=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].nics[] | select(.ifname==\"$IF_NAME\") ".spaces[])
             case "$IF_SPACE" in
                 'data') SUBNET_CIDR=$SUBNETDATA_CIDR; IF_MODE='AUTO' ;;
@@ -578,7 +647,18 @@ if [ -e ./labconfig.json ]; then
                 IF_VLAN = ${IF_NAME##*.}; fi
 
             # in case of interface renaming
-            IF_NEWNAME=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].nics[] | select(.ifname==\"$IF_NAME\") ".rename)
+            IF_NEWNAME=$IF_NAME
+
+            if ([ $IF_NEWNAME ] && [ "$IF_NEWNAME" != "null" ]); then
+                # rename interface if needed
+                IF_MACLOWER=$( cat labconfig.json | jq ".lab.racks[0].nodes[$NODE_ID].nics[] | select(.ifname==\"$IF_NEWNAME\")".mac[0])
+                IF_MAC=(${IF_MACLOWER,,})
+                IF_ID=$( maas ubuntu interfaces read $NODE_SYS_ID | jq ".[] | select(.mac_address==$IF_MAC)".id)
+                if ([ $IF_ID ] && [ "$IF_ID" != "null" ]); then
+                    maas $PROFILE interface update $NODE_SYS_ID $IF_ID name=$IF_NEWNAME
+                    IF_NAME=$IF_NEWNAME
+                fi
+            fi
 
             # In case of a VLAN interface
             if ([ $IF_VLAN ] && [ "$IF_VLAN" != "null" ]); then
@@ -602,10 +682,6 @@ if [ -e ./labconfig.json ]; then
                     INTERFACE=$(maas $PROFILE interfaces read $NODE_SYS_ID | jq ".[] | select(.vlan.fabric_id==$FABRICID)".id)
                 fi
                 maas $PROFILE interfaces create-vlan $NODE_SYS_ID vlan=$VLANID parent=$INTERFACE || true
-            elif ([ $IF_NEWNAME ] && [ "$IF_NEWNAME" != "null" ]); then
-                # rename interface if needed
-                maas $PROFILE interface update $NODE_SYS_ID $IF_NAME name=$IF_NEWNAME
-                IF_NAME=$IF_NEWNAME
             fi
             # Configure the interface
             if ([ $SUBNET_CIDR ] && [ "$SUBNET_CIDR" != "null" ]); then