cmodfiied to add juju 2.0 support. 87/23187/8
authorNarinder Gupta <narinder.gupta@canonical.com>
Sun, 16 Oct 2016 12:54:56 +0000 (07:54 -0500)
committerNarinder Gupta <narinder.gupta@canonical.com>
Mon, 17 Oct 2016 04:43:55 +0000 (23:43 -0500)
Change-Id: I3981f796cfb9ceb9f32522f4fed831d66e389c48
Signed-off-by: Narinder Gupta <narinder.gupta@canonical.com>
41 files changed:
ci/00-maasdeploy.sh
ci/01-bootstrap.sh
ci/02-deploybundle.sh
ci/clean.sh
ci/cleanvm.sh
ci/config_tpl/juju2/bundle_tpl/aodh.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/bundle.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/ceilometer.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/ceph.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/cinder.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/congress.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/glance.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/haclusters.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/harelations.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/heat.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/keystone.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/mysql.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/neutron-api.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/neutron-gateway.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/neutron-ovs.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/nova-cloud-controller.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/nova-compute.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/oclphase1.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/odl.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/onos.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/openstack-dashboard.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/opnfv-promise.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/phase2-overrides.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/rabbitmq.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/relations.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/scaleio.yaml [new file with mode: 0644]
ci/config_tpl/juju2/bundle_tpl/subordinate.yaml [new file with mode: 0644]
ci/config_tpl/juju2/deployconfig.yaml [new file with mode: 0644]
ci/config_tpl/juju2/maas_tpl/deployment.yaml [new file with mode: 0644]
ci/config_tpl/juju2/maas_tpl/juju-bootstrap.yaml [new file with mode: 0644]
ci/config_tpl/juju2/maas_tpl/maas-network_config.yaml [new file with mode: 0644]
ci/config_tpl/juju2/maas_tpl/maas-node_group_ifaces.yaml [new file with mode: 0644]
ci/config_tpl/juju2/maas_tpl/maas-nodes.yaml [new file with mode: 0644]
ci/config_tpl/juju2/public-api-proxy.yaml [new file with mode: 0644]
ci/deploy.sh
ci/genBundle.py

index 7433438..0f47fec 100755 (executable)
@@ -70,7 +70,7 @@ esac
 # In the case of a virtual deployment get deployment.yaml and deployconfig.yaml
 if [ "$virtinstall" -eq 1 ]; then
     labname="default"
-    ./cleanvm.sh
+    ./cleanvm.sh || true
     cp ../labconfig/default/deployment.yaml ./
     cp ../labconfig/default/labconfig.yaml ./
     cp ../labconfig/default/deployconfig.yaml ./
@@ -137,8 +137,12 @@ if [ $(pip list |grep google-api-python-client |wc -l) == 1 ]; then
     sudo pip uninstall google-api-python-client
 fi
 
+#create backup directory
+mkdir ~/joid_config/ || true
+mkdir ~/.juju/ || true
+
 # Init Juju
-juju init -f
+juju init -f || true
 
 #
 # MAAS deploy
@@ -153,14 +157,18 @@ echo "... Deployment of maas finish ...."
 # Backup deployment.yaml and deployconfig.yaml in .juju folder
 
 cp ./environments.yaml ~/.juju/
+cp ./environments.yaml ~/joid_config/
 
 if [ -e ./deployconfig.yaml ]; then
     cp ./deployconfig.yaml ~/.juju/
     cp ./labconfig.yaml ~/.juju/
+    cp ./deployconfig.yaml ~/joid_config/
+    cp ./labconfig.yaml ~/joid_config/
 fi
 
 if [ -e ./deployment.yaml ]; then
     cp ./deployment.yaml ~/.juju/
+    cp ./deployment.yaml ~/joid_config/
 fi
 
 #
@@ -255,6 +263,35 @@ crnodevlanint() {
      done
  }
 
+#function for JUJU envronment
+
+addcredential() {
+    controllername=`awk 'NR==1{print $2}' environments.yaml`
+    cloudname=`awk 'NR==1{print $2}' environments.yaml`
+
+    echo  "credentials:" > credential.yaml
+    echo  "  $controllername:" >> credential.yaml
+    echo  "    opnfv-credentials:" >> credential.yaml
+    echo  "      auth-type: oauth1" >> credential.yaml
+    echo  "      maas-oauth: $apikey" >> credential.yaml
+
+    juju add-credential $controllername -f credential.yaml --replace
+}
+
+addcloud() {
+    controllername=`awk 'NR==1{print $2}' environments.yaml`
+    cloudname=`awk 'NR==1{print $2}' environments.yaml`
+
+    echo "clouds:" > maas-cloud.yaml
+    echo "   $cloudname:" >> maas-cloud.yaml
+    echo "      type: maas" >> maas-cloud.yaml
+    echo "      auth-types: [oauth1]" >> maas-cloud.yaml
+    echo "      endpoint: http://$maas_ip/MAAS" >> maas-cloud.yaml
+
+    juju add-cloud $cloudname maas-cloud.yaml --replace
+}
+
+
 #
 # VLAN customization
 #
@@ -278,8 +315,11 @@ esac
 #
 
 #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
+if [ -e ~/joid_config/deployconfig.yaml ]; then
+  cp ~/joid_config/deployconfig.yaml ./deployconfig.yaml
+elif [ -e ~/.juju/deployconfig.yaml ]; then
   cp ~/.juju/deployconfig.yaml ./deployconfig.yaml
+fi
 
   enableiflist=`grep "interface-enable" deployconfig.yaml | cut -d ' ' -f 4 `
   datanet=`grep "dataNetwork" deployconfig.yaml | cut -d ' ' -f 4 | sed -e 's/ //'`
@@ -317,6 +357,15 @@ if [ -e ~/.juju/deployconfig.yaml ]; then
   fi
 fi
 
+
+# Add the cloud and controller credentials for MAAS for that lab.
+jujuver=`juju --version`
+
+if [ "$jujuver" -ge "2" ]; then
+    addcloud
+    addcredential
+fi
+
 #
 # End of scripts
 #
index 59a2219..4a20ca2 100755 (executable)
@@ -4,11 +4,19 @@ set -ex
 
 #export JUJU_DEV_FEATURE_FLAGS=address-allocation
 
-juju bootstrap --debug --to bootstrap.maas
-sleep 5
-#disable juju gui until xenial charms are in charm store.
-juju deploy cs:juju-gui-130 --to 0
+jujuver=`juju --version`
 
-JUJU_REPOSITORY=
-juju set-constraints tags=
+if [ "$jujuver" -lt "2" ]; then
+  juju bootstrap --debug --to bootstrap.maas
+  sleep 5
+  #disable juju gui until xenial charms are in charm store.
+  juju deploy cs:juju-gui-130 --to 0
 
+  JUJU_REPOSITORY=
+  juju set-constraints tags=
+
+else
+  controllername=`awk 'NR==1{print $2}' environments.yaml`
+  cloudname=`awk 'NR==1{print $2}' environments.yaml`
+  juju bootstrap $controllername $cloudname --debug --to bootstrap.maas
+fi
index e3983a6..e561b39 100755 (executable)
@@ -14,6 +14,8 @@ opnfvdistro=$6
 #copy and download charms
 cp $opnfvsdn/fetch-charms.sh ./fetch-charms.sh
 
+jujuver=`juju --version`
+
 #modify the ubuntu series wants to deploy
 sed -i -- "s|distro=trusty|distro=$opnfvdistro|g" ./fetch-charms.sh
 
@@ -30,9 +32,9 @@ check_status() {
     while [ $retval -eq 0 ]; do
        sleep 30
        juju status > status.txt
-       if [ "$(grep -c "executing" status.txt )" -ge 2 ]; then
-           echo " still executing the reltionship within charms ..."
-           if [ $timeoutiter -ge 60 ]; then
+       if [ "$(grep -c "waiting" status.txt )" -ge 4 ]; then
+           echo " still waiting for machines ..."
+           if [ $timeoutiter -ge 240 ]; then
                retval=1
            fi
            timeoutiter=$((timeoutiter+1))
@@ -101,23 +103,29 @@ if [ "$osdomname" != "None" ]; then
     var=$var"_"publicapi
 fi
 
-#lets generate the bundle for all target using genBundle.py
-python genBundle.py  -l deployconfig.yaml  -s $var > bundles.yaml
-
-#keep the back in cloud for later debugging.
-pastebinit bundles.yaml || true
-
-echo "... Deployment Started ...."
-juju-deployer -vW -d -t 7200 -r 5 -c bundles.yaml $opnfvdistro-"$openstack"
+if [ "$jujuver" -lt "2" ]; then
+    #lets generate the bundle for all target using genBundle.py
+    python genBundle.py  -j 1 -l deployconfig.yaml  -s $var > bundles.yaml
+    #keep the back in cloud for later debugging.
+    pastebinit bundles.yaml || true
+    echo "... Deployment Started ...."
+    juju-deployer -vW -d -t 7200 -r 5 -c bundles.yaml $opnfvdistro-"$openstack"
+else
+    #lets generate the bundle for all target using genBundle.py
+    python genBundle.py -j 2  -l deployconfig.yaml  -s $var > bundles.yaml
+    #keep the back in cloud for later debugging.
+    pastebinit bundles.yaml || true
+    # with JUJU 2.0 bundles has to be deployed only once.
+    juju deploy bundles.yaml --debug
+    sleep 120
+    check_status
+fi
 
 #lets gather the status of deployment once juju-deployer completed.
 juju status --format=tabular
 
 # seeing issue related to number of open files.
-# juju run --service nodes 'echo 2048 | sudo tee /proc/sys/fs/inotify/max_user_instances'
-
 count=`juju status nodes --format=short | grep nodes | wc -l`
-
 c=0
 while [ $c -lt $count ]; do
     juju ssh nodes/$c 'echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p' || true
index db62a11..4c507b2 100755 (executable)
@@ -2,7 +2,20 @@
 
 set -ex
 
-if [ -d $HOME/.juju/environments ]; then
+if [ ! -d environments.yaml ]; then
+    cp ~/joid_config/environments.yaml ./environments.yaml
+fi
+
+jujuver=`juju --version`
+
+if [ "$jujuver" -ge "2" ]; then
+    controllername=`awk 'NR==1{print $2}' environments.yaml`
+    cloudname=`awk 'NR==1{print $2}' environments.yaml`
+    juju kill-controller $controllername --timeout 10s -y || true
+    rm -rf precise
+    rm -rf trusty
+    rm -rf xenial
+elif [ -d $HOME/.juju/environments ]; then
     echo " " > status.txt
     juju status  &>>status.txt || true
     if [ "$(grep -c "environment is not bootstrapped" status.txt )" -ge 1 ]; then
@@ -10,7 +23,7 @@ if [ -d $HOME/.juju/environments ]; then
     else
         echo " environment is bootstrapped ..."
         jujuenv=`juju status | grep environment | cut -d ":" -f 2`
-        juju destroy-environment $jujuenv  -y
+        juju destroy-environment $jujuenv  -y || true
     fi
     rm -rf precise
     rm -rf trusty
@@ -20,3 +33,4 @@ if [ -d $HOME/.juju/environments ]; then
     rm -rf $HOME/.juju/environments
     rm -rf $HOME/.juju/ssh
 fi
+
index b9bf370..c9acc90 100755 (executable)
@@ -6,7 +6,7 @@ set -ex
 # also along with envuronment destroy.
 
 echo " Cleanup Started ..."
-./clean.sh
+./clean.sh || true
  
 sudo virsh destroy node1-control || true
 sudo virsh destroy node3-control || true
diff --git a/ci/config_tpl/juju2/bundle_tpl/aodh.yaml b/ci/config_tpl/juju2/bundle_tpl/aodh.yaml
new file mode 100644 (file)
index 0000000..ab5f6db
--- /dev/null
@@ -0,0 +1,8 @@
+    aodh:
+      charm: "./{{ ubuntu.release }}/aodh"
+      num_units: 1
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+      to:
+        - "lxd:nodes/0"
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/bundle.yaml b/ci/config_tpl/juju2/bundle_tpl/bundle.yaml
new file mode 100644 (file)
index 0000000..1698f0d
--- /dev/null
@@ -0,0 +1,78 @@
+# vim: set ts=2 et:
+  series: {{ ubuntu.release }}
+  services:
+{% if os.hyperconverged %}
+    nodes:
+      charm: "cs:{{ ubuntu.release }}/ubuntu"
+      num_units: {{ opnfv.units }}
+{% else %}
+    nodes:
+      charm: "cs:{{ ubuntu.release }}/ubuntu"
+{% if os.ha.mode == 'ha' %}
+      num_units: 3
+{% else %}
+      num_units: 1
+{% endif %}
+      constraints: tags=control
+    nodes-compute:
+      charm: "cs:{{ ubuntu.release }}/ubuntu"
+{% if os.ha.mode == 'ha' %}
+      num_units: {{ opnfv.units - 3 }}
+{% else %}
+      num_units: {{ opnfv.units - 1 }}
+{% endif %}
+{% endif %}
+    ntp:
+      charm: "./{{ ubuntu.release }}/ntp"
+{% if os.network.controller == 'ocl' %}
+      options:
+        source: "0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org"
+        auto_peers: false
+{% endif %}
+{% include 'mysql.yaml' %}
+{% include 'ceilometer.yaml' %}
+{% if opnfv.storage_dict.scaleio is defined %}
+{% include 'scaleio.yaml' %}
+{% else %}
+{% include 'ceph.yaml' %}
+{% endif %}
+{% include 'cinder.yaml' %}
+{% include 'glance.yaml' %}
+{% if opnfv.storage_dict.ceph is defined %}
+{% include 'opnfv-promise.yaml' %}
+{% include 'congress.yaml' %}
+{% endif %}
+{% include 'keystone.yaml' %}
+{% include 'nova-cloud-controller.yaml' %}
+{% include 'nova-compute.yaml' %}
+{% include 'openstack-dashboard.yaml' %}
+{% include 'rabbitmq.yaml' %}
+{% include 'heat.yaml' %}
+{% include 'neutron-api.yaml' %}
+{% include 'neutron-gateway.yaml' %}
+{% include 'aodh.yaml' %}
+{% if os.network.controller == 'odl' %}
+{% include 'odl.yaml' %}
+{% elif os.network.controller == 'onos' %}
+{% include 'onos.yaml' %}
+{% elif os.network.controller == 'ocl' %}
+{% include 'oclphase1.yaml' %}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+{% include 'haclusters.yaml' %}
+{% endif %}
+{% include 'subordinate.yaml' %}
+
+{% if os.hyperconverged %}
+  relations:
+    - [ 'ntp:juju-info', 'nodes:juju-info' ]
+{% else %}
+  relations:
+    - [ 'ntp:juju-info', 'nodes:juju-info' ]
+    - [ 'ntp:juju-info', 'nodes-compute:juju-info' ]
+{% endif %}
+
+{% if os.ha.mode == 'ha' %}
+{% include 'harelations.yaml' %}
+{% endif %}
+{% include 'relations.yaml' %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/ceilometer.yaml b/ci/config_tpl/juju2/bundle_tpl/ceilometer.yaml
new file mode 100644 (file)
index 0000000..2404810
--- /dev/null
@@ -0,0 +1,21 @@
+    mongodb:
+      charm: ./{{ ubuntu.release }}/mongodb
+      num_units: 1
+      to:
+        - "lxd:nodes/0"
+    ceilometer:
+      charm: "./{{ ubuntu.release }}/ceilometer"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.ceilometer }}
+{% endif %}
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/ceph.yaml b/ci/config_tpl/juju2/bundle_tpl/ceph.yaml
new file mode 100644 (file)
index 0000000..f700594
--- /dev/null
@@ -0,0 +1,77 @@
+{% if opnfv.storage_dict.ceph is defined %}
+    ceph:
+      charm: "./{{ ubuntu.release }}/ceph"
+      num_units: {{ unit_ceph_qty() }}
+      options:
+        monitor-count: {{ unit_ceph_qty() }}
+        fsid: 5a791d94-980b-11e4-b6f6-3c970e8b1cf7
+        monitor-secret: AQAi5a9UeJXUExAA+By9u+GPhl8/XiUQ4nwI3A==
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if opnfv.spaces_dict.storage is defined %}
+        #ceph-cluster-network: {{ opnfv.spaces_dict.storage.cidr }}
+{% endif %}
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in to_select(unit_ceph_qty()) %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% if os.ha.mode == 'ha' %}
+{% for unit_id in range(0, 3) %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+        - "lxd:nodes/0"
+        - "lxd:nodes/0"
+        - "lxd:nodes/0"
+{% endif %}
+{% endif %}
+    ceph-osd:
+      charm: "./{{ ubuntu.release }}/ceph-osd"
+{% if os.hyperconverged %}
+      num_units: {{ opnfv.units }}
+{% else %}
+      num_units: 3
+{% endif %}
+      options:
+        osd-devices: {{ opnfv.storage_dict.ceph.disk }}
+        osd-reformat: 'yes'
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in range(0, opnfv.units) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% if os.ha.mode == 'ha' %}
+{% for unit_id in range(0, 3) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+        - "nodes/0"
+        - "nodes-compute/0"
+        - "nodes-compute/1"
+{% endif %}
+{% endif %}
+    ceph-radosgw:
+      charm: "./{{ ubuntu.release }}/ceph-radosgw"
+      num_units: {{ unit_qty() if os.beta.hacluster_ceph_radosgw else 1 }}
+      options:
+        region: {{ os.region }}
+        use-embedded-webserver: true
+        operator-roles: "Member,admin"
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+      to:
+{% for unit_id in to_select(unit_qty() if os.beta.hacluster_ceph_radosgw else 1) %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/cinder.yaml b/ci/config_tpl/juju2/bundle_tpl/cinder.yaml
new file mode 100644 (file)
index 0000000..dd541f7
--- /dev/null
@@ -0,0 +1,38 @@
+    cinder:
+      charm: "./{{ ubuntu.release }}/cinder"
+{% if opnfv.storage_dict.scaleio is defined %}
+      num_units: 1
+{% else %}
+      num_units: {{ unit_qty() }}
+{% endif %}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+        block-device: None
+        glance-api-version: 2
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.cinder }}
+{% endif %}
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+{% if opnfv.storage_dict.scaleio is defined %}
+        - "nodes/0"
+{% else %}
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/congress.yaml b/ci/config_tpl/juju2/bundle_tpl/congress.yaml
new file mode 100644 (file)
index 0000000..07ae71c
--- /dev/null
@@ -0,0 +1,11 @@
+    congress:
+      charm: "./{{ ubuntu.release }}/congress"
+      num_units: 1
+      options:
+        region: {{ os.region }}
+{% if ubuntu.release == 'trusty' %}
+        source-branch: "stable/{{ os.release  }}"
+{% endif %}
+      to:
+        - "lxd:nodes/0"
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/glance.yaml b/ci/config_tpl/juju2/bundle_tpl/glance.yaml
new file mode 100644 (file)
index 0000000..eb812e9
--- /dev/null
@@ -0,0 +1,28 @@
+    glance:
+      charm: "./{{ ubuntu.release }}/glance"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.glance }}
+{% endif %}
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/haclusters.yaml b/ci/config_tpl/juju2/bundle_tpl/haclusters.yaml
new file mode 100644 (file)
index 0000000..1f1afb5
--- /dev/null
@@ -0,0 +1,83 @@
+
+    hacluster-keystone:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-cinder:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+#    hacluster-heat:
+#      charm: "./{{ ubuntu.release }}/hacluster"
+#      options:
+#        corosync_transport: unicast
+#        cluster_count: 3
+{% if os.network.ipv6 %}
+#        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-horizon:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-nova:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-neutron:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-glance:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-ceilometer:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+    hacluster-mysql:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.beta.hacluster_ceph_radosgw %}
+    hacluster-ceph-radosgw:
+      charm: "./{{ ubuntu.release }}/hacluster"
+      options:
+        corosync_transport: unicast
+        cluster_count: 3
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/harelations.yaml b/ci/config_tpl/juju2/bundle_tpl/harelations.yaml
new file mode 100644 (file)
index 0000000..d4c4c06
--- /dev/null
@@ -0,0 +1,14 @@
+{% if os.ha.mode == 'ha' %}
+    - [ 'mysql:ha', 'hacluster-mysql:ha' ]
+    - [ 'cinder:ha', 'hacluster-cinder:ha' ]
+#    - [ 'heat:ha', 'hacluster-heat:ha' ]
+    - [ 'glance:ha', 'hacluster-glance:ha' ]
+    - [ 'keystone:ha', 'hacluster-keystone:ha' ]
+    - [ 'neutron-api:ha', 'hacluster-neutron:ha' ]
+    - [ 'nova-cloud-controller:ha', 'hacluster-nova:ha' ]
+    - [ 'openstack-dashboard:ha', 'hacluster-horizon:ha' ]
+    - [ 'ceilometer:ha', 'hacluster-ceilometer:ha' ]
+{% if os.beta.hacluster_ceph_radosgw %}
+    - [ 'ceph-radosgw:ha', 'hacluster-ceph-radosgw:ha' ]
+{% endif %}
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/heat.yaml b/ci/config_tpl/juju2/bundle_tpl/heat.yaml
new file mode 100644 (file)
index 0000000..aa676f1
--- /dev/null
@@ -0,0 +1,21 @@
+    heat:
+      charm: "./{{ ubuntu.release }}/heat"
+      num_units: 1
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+#        vip: {{ opnfv.vip.heat }}
+{% endif %}
+{% if os.beta.public_api %}
+#        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+        - "lxd:nodes/0"
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/keystone.yaml b/ci/config_tpl/juju2/bundle_tpl/keystone.yaml
new file mode 100644 (file)
index 0000000..65c1f76
--- /dev/null
@@ -0,0 +1,26 @@
+    keystone:
+      charm: "./{{ ubuntu.release }}/keystone"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+        admin-role: {{ os.admin.role }}
+        keystone-admin-role: {{ os.admin.role }}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+        admin-password: {{ opnfv.admin_password | default(os.admin.password) }}
+        admin-token: {{ os.admin.name }}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.keystone }}
+{% endif %}
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/mysql.yaml b/ci/config_tpl/juju2/bundle_tpl/mysql.yaml
new file mode 100644 (file)
index 0000000..b254015
--- /dev/null
@@ -0,0 +1,23 @@
+    mysql:
+      charm: "./{{ ubuntu.release }}/percona-cluster"
+      num_units: {{ unit_qty() }}
+      options:
+{% if os.ha.mode == 'ha' %}
+        innodb-buffer-pool-size: 10G
+{% else %}
+        innodb-buffer-pool-size: 1G
+{% endif %}
+        max-connections: 20000
+        root-password: {{ get_password('mysql_root') }}
+        sst-password: {{ get_password('mysql_sst') }}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.mysql }}
+{% endif %}
+        min-cluster-size: {{ unit_qty() }}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/neutron-api.yaml b/ci/config_tpl/juju2/bundle_tpl/neutron-api.yaml
new file mode 100644 (file)
index 0000000..934e466
--- /dev/null
@@ -0,0 +1,43 @@
+    neutron-api:
+      charm: "./{{ ubuntu.release }}/neutron-api"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+        neutron-security-groups: true
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.neutron }}
+{% endif %}
+{% if os.network.controller == 'nosdn' %}
+        flat-network-providers: "*"
+{% if os.network.dvr %}
+        overlay-network-type: vxlan
+{% endif %}
+{% elif os.network.controller == 'odl' %}
+        manage-neutron-plugin-legacy-mode: False
+{% elif os.network.controller == 'onos' %}
+        flat-network-providers: "*"
+        manage-neutron-plugin-legacy-mode: False
+{% endif %}
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+{% if os.network.dvr %}
+        enable-dvr: true
+{% endif %}
+{% if os.network.l2_population %}
+        l2-population: true
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/neutron-gateway.yaml b/ci/config_tpl/juju2/bundle_tpl/neutron-gateway.yaml
new file mode 100644 (file)
index 0000000..df60012
--- /dev/null
@@ -0,0 +1,49 @@
+    neutron-gateway:
+      charm: "./{{ ubuntu.release }}/neutron-gateway"
+      num_units: 1
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if opnfv.spaces_dict.data is defined %}
+        os-data-network: {{ opnfv.spaces_dict.data.cidr }}
+{% endif %}
+{% if os.network.controller == 'nosdn' %}
+{% if opnfv.ext_port is defined  %}
+{% if opnfv.data_port is defined  %}
+        bridge-mappings: physnet1:br-data external:br-ex
+        data-port: br-data:{{ opnfv.data_port }} br-ex:{{ opnfv.ext_port }}
+{% else %}
+        bridge-mappings: external:br-ex
+        data-port: br-ex:{{ opnfv.ext_port }}
+{% endif %}
+{% endif %}
+{% elif os.network.controller == 'onos' %}
+        plugin: onos
+{% if opnfv.ext_port is defined  %}
+{% if opnfv.data_port is defined  %}
+        bridge-mappings: physnet1:br-data external:br-ex
+        data-port: br-data:{{ opnfv.data_port }} br-ex:{{ opnfv.ext_port }}
+{% else %}
+        bridge-mappings: external:br-ex
+        data-port: br-ex:{{ opnfv.ext_port }}
+{% endif %}
+{% endif %}
+{% if os.network.sfc %}
+        profile: onos-sfc
+{% endif %}
+{% elif os.network.controller == 'odl' %}
+        plugin: ovs-odl
+{% if opnfv.ext_port is defined  %}
+        ext-port: {{ opnfv.ext_port }}
+{% endif %}
+{% else %}
+{% if opnfv.ext_port is defined  %}
+        ext-port: {{ opnfv.ext_port }}
+{% endif %}
+{% endif %}
+        instance-mtu: 1400
+      to:
+        - "nodes/0"
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/neutron-ovs.yaml b/ci/config_tpl/juju2/bundle_tpl/neutron-ovs.yaml
new file mode 100644 (file)
index 0000000..286132b
--- /dev/null
@@ -0,0 +1,29 @@
+    neutron-openvswitch:
+      charm: ./{{ ubuntu.release }}/neutron-openvswitch
+      options:
+{% if opnfv.spaces_dict.data is defined %}
+        os-data-network: {{ opnfv.spaces_dict.data.cidr }}
+{% endif %}
+{% if os.network.dpdk %}
+        enable-dpdk: true
+        #dpdk-driver: uio_pci_generic
+        #data-port: ""
+        #default-socket-memory: 1024
+        #default-socket-cores: 1
+{% endif %}
+{% if opnfv.ext_port is defined  %}
+{% if os.network.dvr %}
+{% if os.network.controller == 'nosdn' %}
+{% if opnfv.data_port is defined  %}
+        bridge-mappings: physnet1:br-data external:br-ex
+        data-port: br-data:{{ opnfv.data_port }} br-ex:{{ opnfv.ext_port }}
+{% else %}
+        bridge-mappings: external:br-ex
+        data-port: br-ex:{{ opnfv.ext_port }}
+{% endif %}
+{% else %}
+         ext-port: {{ opnfv.ext_port }}
+{% endif %}
+{% endif %}
+{% endif %}
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/nova-cloud-controller.yaml b/ci/config_tpl/juju2/bundle_tpl/nova-cloud-controller.yaml
new file mode 100644 (file)
index 0000000..2a7f848
--- /dev/null
@@ -0,0 +1,32 @@
+    nova-cloud-controller:
+      charm: "./{{ ubuntu.release }}/nova-cloud-controller"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        region: {{ os.region }}
+        #console-access-protocol: novnc
+        neutron-external-network: ext-net
+        service-guard: true
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.api.worker_multiplier %}
+        worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.nova }}
+{% endif %}
+{% if opnfv.domain is defined %}
+        console-proxy-ip: {{ opnfv.domain }}
+{% endif %}
+        network-manager: Neutron
+{% if os.beta.public_api %}
+        os-public-hostname: api.{{ opnfv.domain }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/nova-compute.yaml b/ci/config_tpl/juju2/bundle_tpl/nova-compute.yaml
new file mode 100644 (file)
index 0000000..88c12b0
--- /dev/null
@@ -0,0 +1,47 @@
+    nova-compute:
+      charm: "./{{ ubuntu.release }}/nova-compute"
+{% if os.hyperconverged %}
+      num_units: {{ opnfv.units - 1 }}
+{% else %}
+{% if os.ha.mode == 'ha' %}
+      num_units: {{ opnfv.units - 3 }}
+{% else %}
+      num_units: {{ opnfv.units - 1 }}
+{% endif %}
+{% endif %}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        enable-live-migration: true
+        enable-resize: true
+        migration-auth-type: ssh
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% if os.beta.huge_pages %}
+        hugepages: "50%"
+{% endif %}
+{% if os.lxd %}
+        virt-type: lxd
+{% endif %}
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in range(1, opnfv.units) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% if os.ha.mode == 'ha' %}
+{% for unit_id in range(0, opnfv.units - 3) %}
+        - "nodes-compute/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% for unit_id in range(0, opnfv.units - 1) %}
+        - "nodes-compute/{{ unit_id }}"
+{% endfor %}
+{% endif %}
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/oclphase1.yaml b/ci/config_tpl/juju2/bundle_tpl/oclphase1.yaml
new file mode 100644 (file)
index 0000000..28866fb
--- /dev/null
@@ -0,0 +1,76 @@
+    zookeeper:
+      charm: ./{{ ubuntu.release }}/zookeeper
+      num_units: {{ unit_qty() }}
+      series: {{ ubuntu.release }}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    cassandra:
+      charm: ./{{ ubuntu.release }}/cassandra
+      num_units: {{ unit_qty() }}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+      options:
+        authenticator: AllowAllAuthenticator
+    contrail-configuration:
+      charm: ./{{ ubuntu.release }}/contrail-configuration
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        install-sources: ppa:opencontrail/trunk-20160812
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.contrailconfig }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    contrail-control:
+      charm: ./{{ ubuntu.release }}/contrail-control
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        install-sources: ppa:opencontrail/trunk-20160812
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    contrail-analytics:
+      charm: ./{{ ubuntu.release }}/contrail-analytics
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        install-sources: ppa:opencontrail/trunk-20160812
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    contrail-webui:
+      charm: ./{{ ubuntu.release }}/contrail-webui
+      num_units: {{ unit_qty() }}
+      options:
+        install-sources: ppa:opencontrail/trunk-20160812
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    haproxy:
+      charm: ./{{ ubuntu.release }}/haproxy
+      num_units: {{ unit_qty() }}
+      options:
+        peering_mode: active-active
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+    kafka:
+      charm: ./{{ ubuntu.release }}/kafka
+      num_units: {{ unit_qty() }}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
+
diff --git a/ci/config_tpl/juju2/bundle_tpl/odl.yaml b/ci/config_tpl/juju2/bundle_tpl/odl.yaml
new file mode 100644 (file)
index 0000000..b57e284
--- /dev/null
@@ -0,0 +1,18 @@
+    odl-controller:
+      charm: ./{{ ubuntu.release }}/odl-controller
+      num_units: 1
+      options:
+        install-url: "https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.5.0-Boron/distribution-karaf-0.5.0-Boron.tar.gz"
+{% if os.network.sfc %}
+        profile: "openvswitch-odl-beryllium-sfc"
+{% elif os.network.bgpvpn %}
+        profile: "openvswitch-odl-beryllium-vpn"
+{% elif os.network.odll3 %}
+        profile: "openvswitch-odl-beryllium-l3"
+{% else %}
+        profile: "openvswitch-odl-boron"
+{% endif %}
+        http-proxy: "http://squid.internal:3128"
+        https-proxy: "http://squid.internal:3128"
+      to:
+        - "lxd:nodes/0"
diff --git a/ci/config_tpl/juju2/bundle_tpl/onos.yaml b/ci/config_tpl/juju2/bundle_tpl/onos.yaml
new file mode 100644 (file)
index 0000000..a59d584
--- /dev/null
@@ -0,0 +1,10 @@
+    onos-controller:
+      charm: ./{{ ubuntu.release }}/onos-controller
+      num_units: 1
+      options:
+{% if opnfv.ext_port is defined  %}
+        ext-port: {{ opnfv.ext_port }}
+{% endif %}
+        #gateway-mac: "default"
+      to:
+        - "lxd:nodes/0"
diff --git a/ci/config_tpl/juju2/bundle_tpl/openstack-dashboard.yaml b/ci/config_tpl/juju2/bundle_tpl/openstack-dashboard.yaml
new file mode 100644 (file)
index 0000000..aef9260
--- /dev/null
@@ -0,0 +1,20 @@
+    openstack-dashboard:
+      charm: "./{{ ubuntu.release }}/openstack-dashboard"
+      num_units: {{ unit_qty() }}
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+        secret: admin
+        webroot: /
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.dashboard }}
+{% endif %}
+{% if os.beta.public_api %}
+        endpoint-type: internalURL
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/opnfv-promise.yaml b/ci/config_tpl/juju2/bundle_tpl/opnfv-promise.yaml
new file mode 100644 (file)
index 0000000..d237287
--- /dev/null
@@ -0,0 +1,6 @@
+    opnfv-promise:
+      charm: ./{{ ubuntu.release }}/promise
+      num_units: 1
+      to:
+        - "lxd:nodes/0"
+{# Empty block to avoid bad block trim #}
diff --git a/ci/config_tpl/juju2/bundle_tpl/phase2-overrides.yaml b/ci/config_tpl/juju2/bundle_tpl/phase2-overrides.yaml
new file mode 100644 (file)
index 0000000..a8dbd40
--- /dev/null
@@ -0,0 +1,41 @@
+{% if opnfv.spaces_dict.storage is defined %}
+    #ceph-cluster-network: {{ opnfv.spaces_dict.storage.cidr }}
+{% endif %}
+{% if os.network.ipv6 %}
+    #prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+{% if os.api.haproxy_timeout %}
+    #haproxy-server-timeout: {{ os.api.haproxy_timeout }}
+    #haproxy-client-timeout: {{ os.api.haproxy_timeout }}
+    #haproxy-queue-timeout: {{ os.api.haproxy_timeout }}
+    #haproxy-connect-timeout: {{ os.api.haproxy_timeout }}
+{% endif %}
+{% endif %}
+{% if os.api.worker_multiplier %}
+    #worker-multiplier: {{ os.api.worker_multiplier }}
+{% endif %}
+{% if os.network.dvr %}
+    #enable-dvr: true
+{% endif %}
+{% if os.network.l2_population %}
+    #l2-population: true
+{% endif %}
+{% if ubuntu.release == 'trusty' %}
+    #source: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+{% endif %}
+{% if ubuntu.release == 'xenial' %}
+{% if os.release == 'newton' %}
+    #source: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+{% endif %}
+{% endif %}
+{% if os.ha.mode == 'nonha' %}
+{% if opnfv.storage_dict.ceph is defined %}
+    #ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% endif %}
+    #admin-role: {{ os.admin.role }}
+    #keystone-admin-role: {{ os.admin.role }}
+{% if os.beta.public_api %}
+    #use-internal-endpoints: true
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/rabbitmq.yaml b/ci/config_tpl/juju2/bundle_tpl/rabbitmq.yaml
new file mode 100644 (file)
index 0000000..daf9a13
--- /dev/null
@@ -0,0 +1,18 @@
+    rabbitmq-server:
+      charm: "./{{ ubuntu.release }}/rabbitmq-server"
+      num_units: {{ unit_qty() }}
+      options:
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% if os.network.ipv6 %}
+        prefer-ipv6: {{ os.network.ipv6 }}
+{% endif %}
+{% if os.ha.mode == 'ha' %}
+        vip: {{ opnfv.vip.rabbitmq }}
+        min-cluster-size: {{ unit_qty() }}
+{% endif %}
+      to:
+{% for unit_id in to_select() %}
+        - "lxd:nodes/{{ unit_id }}"
+{% endfor %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/relations.yaml b/ci/config_tpl/juju2/bundle_tpl/relations.yaml
new file mode 100644 (file)
index 0000000..6d4d70c
--- /dev/null
@@ -0,0 +1,108 @@
+    - [ 'nova-compute:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'neutron-gateway:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'keystone:shared-db', 'mysql:shared-db' ]
+    - [ 'nova-cloud-controller:identity-service', 'keystone:identity-service' ]
+    - [ 'glance:identity-service', 'keystone:identity-service' ]
+    - [ 'neutron-api:identity-service', 'keystone:identity-service' ]
+    - [ 'neutron-api:shared-db', 'mysql:shared-db' ]
+    - [ 'neutron-api:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'neutron-gateway:neutron-plugin-api', 'neutron-api:neutron-plugin-api' ]
+    - [ 'glance:shared-db', 'mysql:shared-db' ]
+    - [ 'glance:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'nova-cloud-controller:image-service', 'glance:image-service' ]
+    - [ 'nova-compute:image-service', 'glance:image-service' ]
+    - [ 'nova-cloud-controller:cloud-compute', 'nova-compute:cloud-compute' ]
+    - [ 'nova-cloud-controller:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'nova-cloud-controller:quantum-network-service', 'neutron-gateway:quantum-network-service' ]
+    - [ 'openstack-dashboard:identity-service', 'keystone:identity-service' ]
+    - [ 'nova-cloud-controller:shared-db', 'mysql:shared-db' ]
+    - [ 'nova-cloud-controller:neutron-api', 'neutron-api:neutron-api' ]
+    - [ 'cinder:image-service', 'glance:image-service' ]
+    - [ 'cinder:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'cinder:identity-service', 'keystone:identity-service' ]
+    - [ 'cinder:cinder-volume-service', 'nova-cloud-controller:cinder-volume-service' ]
+    - [ 'cinder:shared-db', 'mysql:shared-db' ]
+{% if opnfv.storage_dict.scaleio is defined %}
+    - [ 'cinder:storage-backend', 'scaleio-openstack:storage-backend' ]
+    - [ 'scaleio-mdm:scaleio-sds', 'scaleio-sds:scaleio-sds' ]
+#    - [ 'scaleio-mdm:scaleio-sds', 'scaleio-sds-pd2:scaleio-sds' ]
+    - [ 'scaleio-mdm:scaleio-mdm', 'scaleio-sdc:scaleio-mdm' ]
+    - [ 'scaleio-mdm:scaleio-mdm', 'scaleio-gw:scaleio-mdm' ]
+    - [ 'scaleio-openstack:scaleio-gw', 'scaleio-gw:scaleio-gw' ]
+    - [ 'nova-compute:ephemeral-backend', 'scaleio-openstack:ephemeral-backend' ]
+{% else %}
+    - [ 'cinder-ceph:storage-backend', 'cinder:storage-backend' ]
+    - [ 'ceph:client', 'nova-compute:ceph' ]
+    - [ 'ceph:client', 'cinder-ceph:ceph' ]
+    - [ 'ceph:client', 'glance:ceph' ]
+    - [ 'ceph-osd:mon', 'ceph:osd' ]
+    - [ 'ceph-radosgw:mon', 'ceph:radosgw' ]
+    - [ 'ceph-radosgw:identity-service', 'keystone:identity-service' ]
+    - [ 'congress:shared-db', 'mysql:shared-db' ]
+    - [ 'congress:identity-service', 'keystone:identity-service' ]
+    - [ 'congress:amqp', 'rabbitmq-server:amqp' ]
+{% endif %}
+    - [ 'ceilometer:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'ceilometer-agent:ceilometer-service', 'ceilometer:ceilometer-service' ]
+    - [ 'ceilometer:identity-service', 'keystone:identity-service' ]
+    - [ 'ceilometer:identity-notifications', 'keystone:identity-notifications' ]
+    - [ 'ceilometer-agent:nova-ceilometer', 'nova-compute:nova-ceilometer' ]
+    - [ 'ceilometer:shared-db', 'mongodb:database' ]
+    - [ 'heat:shared-db', 'mysql:shared-db' ]
+    - [ 'heat:identity-service', 'keystone:identity-service' ]
+    - [ 'heat:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'aodh:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'aodh:shared-db', 'mysql:shared-db' ]
+    - [ 'aodh:identity-service', 'keystone:identity-service' ]
+{% if os.lxd %}
+    - [ 'nova-compute:lxd', 'lxd:lxd' ]
+{% endif %}
+{% if os.network.controller == 'nosdn' %}
+    - [ 'neutron-openvswitch:amqp', 'rabbitmq-server:amqp' ]
+    - [ 'nova-compute:neutron-plugin', 'neutron-openvswitch:neutron-plugin' ]
+    - [ 'neutron-openvswitch:neutron-plugin-api', 'neutron-api:neutron-plugin-api' ]
+{% elif os.network.controller == 'odl' %}
+    - [ 'neutron-api:neutron-plugin-api-subordinate', 'neutron-api-odl:neutron-plugin-api-subordinate' ]
+    - [ 'nova-compute:neutron-plugin', 'openvswitch-odl:neutron-plugin' ]
+    - [ 'neutron-gateway', 'openvswitch-odl' ]
+    - [ 'openvswitch-odl:ovsdb-manager', 'odl-controller:ovsdb-manager' ]
+    - [ 'neutron-api-odl:odl-controller', 'odl-controller:controller-api' ]
+{% elif os.network.controller == 'onos' %}
+    - [ 'neutron-api:neutron-plugin-api-subordinate', 'neutron-api-onos:neutron-plugin-api-subordinate' ]
+    - [ 'nova-compute:neutron-plugin', 'openvswitch-onos:neutron-plugin' ]
+    - [ 'neutron-gateway', 'openvswitch-onos' ]
+    - [ 'openvswitch-onos:ovsdb-manager', 'onos-controller:ovsdb-manager' ]
+    - [ 'neutron-api-onos:onos-controller', 'onos-controller:controller-api' ]
+{% elif os.network.controller == 'ocl' %}
+    - [ 'kafka', 'zookeeper' ]
+    - [ 'contrail-configuration:cassandra', 'cassandra:database' ]
+    - [ 'contrail-configuration:contrail-analytics-api', 'contrail-analytics:contrail-analytics-api' ]
+    - [ 'contrail-configuration', 'zookeeper' ]
+    - [ 'contrail-configuration', 'rabbitmq-server' ]
+    - [ 'contrail-configuration', 'keystone' ]
+    - [ 'contrail-configuration', 'haproxy' ]
+    - [ 'contrail-analytics:cassandra', 'cassandra:database' ]
+    - [ 'contrail-analytics:contrail-api', 'contrail-configuration:contrail-api' ]
+    - [ 'contrail-analytics:contrail-discovery', 'contrail-configuration:contrail-discovery' ]
+    - [ 'contrail-analytics', 'kafka' ]
+    - [ 'contrail-analytics', 'zookeeper' ]
+    - [ 'contrail-analytics', 'keystone' ]
+    - [ 'contrail-analytics', 'haproxy' ]
+    - [ 'contrail-control:contrail-discovery', 'contrail-configuration:contrail-discovery' ]
+    - [ 'contrail-control:contrail-ifmap', 'contrail-configuration:contrail-ifmap' ]
+    - [ 'contrail-control:contrail-api', 'contrail-configuration:contrail-api' ]
+    - [ 'contrail-control', 'keystone' ]
+    - [ 'neutron-api-contrail', 'contrail-configuration' ]
+    - [ 'neutron-api-contrail', 'keystone' ]
+    - [ 'contrail-webui', 'keystone' ]
+    - [ 'contrail-webui:contrail_api', 'contrail-configuration:contrail-api' ]
+    - [ 'contrail-webui:contrail_discovery', 'contrail-configuration:contrail-discovery' ]
+    - [ 'contrail-webui:cassandra', 'cassandra:database' ]
+    - [ 'contrail-webui', 'haproxy' ]
+    - [ 'neutron-contrail', 'keystone' ]
+    - [ 'neutron-contrail:contrail-discovery', 'contrail-configuration:contrail-discovery' ]
+    - [ 'neutron-contrail:contrail-api', 'contrail-configuration:contrail-api' ]
+    - [ 'haproxy', 'keepalived' ]
+    - [ 'ceilometer', 'ceilometer-contrail' ]
+    - [ 'ceilometer-contrail', 'contrail-analytics' ]
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/scaleio.yaml b/ci/config_tpl/juju2/bundle_tpl/scaleio.yaml
new file mode 100644 (file)
index 0000000..0dae429
--- /dev/null
@@ -0,0 +1,56 @@
+{% if opnfv.storage_dict.scaleio is defined %}
+    scaleio-mdm:
+      charm: "./{{ ubuntu.release }}/scaleio-mdm"
+      num_units: {{ unit_scaleio_qty() }}
+      options:
+        cluster-mode: 3
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in range(0, 3) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+        - "nodes/0"
+        - "nodes-compute/0"
+        - "nodes-compute/1"
+{% endif %}
+    scaleio-sds:
+      charm: "./{{ ubuntu.release }}/scaleio-sds"
+      num_units: {{ opnfv.units }}
+      options:
+        protection-domain: 'pd1'
+        device-paths: {{ opnfv.storage_dict.scaleio.disk }}
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in range(0, opnfv.units) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% for unit_id in range(0, opnfv.units) %}
+        - "{{ unit_id }}"
+{% endfor %}
+{% endif %}
+    scaleio-sdc:
+      charm: "./{{ ubuntu.release }}/scaleio-sdc"
+      num_units: {{ opnfv.units }}
+      to:
+{% if os.hyperconverged %}
+{% for unit_id in range(0, opnfv.units) %}
+        - "nodes/{{ unit_id }}"
+{% endfor %}
+{% else %}
+{% for unit_id in range(0, opnfv.units) %}
+        - "{{ unit_id }}"
+{% endfor %}
+{% endif %}
+    scaleio-gw:
+      charm: "./{{ ubuntu.release }}/scaleio-gw"
+      num_units: 1
+      to:
+        - "nodes/0"
+    scaleio-gui:
+      charm: "./{{ ubuntu.release }}/scaleio-gui"
+      num_units: 1
+      to:
+        - "nodes/0"
+{% endif %}
diff --git a/ci/config_tpl/juju2/bundle_tpl/subordinate.yaml b/ci/config_tpl/juju2/bundle_tpl/subordinate.yaml
new file mode 100644 (file)
index 0000000..330961b
--- /dev/null
@@ -0,0 +1,77 @@
+
+    ceilometer-agent:
+      charm: ./{{ ubuntu.release }}/ceilometer-agent
+      options:
+        openstack-origin: "cloud:{{ ubuntu.release }}-{{ os.release }}"
+{% if os.beta.public_api %}
+        use-internal-endpoints: true
+{% endif %}
+{% if opnfv.storage_dict.ceph is defined %}
+    cinder-ceph:
+      charm: ./{{ ubuntu.release }}/cinder-ceph
+      options:
+{% if opnfv.storage_dict.ceph is defined %}
+        ceph-osd-replication-count: {{ unit_ceph_qty() }}
+{% endif %}
+{% endif %}
+{% if os.network.controller == 'nosdn' %}
+{% include 'neutron-ovs.yaml' %}
+{% elif os.network.controller == 'odl' %}
+    neutron-api-odl:
+      charm: ./{{ ubuntu.release }}/neutron-api-odl
+      options:
+        overlay-network-type: 'vxlan'
+        security-groups: True
+    openvswitch-odl:
+      charm: ./{{ ubuntu.release }}/openvswitch-odl
+      options:
+{% if opnfv.spaces_dict.data is defined %}
+        os-data-network: {{ opnfv.spaces_dict.data.cidr }}
+{% endif %}
+{% elif os.network.controller == 'onos' %}
+    neutron-api-onos:
+      charm: ./{{ ubuntu.release }}/neutron-api-onos
+      options:
+        overlay-network-type: 'vxlan'
+        security-groups: True
+    openvswitch-onos:
+      charm: ./{{ ubuntu.release }}/openvswitch-onos
+      options:
+{% if opnfv.spaces_dict.data is defined %}
+        os-data-network: {{ opnfv.spaces_dict.data.cidr }}
+{% endif %}
+{% if os.network.sfc %}
+        profile: onos-sfc
+{% endif %}
+{% elif os.network.controller == 'ocl' %}
+    ceilometer-contrail:
+      charm: ./{{ ubuntu.release }}/ceilometer-contrail
+      options:
+        install-sources: ppa:opencontrail/trunk-20160812
+    neutron-api-contrail:
+      charm: ./{{ ubuntu.release }}/neutron-api-contrail
+      options:
+        install-sources: ppa:opencontrail/trunk-20160812
+    neutron-contrail:
+      charm: ./{{ ubuntu.release }}/neutron-contrail
+      options:
+        install-sources: ppa:opencontrail/trunk-20160812
+    keepalived:
+      charm: ./{{ ubuntu.release }}/keepalived
+      options:
+        router-id: 1
+{% if os.ha.mode == 'ha' %}
+        virtual-ip: {{ opnfv.vip.keepalived }}
+{% endif %}
+{% endif %}
+{% if os.lxd %}
+    lxd:
+      charm: ./{{ ubuntu.release }}/lxd
+      options:
+{% endif %}
+{% if opnfv.storage_dict.scaleio is defined %}
+    scaleio-openstack:
+      charm: ./{{ ubuntu.release }}/scaleio-openstack
+      options:
+        protection-domains: 'pd1'
+{% endif %}
diff --git a/ci/config_tpl/juju2/deployconfig.yaml b/ci/config_tpl/juju2/deployconfig.yaml
new file mode 100644 (file)
index 0000000..ead9ca1
--- /dev/null
@@ -0,0 +1,48 @@
+opnfv:
+{% set net_prefix = opnfv.spaces_dict.admin.cidr[:-4] %}
+  admNetgway: {{ opnfv.spaces_dict.admin.gateway }}
+  admNetwork: {{ net_prefix }}2
+  admin_password: openstack
+{% if opnfv.storage_dict.ceph is defined %}
+  ceph-disk: {{ opnfv.storage_dict.ceph.disk }}
+{% endif %}
+{% if opnfv.spaces_dict.data is defined %}
+  dataNetwork: {{ opnfv.spaces_dict.data.cidr }}
+{% endif %}
+  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 }}
+{% if opnfv.spaces_dict.public is defined %}
+  publicNetwork: {{ opnfv.spaces_dict.public.cidr }}
+{% endif %}
+  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 %}
+{% if opnfv.spaces_dict.storage is defined %}
+  storageNetwork: {{ opnfv.spaces_dict.storage.cidr }}
+{% endif %}
+  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/juju2/maas_tpl/deployment.yaml b/ci/config_tpl/juju2/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/juju2/maas_tpl/juju-bootstrap.yaml b/ci/config_tpl/juju2/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/juju2/maas_tpl/maas-network_config.yaml b/ci/config_tpl/juju2/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/juju2/maas_tpl/maas-node_group_ifaces.yaml b/ci/config_tpl/juju2/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/juju2/maas_tpl/maas-nodes.yaml b/ci/config_tpl/juju2/maas_tpl/maas-nodes.yaml
new file mode 100644 (file)
index 0000000..e32dd7c
--- /dev/null
@@ -0,0 +1,28 @@
+{% for node in lab.racks[0].nodes %}
+    - interfaces:
+{% for nic in node.nics %}
+      - mac_address: {{ nic.mac[0] }}
+        mode: auto
+        name: {{ nic.ifname }}
+{% endfor %}
+{% if node.architecture=='x86_64' %}
+      architecture: amd64/generic
+{% endif %}
+      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: ether_wake
+        mac_address: {{ node.power.mac_address }}
+{% endif %}
+      tags: {{ ' '.join(node.roles) }}
+{% endfor %}
diff --git a/ci/config_tpl/juju2/public-api-proxy.yaml b/ci/config_tpl/juju2/public-api-proxy.yaml
new file mode 100644 (file)
index 0000000..02299ae
--- /dev/null
@@ -0,0 +1,14 @@
+    haproxy:
+      charm: "local:{{ opnfv.distro }}/haproxy"
+      num_units: 1
+      options:
+        services: |-
+{% for service in public_api_services.values() %}
+          - service_name: {{ service.name }}
+            service_host: {{ public_api_ip }}
+            service_port: {{ service.port }}
+            service_options: [mode http, balance leastconn]
+            servers: [[{{ service.name }}, {{ service.ip }}, {{ service.port }}, 'maxconn 100 cookie S0 check']]
+{% endfor %}
+      to:
+        - "nodes=0"
index 48c0d6e..15f6e47 100755 (executable)
@@ -65,14 +65,6 @@ while getopts ":s:t:o:l:h:r:f:d:a:" opt; do
     esac
 done
 
-deploy_dep() {
-    sudo apt-add-repository ppa:juju/stable -y
-    sudo apt-get update
-    sudo apt-get install juju git juju-deployer -y
-    juju init -f
-    cp environments.yaml ~/.juju/
-}
-
 #by default maas creates two VMs in case of three more VM needed.
 createresource() {
     maas_ip=`grep " ip_address" deployment.yaml | cut -d " "  -f 10`
@@ -109,15 +101,23 @@ deploy() {
 
     if [ ! -f ./environments.yaml ] && [ -e ~/.juju/environments.yaml ]; then
         cp ~/.juju/environments.yaml ./environments.yaml
+    elif [ ! -f ./environments.yaml ] && [ -e ~/joid_config/environments.yaml ]; then
+        cp ~/joid_config/environments.yaml ./environments.yaml
     fi
     if [ ! -f ./deployment.yaml ] && [ -e ~/.juju/deployment.yaml ]; then
         cp ~/.juju/deployment.yaml ./deployment.yaml
+    elif [ ! -f ./deployment.yaml ] && [ -e ~/joid_config/deployment.yaml ]; then
+        cp ~/joid_config/deployment.yaml ./deployment.yaml
     fi
     if [ ! -f ./labconfig.yaml ] && [ -e ~/.juju/labconfig.yaml ]; then
         cp ~/.juju/labconfig.yaml ./labconfig.yaml
+    elif [ ! -f ./labconfig.yaml ] && [ -e ~/joid_config/labconfig.yaml ]; then
+        cp ~/joid_config/labconfig.yaml ./labconfig.yaml
     fi
     if [ ! -f ./deployconfig.yaml ] && [ -e ~/.juju/deployconfig.yaml ]; then
         cp ~/.juju/deployconfig.yaml ./deployconfig.yaml
+    elif [ ! -f ./deployconfig.yaml ] && [ -e ~/joid_config/deployconfig.yaml ]; then
+        cp ~/joid_config/deployconfig.yaml ./deployconfig.yaml
     fi
 
     #copy the script which needs to get deployed as part of ofnfv release
@@ -129,6 +129,7 @@ deploy() {
     echo "        default-series: $opnfvdistro" >> environments.yaml
 
     cp environments.yaml ~/.juju/
+    cp environments.yaml ~/joid_config/
 
     if [[ "$opnfvtype" = "ha" && "$opnfvlab" = "default" ]]; then
         createresource
@@ -150,7 +151,7 @@ check_status() {
        juju status > status.txt
        if [ "$(grep -c "executing" status.txt )" -ge 1 ]; then
            echo " still executing the reltionship within charms ..."
-           if [ $timeoutiter -ge 90 ]; then
+           if [ $timeoutiter -ge 120 ]; then
                retval=1
            fi
            timeoutiter=$((timeoutiter+1))
index 55f3f6e..3eecdf4 100644 (file)
@@ -12,7 +12,9 @@ Parameters:
 
 from optparse import OptionParser
 from jinja2 import Environment, FileSystemLoader
+from distutils.version import LooseVersion, StrictVersion
 import os
+import subprocess
 import random
 import yaml
 import sys
@@ -34,7 +36,12 @@ labconfig_file = options.lab
 
 scenarioconfig_file = 'default_deployment_config.yaml'
 # Capture our current directory
-TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl/bundle_tpl'
+jujuver = subprocess.check_output(["juju", "--version"])
+
+if LooseVersion(jujuver) >= LooseVersion('2'):
+    TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl/juju2/bundle_tpl'
+else:
+    TPL_DIR = os.path.dirname(os.path.abspath(__file__))+'/config_tpl/bundle_tpl'
 
 #
 # Prepare variables