New scripts for configs generation, based on jinja2 95/18095/1
authorDavid Blaisonneau <david.blaisonneau@orange.com>
Thu, 4 Aug 2016 15:37:15 +0000 (17:37 +0200)
committerDavid Blaisonneau <david.blaisonneau@orange.com>
Fri, 5 Aug 2016 14:50:35 +0000 (16:50 +0200)
Signed-off-by: David Blaisonneau <david.blaisonneau@orange.com>
36 files changed:
ci/00-maasdeploy.sh
ci/config_tpl/bundle_tpl/aodh.yaml [moved from ci/bundle_tpl/aodh.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/bundle.yaml [moved from ci/bundle_tpl/bundle.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/ceilometer.yaml [moved from ci/bundle_tpl/ceilometer.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/ceph.yaml [moved from ci/bundle_tpl/ceph.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/cinder.yaml [moved from ci/bundle_tpl/cinder.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/congress.yaml [moved from ci/bundle_tpl/congress.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/glance.yaml [moved from ci/bundle_tpl/glance.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/haclusters.yaml [moved from ci/bundle_tpl/haclusters.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/harelations.yaml [moved from ci/bundle_tpl/harelations.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/heat.yaml [moved from ci/bundle_tpl/heat.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/keystone.yaml [moved from ci/bundle_tpl/keystone.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/mysql.yaml [moved from ci/bundle_tpl/mysql.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/neutron-api.yaml [moved from ci/bundle_tpl/neutron-api.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/neutron-gateway.yaml [moved from ci/bundle_tpl/neutron-gateway.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/neutron-ovs.yaml [moved from ci/bundle_tpl/neutron-ovs.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/nova-cloud-controller.yaml [moved from ci/bundle_tpl/nova-cloud-controller.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/nova-compute.yaml [moved from ci/bundle_tpl/nova-compute.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/oclphase1.yaml [moved from ci/bundle_tpl/oclphase1.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/odl.yaml [moved from ci/bundle_tpl/odl.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/onos.yaml [moved from ci/bundle_tpl/onos.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/openstack-dashboard.yaml [moved from ci/bundle_tpl/openstack-dashboard.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/opnfv-promise.yaml [moved from ci/bundle_tpl/opnfv-promise.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/phase2-overrides.yaml [moved from ci/bundle_tpl/phase2-overrides.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/rabbitmq.yaml [moved from ci/bundle_tpl/rabbitmq.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/relations.yaml [moved from ci/bundle_tpl/relations.yaml with 100% similarity]
ci/config_tpl/bundle_tpl/subordinate.yaml [moved from ci/bundle_tpl/subordinate.yaml with 100% similarity]
ci/config_tpl/deployconfig.yaml [new file with mode: 0644]
ci/config_tpl/maas_tpl/deployment.yaml [new file with mode: 0644]
ci/config_tpl/maas_tpl/juju-bootstrap.yaml [new file with mode: 0644]
ci/config_tpl/maas_tpl/maas-network_config.yaml [new file with mode: 0644]
ci/config_tpl/maas_tpl/maas-node_group_ifaces.yaml [new file with mode: 0644]
ci/config_tpl/maas_tpl/maas-nodes.yaml [new file with mode: 0644]
ci/genBundle.py
ci/genDeploymentConfig.py [new file with mode: 0644]
ci/genMAASConfig.py [new file with mode: 0644]

index f25a36d..8b8a8d4 100755 (executable)
@@ -20,84 +20,66 @@ sudo apt-get install openssh-server bzr git maas-deployer juju juju-deployer \
 # absolute location of file (including file name) or url of the
 # file to download.
 
-if [ "$1" == "custom" ]; then
-    if [ -e $2 ]; then
-        cp $2 ./labconfig.yaml || true
-        python genmaasconfig.py
-    else
-        wget $2 -t 3 -T 10 -O ./labconfig.yaml || true
-        count=`wc -l labconfig.yaml  | cut -d " " -f 1`
-
-        if [ $count -lt 10 ]; then
-            rm -rf labconfig.yaml
+labname=$1
+labfile=$2
+
+#
+# Config preparation
+#
+
+# Get labconfig and generate deployment.yaml for MAAS and deployconfig.yaml
+case "$labname" in
+    intelpod[569]|orangepod[12]|cengnpod[12] )
+        array=(${labname//pod/ })
+        cp maas/${array[0]}/pod${array[0]}/labconfig.yaml .
+        python genDeploymentConfig.py > deployment.yaml
+        python genMAASConfig.py > deployconfig.yaml
+        ;;
+    'attvirpod1' )
+        cp maas/att/virpod1/labconfig.yaml .
+        python genDeploymentConfig.py > deployment.yaml
+        python genMAASConfig.py > deployconfig.yaml
+        ;;
+    'juniperpod1' )
+        cp maas/juniper/pod1/deployment.yaml ./deployment.yaml
+        ;;
+    'custom')
+        if [ -e $labfile ]; then
+            cp $labfile ./labconfig.yaml || true
         else
-            python genmaasconfig.py
+            wget $labconfigfile -t 3 -T 10 -O ./labconfig.yaml || true
+            count=`wc -l labconfig.yaml  | cut -d " " -f 1`
+            if [ $count -lt 10 ]; then
+                rm -rf labconfig.yaml
+            fi
         fi
-    fi
-
-    if [ ! -e ./labconfig.yaml ]; then
-        virtinstall=1
-        cp ../labconfig/default/deployment.yaml ./
-        cp ../labconfig/default/labconfig.yaml ./
-    fi
-    labname=`grep "maas_name" deployment.yaml | cut -d ':' -f 2 | sed -e 's/ //'`
-else
-    case "$1" in
-        'intelpod5' )
-            cp ../labconfig/intel/pod5/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'intelpod6' )
-            cp ../labconfig/intel/pod6/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'intelpod9' )
-            cp ../labconfig/intel/pod6/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'orangepod1' )
-            cp ../labconfig/orange/pod1/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'orangepod2' )
-            cp ../labconfig/orange/pod1/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'attvirpod1' )
-            cp ../labconfig/att/virpod1/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'juniperpod1' )
-            cp maas/juniper/pod1/deployment.yaml ./deployment.yaml
-            ;;
-        'cengnpod1' )
-            cp ../labconfig/cengn/pod1/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        'cengnpod2' )
-            cp ../labconfig/cengn/pod2/labconfig.yaml ./
-            #to be removed later once converted for all labs.
-            python genmaasconfig.py
-            ;;
-        * )
+        if [ ! -e ./labconfig.yaml ]; then
             virtinstall=1
-            labname="default"
-            ./cleanvm.sh
-            cp ../labconfig/default/deployment.yaml ./
-            cp ../labconfig/default/deployconfig.yaml ./
-            ;;
-    esac
+        else
+            python genDeploymentConfig.py > deployment.yaml
+            python genMAASConfig.py > deployconfig.yaml
+            labname=`grep "maas_name" deployment.yaml | cut -d ':' -f 2 | sed -e 's/ //'`
+        fi
+        ;;
+    * )
+        virtinstall=1
+        ;;
+esac
+
+# In the case of a virtual deployment get deployment.yaml and deployconfig.yaml
+if [ "$virtinstall" -eq 1 ]; then
+    labname="default"
+    ./cleanvm.sh
+    cp ../labconfig/default/deployment.yaml ./
+    cp ../labconfig/default/labconfig.yaml ./
+    cp ../labconfig/default/deployconfig.yaml ./
 fi
 
-#make sure no password asked during the deployment.
+#
+# Prepare local environment to avoid password asking
+#
 
+# make sure no password asked during the deployment.
 echo "$USER ALL=(ALL) NOPASSWD:ALL" > 90-joid-init
 
 if [ -e /etc/sudoers.d/90-joid-init ]; then
@@ -112,32 +94,25 @@ else
     sudo mv 90-joid-init /etc/sudoers.d/
 fi
 
-echo "... Deployment of maas Started ...."
-
 if [ ! -e $HOME/.ssh/id_rsa ]; then
     ssh-keygen -N '' -f $HOME/.ssh/id_rsa
 fi
 
-#define the pool and try to start even though its already exist.
-# For fresh install this may or may not there.
+echo "... Deployment of maas Started ...."
 
+#
+# Virsh preparation
+#
+
+# define the pool and try to start even though its already exist.
+# For fresh install this may or may not there.
 sudo apt-get install libvirt-bin -y
 sudo adduser $USER libvirtd
 sudo virsh pool-define-as default --type dir --target /var/lib/libvirt/images/ || true
 sudo virsh pool-start default || true
 sudo virsh pool-autostart default || true
 
-# To avoid problem between apiclient/maas_client and apiclient from google
-# we remove the package google-api-python-client from yardstick installer
-if [ $(pip list |grep google-api-python-client |wc -l) == 1 ]; then
-    sudo pip uninstall google-api-python-client
-fi
-
-sudo pip install shyaml
-juju init -f
-
-cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
-
+# In case of virtual install set network
 if [ "$virtinstall" -eq 1 ]; then
     sudo virsh net-dumpxml default > default-net-org.xml
     sudo sed -i '/dhcp/d' default-net-org.xml
@@ -147,65 +122,44 @@ if [ "$virtinstall" -eq 1 ]; then
     sudo virsh net-start default
 fi
 
-#Below function will mark the interfaces in Auto mode to enbled by MAAS
-enableautomode() {
-    listofnodes=`maas maas nodes list | grep system_id | cut -d '"' -f 4`
-    for nodes in $listofnodes
-    do
-        maas maas interface link-subnet $nodes $1  mode=$2 subnet=$3
-    done
-}
+# Ensure virsh can connect without ssh auth
+cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
 
-#Below function will mark the interfaces in Auto mode to enbled by MAAS
-# using hostname of the node added into MAAS
 
-enableautomodebyname() {
-    if [ ! -z "$4" ]; then
-        for i in `seq 1 7`;
-        do
-            nodes=`maas maas nodes list hostname=node$i-$4 | grep system_id | cut -d '"' -f 4`
-            if [ ! -z "$nodes" ]; then
-                maas maas interface link-subnet $nodes $1  mode=$2 subnet=$3
-            fi
-       done
-    fi
-}
+#
+# Cleanup, juju init and config backup
+#
 
-#Below function will create vlan and update interface with the new vlan
-# will return the vlan id created
-crvlanupdsubnet() {
-    newvlanid=`maas maas vlans create $2 name=$3 vid=$4 | grep resource | cut -d '/' -f 6 `
-    maas maas subnet update $5 vlan=$newvlanid
-    eval "$1"="'$newvlanid'"
-}
-
-#Below function will create interface with new vlan and bind to physical interface
-crnodevlanint() {
-    listofnodes=`maas maas nodes list | grep system_id | cut -d '"' -f 4`
-
-    for nodes in $listofnodes
-    do
-        parentid=`maas maas interface read $nodes $2 | grep interfaces | cut -d '/' -f 8`
-        maas maas interfaces create-vlan $nodes vlan=$1 parent=$parentid
-     done
- }
+# To avoid problem between apiclient/maas_client and apiclient from google
+# we remove the package google-api-python-client from yardstick installer
+if [ $(pip list |grep google-api-python-client |wc -l) == 1 ]; then
+    sudo pip uninstall google-api-python-client
+fi
 
-#just make sure the ssh keys added into maas for the current user
-sed --i "s@/home/ubuntu@$HOME@g" ./deployment.yaml
-sed --i "s@qemu+ssh://ubuntu@qemu+ssh://$USER@g" ./deployment.yaml
+# Init Juju
+juju init -f
 
+# Backup deployment.yaml and deployconfig.yaml in .juju folder
 cp ./deployment.yaml ~/.juju/
 
 if [ -e ./deployconfig.yaml ]; then
     cp ./deployconfig.yaml ~/.juju/
 fi
 
+#
+# MAAS deploy
+#
+
 sudo maas-deployer -c deployment.yaml -d --force
 
 sudo chown $USER:$USER environments.yaml
 
 echo "... Deployment of maas finish ...."
 
+#
+# MAAS Customization
+#
+
 maas_ip=`grep " ip_address" deployment.yaml | cut -d ':' -f 2 | sed -e 's/ //'`
 apikey=`grep maas-oauth: environments.yaml | cut -d "'" -f 2`
 maas login maas http://${maas_ip}/MAAS/api/1.0 ${apikey}
@@ -215,7 +169,7 @@ maas maas sshkeys new key="`cat $HOME/.ssh/id_rsa.pub`"
 maas maas sshkeys new key="`cat ./maas/sshkeys/QtipKey.pub`"
 maas maas sshkeys new key="`cat ./maas/sshkeys/DominoKey.pub`"
 
-#adding compute and control nodes VM to MAAS for deployment purpose.
+#adding compute and control nodes VM to MAAS for virtual deployment purpose.
 if [ "$virtinstall" -eq 1 ]; then
     # create two more VMs to do the deployment.
     sudo virt-install --connect qemu:///system --name node1-control --ram 8192 --vcpus 4 --disk size=120,format=qcow2,bus=virtio,io=native,pool=default --network bridge=virbr0,model=virtio --network bridge=virbr0,model=virtio --boot network,hd,menu=off --noautoconsole --vnc --print-xml | tee node1-control
@@ -248,49 +202,56 @@ if [ "$virtinstall" -eq 1 ]; then
     maas maas tag update-nodes compute add=$computenodeid
 fi
 
-#read interface needed in Auto mode and enable it. Will be rmeoved once auto enablement will be implemented in the maas-deployer.
-enable_if(){
-   if [ -e ~/.juju/deployconfig.yaml ]; then
-      cp ~/.juju/deployconfig.yaml ./deployconfig.yaml
-
-      enableiflist=`grep "interface-enable" deployconfig.yaml | cut -d ' ' -f 4 `
-      datanet=`grep "dataNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
-      stornet=`grep "storageNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
-      pubnet=`grep "publicNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
-
-      # split EXTERNAL_NETWORK=first ip;last ip; gateway;network
-
-      if [ "$datanet" != "''" ]; then
-          EXTNET=(${enableiflist//,/ })
-          i="0"
-          while [ ! -z "${EXTNET[i]}" ];
-          do
-              enableautomode ${EXTNET[i]} AUTO $datanet || true
-              i=$[$i+1]
-          done
-      fi
-      if [ "$stornet" != "''" ]; then
-          EXTNET=(${enableiflist//,/ })
-          i="0"
-          while [ ! -z "${EXTNET[i]}" ];
-          do
-              enableautomode ${EXTNET[i]} AUTO $stornet || true
-              i=$[$i+1]
-          done
-      fi
-      if [ "$pubnet" != "''" ]; then
-          EXTNET=(${enableiflist//,/ })
-          i="0"
-          while [ ! -z "${EXTNET[i]}" ];
-          do
-              enableautomode ${EXTNET[i]} AUTO $pubnet || true
-              i=$[$i+1]
-          done
-      fi
-   fi
+#
+# Functions for MAAS network customization
+#
+
+#Below function will mark the interfaces in Auto mode to enbled by MAAS
+enableautomode() {
+    listofnodes=`maas maas nodes list | grep system_id | cut -d '"' -f 4`
+    for nodes in $listofnodes
+    do
+        maas maas interface link-subnet $nodes $1  mode=$2 subnet=$3
+    done
 }
 
-# Enable vlan interfaces with maas
+#Below function will mark the interfaces in Auto mode to enbled by MAAS
+# using hostname of the node added into MAAS
+enableautomodebyname() {
+    if [ ! -z "$4" ]; then
+        for i in `seq 1 7`;
+        do
+            nodes=`maas maas nodes list hostname=node$i-$4 | grep system_id | cut -d '"' -f 4`
+            if [ ! -z "$nodes" ]; then
+                maas maas interface link-subnet $nodes $1  mode=$2 subnet=$3
+            fi
+       done
+    fi
+}
+
+#Below function will create vlan and update interface with the new vlan
+# will return the vlan id created
+crvlanupdsubnet() {
+    newvlanid=`maas maas vlans create $2 name=$3 vid=$4 | grep resource | cut -d '/' -f 6 `
+    maas maas subnet update $5 vlan=$newvlanid
+    eval "$1"="'$newvlanid'"
+}
+
+#Below function will create interface with new vlan and bind to physical interface
+crnodevlanint() {
+    listofnodes=`maas maas nodes list | grep system_id | cut -d '"' -f 4`
+
+    for nodes in $listofnodes
+    do
+        parentid=`maas maas interface read $nodes $2 | grep interfaces | cut -d '/' -f 8`
+        maas maas interfaces create-vlan $nodes vlan=$1 parent=$parentid
+     done
+ }
+
+#
+# VLAN customization
+#
+
 case "$labname" in
     'intelpod9' )
         maas refresh
@@ -305,6 +266,51 @@ case "$labname" in
         ;;
 esac
 
-enable_if
+#
+# Enable MAAS nodes interfaces
+#
+
+#read interface needed in Auto mode and enable it. Will be rmeoved once auto enablement will be implemented in the maas-deployer.
+if [ -e ~/.juju/deployconfig.yaml ]; then
+  cp ~/.juju/deployconfig.yaml ./deployconfig.yaml
+
+  enableiflist=`grep "interface-enable" deployconfig.yaml | cut -d ' ' -f 4 `
+  datanet=`grep "dataNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
+  stornet=`grep "storageNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
+  pubnet=`grep "publicNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
+
+  # split EXTERNAL_NETWORK=first ip;last ip; gateway;network
+
+  if [ "$datanet" != "''" ]; then
+      EXTNET=(${enableiflist//,/ })
+      i="0"
+      while [ ! -z "${EXTNET[i]}" ];
+      do
+          enableautomode ${EXTNET[i]} AUTO $datanet || true
+          i=$[$i+1]
+      done
+  fi
+  if [ "$stornet" != "''" ]; then
+      EXTNET=(${enableiflist//,/ })
+      i="0"
+      while [ ! -z "${EXTNET[i]}" ];
+      do
+          enableautomode ${EXTNET[i]} AUTO $stornet || true
+          i=$[$i+1]
+      done
+  fi
+  if [ "$pubnet" != "''" ]; then
+      EXTNET=(${enableiflist//,/ })
+      i="0"
+      while [ ! -z "${EXTNET[i]}" ];
+      do
+          enableautomode ${EXTNET[i]} AUTO $pubnet || true
+          i=$[$i+1]
+      done
+  fi
+fi
 
+#
+# End of scripts
+#
 echo " .... MAAS deployment finished successfully ...."
diff --git a/ci/config_tpl/deployconfig.yaml b/ci/config_tpl/deployconfig.yaml
new file mode 100644 (file)
index 0000000..3bc2ebc
--- /dev/null
@@ -0,0 +1,40 @@
+opnfv:
+{% set net_prefix = opnfv.spaces_dict.admin.cidr[:-4] %}
+  admNetgway: {{ opnfv.spaces_dict.admin.gateway }}
+  admNetwork: {{ net_prefix }}2
+  admin_password: openstack
+  ceph-disk: {{ opnfv.storage_dict.ceph.disk }}
+  dataNetwork: {{ opnfv.spaces_dict.data.cidr }}
+  domain: {{ lab.racks[0].osdomainname }}
+  ext-port: {{ lab.racks[0]['ext-port'] }}
+  ext_port: {{ lab.racks[0]['ext-port'] }}
+  floating-ip-range: {{ lab.racks[0]['floating-ip-range'] }}
+  interface-enable: {{ lab.racks[0].ifnamelist }}
+  os-domain-name: {{ lab.racks[0].osdomainname }}
+  publicNetwork: {{ opnfv.spaces_dict.public.cidr if 'public' in opnfv.spaces_dict else '' }}
+  spaces:
+{% for net in opnfv.spaces %}
+  - bridge: {{ net.bridge }}
+    cidr: {{ net.cidr }}
+    gateway: {{ net.gateway or '' }}
+    type: {{ net.type }}
+    vlan: {{ net.vlan or '' }}
+{% endfor %}
+  storage:
+{% for storage in opnfv.storage %}
+  - disk: {{ storage.disk }}
+    type: {{ storage.type }}
+{% endfor %}
+  storageNetwork: {{ opnfv.spaces_dict.storage.cidr if 'storage' in opnfv.spaces_dict else '' }}
+  units: {{ lab.racks[0].nodes|count }}
+  vip:
+    ceilometer: {{ net_prefix }}24
+    cinder: {{ net_prefix }}29
+    dashboard: {{ net_prefix }}21
+    glance: {{ net_prefix }}22
+    heat: {{ net_prefix }}28
+    keystone: {{ net_prefix }}23
+    mysql: {{ net_prefix }}25
+    neutron: {{ net_prefix }}27
+    nova: {{ net_prefix }}26
+    rabbitmq: {{ net_prefix }}20
diff --git a/ci/config_tpl/maas_tpl/deployment.yaml b/ci/config_tpl/maas_tpl/deployment.yaml
new file mode 100644 (file)
index 0000000..b57ec01
--- /dev/null
@@ -0,0 +1,45 @@
+opnfv-{{ lab.location }}{{ lab.racks[0].rack }}-maas:
+  juju-bootstrap:
+{% include 'juju-bootstrap.yaml' %}
+  maas:
+    apt_sources:
+    - ppa:maas/stable
+    - ppa:juju/stable
+    arch: amd64
+    boot_source:
+      keyring_filename: /usr/share/keyrings/ubuntu-cloudimage-keyring.gpg
+      selections:
+        '1':
+          arches: amd64
+          labels: release
+          os: ubuntu
+          release: xenial
+          subarches: '*'
+      url: http://maas.ubuntu.com/images/ephemeral-v2/releases/
+    disk_size: 160G
+    interfaces:
+{% for net in opnfv.spaces %}
+    - bridge={{ net.bridge }},model=virtio
+{% endfor %}
+    ip_address: {{ opnfv.spaces_dict.admin.cidr[:-4] }}5
+    memory: 4096
+    name: opnfv-{{ lab.location }}{{ lab.racks[0].rack }}
+    network_config: |
+{% include 'maas-network_config.yaml' %}
+    node_group_ifaces:
+{% include 'maas-node_group_ifaces.yaml' %}
+    nodes:
+{% include 'maas-nodes.yaml' %}
+    password: ubuntu
+    pool: default
+    release: trusty
+    settings:
+      maas_name: {{ lab.location }}{{ lab.racks[0].rack }}
+      main_archive: http://archive.ubuntu.com/ubuntu
+      upstream_dns: {{ lab.racks[0].dns }}
+    user: ubuntu
+    vcpus: 4
+    virsh:
+      rsa_priv_key: {{ os.home }}/.ssh/id_rsa
+      rsa_pub_key: {{ os.home }}/.ssh/id_rsa.pub
+      uri: qemu+ssh://{{ os.user }}@{{ os.brAdmIP }}/system
diff --git a/ci/config_tpl/maas_tpl/juju-bootstrap.yaml b/ci/config_tpl/maas_tpl/juju-bootstrap.yaml
new file mode 100644 (file)
index 0000000..533c62c
--- /dev/null
@@ -0,0 +1,13 @@
+    arch: amd64
+    disk_size: 60G
+    interfaces:
+{% for net in ['admin','public','external'] %}
+{% if net in opnfv.spaces_dict %}
+    - bridge={{ opnfv.spaces_dict[net].bridge }},model=virtio
+{% endif %}
+{% endfor %}
+    memory: 4096
+    name: bootstrap
+    pool: default
+    vcpus: 4
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/maas_tpl/maas-network_config.yaml b/ci/config_tpl/maas_tpl/maas-network_config.yaml
new file mode 100644 (file)
index 0000000..6188a51
--- /dev/null
@@ -0,0 +1,20 @@
+        auto lo
+            iface lo inet loopback
+{% set ethid = 0 %}
+{% for net in opnfv.spaces %}
+
+        auto eth{{ ethid }}
+            iface eth{{ ethid }} inet static
+            netmask 255.255.255.0
+{% if net.type!='external' %}
+{% set net_prefix = net.cidr[:-4] %}
+            address {{ net_prefix }}5
+{% else %}
+            address {{ net.ipaddress }}
+{% endif %}
+{% if net.type=='admin' %}
+            gateway {{ net.gateway }}
+            dns-nameservers {{ lab.racks[0].dns }} {{ net_prefix }}5 127.0.0.1
+{% endif %}
+{% set ethid = ethid+1 %}
+{% endfor %}
diff --git a/ci/config_tpl/maas_tpl/maas-node_group_ifaces.yaml b/ci/config_tpl/maas_tpl/maas-node_group_ifaces.yaml
new file mode 100644 (file)
index 0000000..578c89f
--- /dev/null
@@ -0,0 +1,23 @@
+{% set ethid = 0 %}
+{% for net in opnfv.spaces %}
+{% if net.type!='external' %}
+{% set net_prefix = net.cidr[:-4] %}
+    - broadcast_ip: {{ net_prefix }}255
+      device: eth{{ ethid }}
+      dynamic_range:
+        high: {{ net_prefix }}250
+        low: {{ net_prefix }}81
+      ip: {{ net_prefix }}5
+{% if net.gateway!= None %}
+      router_ip: {{ net.gateway }}
+{% endif %}
+{% if net.type!='admin' %}
+      management: 1
+{% endif %}
+      static_range:
+        high: {{ net_prefix }}80
+        low: {{ net_prefix }}50
+      subnet_mask: 255.255.255.0
+{% set ethid = ethid+1 %}
+{% endif %}
+{% endfor %}
diff --git a/ci/config_tpl/maas_tpl/maas-nodes.yaml b/ci/config_tpl/maas_tpl/maas-nodes.yaml
new file mode 100644 (file)
index 0000000..4b5a0ce
--- /dev/null
@@ -0,0 +1,28 @@
+{% for node in lab.racks[0].nodes %}
+{% if node.architecture=='x86_64' %}
+    - architecture: amd64/generic
+{% endif %}
+      interfaces:
+{% for nic in node.nics %}
+      - mac_address: {{ nic.mac[0] }}
+        mode: auto
+        name: {{ nic.ifname }}
+{% endfor %}
+      mac_addresses:
+{% for nic in node.nics %}
+      - {{ nic.mac[0] }}
+{% endfor %}
+      name: {{ node.name }}
+      power:
+{% if node.power.type=='ipmi' %}
+        address: {{ node.power.address }}
+        driver: LAN_2_0
+        pass: {{ node.power.pass }}
+        type: ipmi
+        user: {{ node.power.user }}
+{% elif node.power.type=='wakeonlan' %}
+        type: etherwake
+        mac_address: {{ node.power.mac_address }}
+{% endif %}
+      tags: {{ ' '.join(node.roles) }}
+{% endfor %}
index 8648ac3..9c6781b 100644 (file)
@@ -34,7 +34,7 @@ labconfig_file = options.lab
 
 scenarioconfig_file = 'default_deployment_config.yaml'
 # Capture our current directory
-TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/bundle_tpl'
+TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl/bundle_tpl'
 
 #
 # Prepare variables
@@ -186,8 +186,6 @@ if 'trusty' in extra:
     if 'liberty' in extra:
         config['os']['release'] = 'liberty'
 
-# pp(config)
-
 #
 # Transform template to bundle.yaml according to config
 #
@@ -204,4 +202,13 @@ env.globals.update(unit_ceph_qty=unit_ceph_qty)
 env.globals.update(to_select=to_select)
 
 # Render the template
-print(template.render(**config))
+output = template.render(**config)
+
+# Check output syntax
+try:
+    yaml.load(output)
+except yaml.YAMLError as exc:
+    print(exc)
+
+# print output
+print(output)
diff --git a/ci/genDeploymentConfig.py b/ci/genDeploymentConfig.py
new file mode 100644 (file)
index 0000000..d78c93f
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+This script generates a deployment config based on lab config file.
+
+Parameters:
+ -l, --lab      : lab config file
+"""
+
+from optparse import OptionParser
+from jinja2 import Environment, FileSystemLoader
+import os
+import yaml
+
+#
+# Parse parameters
+#
+
+parser = OptionParser()
+parser.add_option("-l", "--lab", dest="lab", help="lab config file")
+(options, args) = parser.parse_args()
+labconfig_file = options.lab
+
+#
+# Set Path and configs path
+#
+
+# Capture our current directory
+TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl'
+HOME = os.environ['HOME']
+USER = os.environ['USER']
+
+#
+# Prepare variables
+#
+
+# Prepare a storage for passwords
+passwords_store = dict()
+
+#
+# Local Functions
+#
+
+
+def load_yaml(filepath):
+    """Load YAML file"""
+    with open(filepath, 'r') as stream:
+        try:
+            return yaml.load(stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+
+#
+# Config import
+#
+
+# Load scenario Config
+config = load_yaml(labconfig_file)
+
+# Set a dict copy of opnfv/spaces
+config['opnfv']['spaces_dict'] = dict()
+for space in config['opnfv']['spaces']:
+    config['opnfv']['spaces_dict'][space['type']] = space
+
+# Set a dict copy of opnfv/storage
+config['opnfv']['storage_dict'] = dict()
+for storage in config['opnfv']['storage']:
+    config['opnfv']['storage_dict'][storage['type']] = storage
+
+# Add some OS environment variables
+config['os'] = {'home': HOME,
+                'user': USER,
+                }
+
+# Prepare interface-enable, more easy to do it here
+ifnamelist = set()
+for node in config['lab']['racks'][0]['nodes']:
+    for nic in node['nics']:
+        if 'admin' not in nic['spaces']:
+            ifnamelist.add(nic['ifname'])
+config['lab']['racks'][0]['ifnamelist'] = ', '.join(ifnamelist)
+
+#
+# Transform template to deployconfig.yaml according to config
+#
+
+# Create the jinja2 environment.
+env = Environment(loader=FileSystemLoader(TPL_DIR),
+                  trim_blocks=True)
+template = env.get_template('deployconfig.yaml')
+
+# Render the template
+output = template.render(**config)
+
+# Check output syntax
+try:
+    yaml.load(output)
+except yaml.YAMLError as exc:
+    print(exc)
+
+# print output
+print(output)
diff --git a/ci/genMAASConfig.py b/ci/genMAASConfig.py
new file mode 100644 (file)
index 0000000..2b4948d
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+This script generates a maas deployer config based on lab config file.
+
+Parameters:
+ -l, --lab      : lab config file
+"""
+
+from optparse import OptionParser
+from jinja2 import Environment, FileSystemLoader
+import os
+import yaml
+from pprint import pprint as pp
+import socket
+import fcntl
+import struct
+
+#
+# Parse parameters
+#
+
+parser = OptionParser()
+parser.add_option("-l", "--lab", dest="lab", help="lab config file")
+(options, args) = parser.parse_args()
+labconfig_file = options.lab
+
+#
+# Set Path and configs path
+#
+
+# Capture our current directory
+TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl/maas_tpl'
+HOME = os.environ['HOME']
+USER = os.environ['USER']
+
+#
+# Prepare variables
+#
+
+# Prepare a storage for passwords
+passwords_store = dict()
+
+#
+# Local Functions
+#
+
+
+def load_yaml(filepath):
+    """Load YAML file"""
+    with open(filepath, 'r') as stream:
+        try:
+            return yaml.load(stream)
+        except yaml.YAMLError as exc:
+            print(exc)
+
+
+def get_ip_address(ifname):
+    """Get local IP"""
+    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    return socket.inet_ntoa(fcntl.ioctl(
+        s.fileno(),
+        0x8915,  # SIOCGIFADDR
+        struct.pack('256s', bytes(ifname.encode('utf-8')[:15]))
+    )[20:24])
+
+
+#
+# Config import
+#
+
+# Load scenario Config
+config = load_yaml(labconfig_file)
+config['opnfv']['spaces_dict'] = dict()
+for space in config['opnfv']['spaces']:
+    config['opnfv']['spaces_dict'][space['type']] = space
+config['os'] = {'home': HOME,
+                'user': USER,
+                'brAdmIP': get_ip_address(config['opnfv']['spaces_dict']
+                                                ['admin']['bridge'])}
+
+# pp(config)
+
+#
+# Transform template to bundle.yaml according to config
+#
+
+# Create the jinja2 environment.
+env = Environment(loader=FileSystemLoader(TPL_DIR),
+                  trim_blocks=True)
+template = env.get_template('deployment.yaml')
+
+# Render the template
+output = template.render(**config)
+
+# Check output syntax
+try:
+    yaml.load(output)
+except yaml.YAMLError as exc:
+    print(exc)
+
+# print output
+print(output)