summaryrefslogtreecommitdiffstats
path: root/ci/config_tpl
diff options
context:
space:
mode:
authorNarinder Gupta <narinder.gupta@canonical.com>2016-10-16 07:54:56 -0500
committerNarinder Gupta <narinder.gupta@canonical.com>2016-10-16 23:43:55 -0500
commitf1dfc0776d32dea2a2fe7e2cb2b15b1836a6b666 (patch)
treeb75bd8543a4ba5cc7919c43588b2522201c88c90 /ci/config_tpl
parent498d228be6d2bb1f68b5d63813e01ecd68b315cd (diff)
cmodfiied to add juju 2.0 support.
Change-Id: I3981f796cfb9ceb9f32522f4fed831d66e389c48 Signed-off-by: Narinder Gupta <narinder.gupta@canonical.com>
Diffstat (limited to 'ci/config_tpl')
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/aodh.yaml8
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/bundle.yaml78
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/ceilometer.yaml21
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/ceph.yaml77
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/cinder.yaml38
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/congress.yaml11
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/glance.yaml28
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/haclusters.yaml83
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/harelations.yaml14
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/heat.yaml21
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/keystone.yaml26
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/mysql.yaml23
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/neutron-api.yaml43
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/neutron-gateway.yaml49
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/neutron-ovs.yaml29
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/nova-cloud-controller.yaml32
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/nova-compute.yaml47
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/oclphase1.yaml76
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/odl.yaml18
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/onos.yaml10
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/openstack-dashboard.yaml20
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/opnfv-promise.yaml6
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/phase2-overrides.yaml41
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/rabbitmq.yaml18
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/relations.yaml108
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/scaleio.yaml56
-rw-r--r--ci/config_tpl/juju2/bundle_tpl/subordinate.yaml77
-rw-r--r--ci/config_tpl/juju2/deployconfig.yaml48
-rw-r--r--ci/config_tpl/juju2/maas_tpl/deployment.yaml45
-rw-r--r--ci/config_tpl/juju2/maas_tpl/juju-bootstrap.yaml13
-rw-r--r--ci/config_tpl/juju2/maas_tpl/maas-network_config.yaml20
-rw-r--r--ci/config_tpl/juju2/maas_tpl/maas-node_group_ifaces.yaml23
-rw-r--r--ci/config_tpl/juju2/maas_tpl/maas-nodes.yaml28
-rw-r--r--ci/config_tpl/juju2/public-api-proxy.yaml14
34 files changed, 1249 insertions, 0 deletions
diff --git a/ci/config_tpl/juju2/bundle_tpl/aodh.yaml b/ci/config_tpl/juju2/bundle_tpl/aodh.yaml
new file mode 100644
index 00000000..ab5f6dbb
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/aodh.yaml
@@ -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
index 00000000..1698f0d3
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/bundle.yaml
@@ -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
index 00000000..24048105
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/ceilometer.yaml
@@ -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
index 00000000..f700594b
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/ceph.yaml
@@ -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
index 00000000..dd541f7f
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/cinder.yaml
@@ -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
index 00000000..07ae71c5
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/congress.yaml
@@ -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
index 00000000..eb812e9a
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/glance.yaml
@@ -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
index 00000000..1f1afb5a
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/haclusters.yaml
@@ -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
index 00000000..d4c4c064
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/harelations.yaml
@@ -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
index 00000000..aa676f19
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/heat.yaml
@@ -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
index 00000000..65c1f76c
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/keystone.yaml
@@ -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
index 00000000..b2540155
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/mysql.yaml
@@ -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
index 00000000..934e4660
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/neutron-api.yaml
@@ -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
index 00000000..df60012c
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/neutron-gateway.yaml
@@ -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
index 00000000..286132b5
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/neutron-ovs.yaml
@@ -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
index 00000000..2a7f8487
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/nova-cloud-controller.yaml
@@ -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
index 00000000..88c12b0c
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/nova-compute.yaml
@@ -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
index 00000000..28866fbe
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/oclphase1.yaml
@@ -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
index 00000000..b57e2843
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/odl.yaml
@@ -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
index 00000000..a59d584f
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/onos.yaml
@@ -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
index 00000000..aef9260b
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/openstack-dashboard.yaml
@@ -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
index 00000000..d2372871
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/opnfv-promise.yaml
@@ -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
index 00000000..a8dbd400
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/phase2-overrides.yaml
@@ -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
index 00000000..daf9a13a
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/rabbitmq.yaml
@@ -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
index 00000000..6d4d70c7
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/relations.yaml
@@ -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
index 00000000..0dae4294
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/scaleio.yaml
@@ -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
index 00000000..330961b6
--- /dev/null
+++ b/ci/config_tpl/juju2/bundle_tpl/subordinate.yaml
@@ -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
index 00000000..ead9ca15
--- /dev/null
+++ b/ci/config_tpl/juju2/deployconfig.yaml
@@ -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
index 00000000..b57ec01c
--- /dev/null
+++ b/ci/config_tpl/juju2/maas_tpl/deployment.yaml
@@ -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
index 00000000..533c62cc
--- /dev/null
+++ b/ci/config_tpl/juju2/maas_tpl/juju-bootstrap.yaml
@@ -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
index 00000000..6188a515
--- /dev/null
+++ b/ci/config_tpl/juju2/maas_tpl/maas-network_config.yaml
@@ -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
index 00000000..578c89fb
--- /dev/null
+++ b/ci/config_tpl/juju2/maas_tpl/maas-node_group_ifaces.yaml
@@ -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
index 00000000..e32dd7ca
--- /dev/null
+++ b/ci/config_tpl/juju2/maas_tpl/maas-nodes.yaml
@@ -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
index 00000000..02299aec
--- /dev/null
+++ b/ci/config_tpl/juju2/public-api-proxy.yaml
@@ -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"