From 11f53d6d57fca16bdda070ec3996a0fd9f2a0be5 Mon Sep 17 00:00:00 2001 From: Blaisonneau David Date: Tue, 21 Mar 2017 15:06:59 +0100 Subject: [PATCH] correct of maas deploy and orange pod2 update MAAS deploy correction to manage heterogeneous hardware (different interfaces mapping or naming amoung nodes, and configuration of a VLAN on an interface without network_cidr) Change-Id: Ib3825bd8600cf62637cee85779d9ee0a55f896c4 Signed-off-by: Blaisonneau David --- ci/03-maasdeploy.sh | 174 ++++++++++++----------------------- labconfig/orange/pod2/labconfig.yaml | 52 +++++------ 2 files changed, 84 insertions(+), 142 deletions(-) diff --git a/ci/03-maasdeploy.sh b/ci/03-maasdeploy.sh index 39a7609b..329931e2 100755 --- a/ci/03-maasdeploy.sh +++ b/ci/03-maasdeploy.sh @@ -452,19 +452,6 @@ echo "... Deployment of maas finish ...." # Functions for MAAS network customization # -#Below function will mark the interfaces in Auto mode to enbled by MAAS -enableautomode() { - API_KEY=`sudo maas-region apikey --username=ubuntu` - maas login $PROFILE $API_SERVERMAAS $API_KEY - vlanid=$(maas $PROFILE subnet read $3 | jq -r '.vlan.id') - - for node in $(maas $PROFILE nodes read | jq -r '.[].system_id') - do - maas $PROFILE interface update $node $1 vlan=$vlanid - maas $PROFILE interface link-subnet $node $1 mode=$2 subnet=$3 || true - done -} - #Below function will mark the interfaces in Auto mode to enbled by MAAS # using hostname of the node added into MAAS enableautomodebyname() { @@ -558,114 +545,69 @@ esac # # Enable MAAS nodes interfaces # +API_KEY=`sudo maas-region apikey --username=ubuntu` +maas login $PROFILE $API_SERVERMAAS $API_KEY -#read interface needed in Auto mode and enable it. Will be rmeoved once auto enablement will be implemented in the maas-deployer. -# Enable only non vlan interfaces first. if [ -e ./labconfig.json ]; then - if [ $SUBNETDATA_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="data")'.ifname | sort -u` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ -z $VLAN ] || [ "$VLAN" == "null" ]); then - enableautomode ${EXTNET[i]} AUTO $SUBNETDATA_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETPUB_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="public")'.ifname | sort -u` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ -z $VLAN ] || [ "$VLAN" == "null" ]); then - enableautomode ${EXTNET[i]} AUTO $SUBNETPUB_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETSTOR_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="storage")'.ifname | sort -u` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ -z $VLAN ] || [ "$VLAN" == "null" ]); then - enableautomode ${EXTNET[i]} AUTO $SUBNETSTOR_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETFLOAT_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="floating")'.ifname | sort -u` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ -z $VLAN ] || [ "$VLAN" == "null" ]); then - enableautomode ${EXTNET[i]} link_up $SUBNETFLOAT_CIDR || true - fi - i=$[$i+1] - done - fi -fi - -#enable only the vlan interfaces which were ignore in previous run. + # We will configure all node, so we need the qty, and loop on it + NODE_QTY=$(cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[]'.name | wc -l) + NODE_QTY=$((NODE_QTY-1)) + for NODE_ID in $(seq 0 $NODE_QTY); do + # Get the NAME/SYS_ID of this node + NODE_NAME=$(cat labconfig.json | jq --raw-output ".lab.racks[0].nodes[$NODE_ID].name") + 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) + for IF_NAME in $IF_LIST; do + 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' ;; + 'public') SUBNET_CIDR=$SUBNETPUB_CIDR; IF_MODE='AUTO' ;; + 'storage') SUBNET_CIDR=$SUBNETSTOR_CIDR; IF_MODE='AUTO' ;; + 'floating') SUBNET_CIDR=$SUBNETFLOAT_CIDR; IF_MODE='link_up' ;; + *) SUBNET_CIDR='null'; IF_MODE='null'; echo " >>> Unknown SPACE" ;; + esac + echo " >>> Configuring interface $IF_NAME [$IF_SPACE][$SUBNET_CIDR]" + + # if we have a vlan parameter in the space config + IF_VLAN=$(cat labconfig.json | jq --raw-output ".opnfv.spaces[] | select(.type==\"$IF_SPACE\")".vlan) + if ([ -z $IF_VLAN ] && [ $IF_NAME =~ \. ]); then + # We have no vlan specified on spaces, but we have a vlan subinterface + IF_VLAN = ${IF_NAME##*.}; fi + + # In case of a VLAN interface + if ([ $IF_VLAN ] && [ "$IF_VLAN" != "null" ]); then + echo " >>> Configuring VLAN $IF_VLAN" + VLANID=$(maas $PROFILE subnets read | jq ".[].vlan | select(.vid==$IF_VLAN)".id) + FABRICID=$(maas $PROFILE subnets read | jq ".[].vlan | select(.vid==$IF_VLAN)".fabric_id) + INTERFACE=$(maas $PROFILE interfaces read $NODE_SYS_ID | jq ".[] | select(.vlan.fabric_id==$FABRICID)".id) + if [[ -z $INTERFACE ]]; then + # parent interface is not set because it does not have a SUBNET_CIDR + PARENT_VLANID=$(maas $PROFILE fabrics read | jq ".[].vlans[] | select(.fabric_id==$FABRICID and .name==\"untagged\")".id) + # We set the physical interface to the targeted fabric + PARENT_IF_NAME=${IF_NAME%%.*} + maas $PROFILE interface update $NODE_SYS_ID $PARENT_IF_NAME vlan=$PARENT_VLANID + sleep 3 + 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 + fi -if [ -e ./labconfig.json ]; then - if [ $SUBNETDATA_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="data")'.ifname | sort -u` - VLAN=`cat labconfig.json | jq --raw-output '.opnfv.spaces[] | select(.type=="data")'.vlan` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ $VLAN ] && [ "$VLAN" != "null" ]); then - crnodevlanint $VLAN || true - enableautomode ${EXTNET[i]} AUTO $SUBNETDATA_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETPUB_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="public")'.ifname | sort -u` - VLAN=`cat labconfig.json | jq --raw-output '.opnfv.spaces[] | select(.type=="public")'.vlan` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ $VLAN ] && [ "$VLAN" != "null" ]); then - crnodevlanint $VLAN || true - enableautomode ${EXTNET[i]} AUTO $SUBNETPUB_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETSTOR_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="storage")'.ifname | sort -u` - VLAN=`cat labconfig.json | jq --raw-output '.opnfv.spaces[] | select(.type=="storage")'.vlan` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ $VLAN ] && [ "$VLAN" != "null" ]); then - crnodevlanint $VLAN || true - enableautomode ${EXTNET[i]} AUTO $SUBNETSTOR_CIDR || true - fi - i=$[$i+1] - done - fi - if [ $SUBNETFLOAT_CIDR ]; then - EXTNET=`cat labconfig.json | jq --raw-output '.lab.racks[0].nodes[].nics[] | select(.spaces[]=="floating")'.ifname | sort -u` - VLAN=`cat labconfig.json | jq --raw-output '.opnfv.spaces[] | select(.type=="floating")'.vlan` - i="0" - while [ ! -z "${EXTNET[i]}" ]; - do - if ([ $VLAN ] && [ "$VLAN" != "null" ]); then - crnodevlanint $VLAN || true - enableautomode ${EXTNET[i]} link_up $SUBNETFLOAT_CIDR || true - fi - i=$[$i+1] - done - fi + # Configure the interface + if ([ $SUBNET_CIDR ] && [ "$SUBNET_CIDR" != "null" ]); then + VLANID=$(maas $PROFILE subnet read $SUBNET_CIDR | jq -r '.vlan.id') + maas $PROFILE interface update $NODE_SYS_ID $IF_NAME vlan=$VLANID + maas $PROFILE interface link-subnet $NODE_SYS_ID $IF_NAME mode=$IF_MODE subnet=$SUBNET_CIDR || true + sleep 5 + else + echo " >>> Not configuring, we have an empty Subnet CIDR" + fi + done + done fi - # Add the cloud and controller credentials for MAAS for that lab. jujuver=`juju --version` diff --git a/labconfig/orange/pod2/labconfig.yaml b/labconfig/orange/pod2/labconfig.yaml index 5d19043f..402df37a 100644 --- a/labconfig/orange/pod2/labconfig.yaml +++ b/labconfig/orange/pod2/labconfig.yaml @@ -9,19 +9,19 @@ lab: nics: - ifname: eno1 spaces: [admin] - mac: ["38:63:bb:3f:1d:8c"] - - ifname: ens3f0.2056 + mac: ["1c:98:ec:11:ad:08"] + - ifname: eno2.2056 spaces: [public] - mac: ["a0:36:9f:4e:88:38"] - - ifname: ens3f0 + mac: ["1c:98:ec:11:ad:09"] + - ifname: eno2 spaces: [floating] - mac: ["a0:36:9f:4e:88:38"] - - ifname: ens3f1 + mac: ["1c:98:ec:11:ad:09"] + - ifname: eno3 spaces: [data] - mac: ["a0:36:9f:4e:88:3a"] + mac: ["1c:98:ec:11:ad:0a"] power: type: ipmi - address: 10.0.0.16 + address: 10.0.0.22 user: Administrator pass: opnfv2017 - name: rack-2-m2 @@ -30,19 +30,19 @@ lab: nics: - ifname: eno1 spaces: [admin] - mac: ["38:63:bb:44:34:84"] - - ifname: ens3f0.2056 + mac: ["1c:98:ec:11:c2:c4"] + - ifname: eno2.2056 spaces: [public] - mac: ["a0:36:9f:4e:8b:0c"] - - ifname: ens3f0 + mac: ["1c:98:ec:11:c2:c5"] + - ifname: eno2 spaces: [floating] - mac: ["a0:36:9f:4e:8b:0c"] - - ifname: ens3f1 + mac: ["1c:98:ec:11:c2:c5"] + - ifname: eno3 spaces: [data] - mac: ["a0:36:9f:4e:8b:0e"] + mac: ["1c:98:ec:11:c2:c6"] power: type: ipmi - address: 10.0.0.17 + address: 10.0.0.23 user: Administrator pass: opnfv2017 - name: rack-2-m3 @@ -51,19 +51,19 @@ lab: nics: - ifname: eno1 spaces: [admin] - mac: ["38:63:bb:3f:bc:c8"] - - ifname: ens3f0.2056 + mac: ["1c:98:ec:11:9d:c4"] + - ifname: eno2.2056 spaces: [public] - mac: ["a0:36:9f:4e:88:5c"] - - ifname: ens3f0 + mac: ["1c:98:ec:11:9c:c5"] + - ifname: eno2 spaces: [floating] - mac: ["a0:36:9f:4e:88:5c"] - - ifname: ens3f1 + mac: ["1c:98:ec:11:9c:c5"] + - ifname: eno3 spaces: [data] - mac: ["a0:36:9f:4e:88:5e"] + mac: ["1c:98:ec:11:9c:c6"] power: type: ipmi - address: 10.0.0.18 + address: 10.0.0.24 user: Administrator pass: opnfv2017 - name: rack-2-m4 @@ -121,7 +121,7 @@ opnfv: - type: nosdn storage: - type: ceph - disk: /dev/sdb + disk: /dev/sdb /deb/sdc feature: odl_l2 spaces: - type: admin @@ -138,7 +138,7 @@ opnfv: bridge: brApi cidr: 10.2.1.0/24 gateway: - vlan: + vlan: 2056 - type: floating bridge: brFloating cidr: -- 2.16.6