summaryrefslogtreecommitdiffstats
path: root/ci
diff options
context:
space:
mode:
authorNarinder Gupta <narinder.gupta@canoncial.com>2015-08-29 14:31:22 -0500
committerNarinder Gupta <narinder.gupta@canoncial.com>2015-08-29 14:36:03 -0500
commitb5c5f74a35b7c2a3413bfac94811d8e6035aa3ae (patch)
tree56745cbb089883fb3c5708c654136b31bcd51fc4 /ci
parent62101c28c8245ebe97c548669c27cd2899cbfbab (diff)
restructure the directory structure so that we can have directories per
SDN and then we can have same structure for new distro by adding just the yaml file. Deleted the old file structure. Change-Id: Ibd544c340fdb53813bc34ee8ff6931ed4b4dee6c JIRA:JOID-1
Diffstat (limited to 'ci')
-rwxr-xr-xci/01-bootstrap.sh11
-rwxr-xr-x[-rw-r--r--]ci/01-deploybundle.sh (renamed from ci/intel/pod5/kilo/odl/deploy.sh)2
-rw-r--r--ci/README0
-rw-r--r--ci/deploy.sh23
-rw-r--r--ci/intel/pod5/environment.yaml (renamed from ci/intel/pod5/kilo/odl/environment.yaml)0
-rw-r--r--ci/intel/pod5/kilo/odl/ha/deploy.sh13
-rw-r--r--ci/intel/pod5/kilo/odl/ha/environment.yaml36
-rw-r--r--ci/intel/pod5/master/odl/deploy.sh14
-rw-r--r--ci/intel/pod5/master/odl/environment.yaml36
-rw-r--r--ci/intel/pod5/master/odl/ha/deploy.sh14
-rw-r--r--ci/intel/pod5/master/odl/ha/environment.yaml36
-rw-r--r--ci/intel/pod5/master/odl/ovs-odl-tip.yaml126
-rwxr-xr-xci/odl/01-deploybundle.sh19
-rw-r--r--ci/odl/README87
-rwxr-xr-xci/odl/cloud-sh-odl/cloud-setup.sh10
-rwxr-xr-xci/odl/cloud-sh-odl/compute.sh8
-rw-r--r--ci/odl/cloud-sh-odl/config.sh30
-rw-r--r--ci/odl/cloud-sh-odl/config.yaml18
-rwxr-xr-xci/odl/cloud-sh-odl/deploy.sh2
-rw-r--r--ci/odl/cloud-sh-odl/environments.yaml8
-rwxr-xr-xci/odl/cloud-sh-odl/glance.sh8
-rwxr-xr-xci/odl/cloud-sh-odl/lxc-network.sh18
-rwxr-xr-xci/odl/cloud-sh-odl/openstack.sh146
-rwxr-xr-xci/odl/fetch-charms.sh19
-rw-r--r--ci/odl/juju-deployer/odl.yaml80
-rw-r--r--ci/odl/juju-deployer/ovs-odl-ha.yaml (renamed from ci/intel/pod5/kilo/odl/ha/ovs-odl.yaml)0
-rw-r--r--ci/odl/juju-deployer/ovs-odl-tip.yaml (renamed from ci/intel/pod5/master/odl/ha/ovs-odl-tip.yaml)0
-rw-r--r--ci/odl/juju-deployer/ovs-odl.yaml (renamed from ci/intel/pod5/kilo/odl/ovs-odl.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/cinder-master.yaml (renamed from ci/intel/pod5/master/odl/source/cinder-master.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/glance-master.yaml (renamed from ci/intel/pod5/master/odl/source/glance-master.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/horizon-master.yaml (renamed from ci/intel/pod5/master/odl/source/horizon-master.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/keystone-master.yaml (renamed from ci/intel/pod5/master/odl/source/keystone-master.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/neutron-master.yaml (renamed from ci/intel/pod5/master/odl/source/neutron-master.yaml)0
-rw-r--r--ci/odl/juju-deployer/source/nova-master.yaml (renamed from ci/intel/pod5/master/odl/source/nova-master.yaml)0
-rwxr-xr-xci/opencontrail/01-deploybundle.sh19
-rw-r--r--ci/opencontrail/README113
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/cloud-setup.sh29
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/compute.sh8
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-precise.sh51
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-precise.yaml40
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-trusty-juno.sh51
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-trusty-juno.yaml40
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-trusty.sh45
-rw-r--r--ci/opencontrail/cloud-sh-contrail/config-trusty.yaml18
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/deploy-precise.sh2
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/deploy-trusty-juno.sh2
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/deploy-trusty.sh2
-rw-r--r--ci/opencontrail/cloud-sh-contrail/environments.yaml8
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/glance.sh8
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/lxc-network.sh18
-rwxr-xr-xci/opencontrail/cloud-sh-contrail/openstack.sh193
-rwxr-xr-xci/opencontrail/fetch-charms.sh27
-rw-r--r--ci/opencontrail/juju-deployer/contrail-ha.yaml149
-rw-r--r--ci/opencontrail/juju-deployer/contrail-tip.yaml149
-rw-r--r--ci/opencontrail/juju-deployer/contrail.yaml191
-rwxr-xr-xci/opencontrail/juju-deployer/scripts/cloud-setup.sh29
-rwxr-xr-xci/opencontrail/juju-deployer/scripts/glance.sh8
-rwxr-xr-xci/opencontrail/juju-deployer/scripts/openstack.sh48
-rw-r--r--ci/opencontrail/juju-deployer/source/cinder-master.yaml10
-rw-r--r--ci/opencontrail/juju-deployer/source/glance-master.yaml10
-rw-r--r--ci/opencontrail/juju-deployer/source/horizon-master.yaml10
-rw-r--r--ci/opencontrail/juju-deployer/source/keystone-master.yaml10
-rw-r--r--ci/opencontrail/juju-deployer/source/neutron-master.yaml19
-rw-r--r--ci/opencontrail/juju-deployer/source/nova-master.yaml13
64 files changed, 1808 insertions, 276 deletions
diff --git a/ci/01-bootstrap.sh b/ci/01-bootstrap.sh
new file mode 100755
index 00000000..c04ae2da
--- /dev/null
+++ b/ci/01-bootstrap.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -ex
+
+juju bootstrap --debug --to bootstrap.maas
+sleep 5
+juju deploy juju-gui --to 0
+
+JUJU_REPOSITORY=
+juju set-constraints tags=
+
diff --git a/ci/intel/pod5/kilo/odl/deploy.sh b/ci/01-deploybundle.sh
index 1c80d978..f88cf861 100644..100755
--- a/ci/intel/pod5/kilo/odl/deploy.sh
+++ b/ci/01-deploybundle.sh
@@ -2,7 +2,7 @@
#placeholder for deployment script.
set -ex
-cp intel/pod5/kilo/odl/ovs-odl.yaml ./
+cp odl/juju-deployer/ovs-odl.yaml ./
echo "... Deployment Started ...."
diff --git a/ci/README b/ci/README
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/ci/README
diff --git a/ci/deploy.sh b/ci/deploy.sh
index b70a5d3e..9f263f37 100644
--- a/ci/deploy.sh
+++ b/ci/deploy.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+<<<<<<< HEAD
#placeholder for deployment script.
set -ex
@@ -13,3 +14,25 @@ echo "bootstrap finished"
./deployopnfv.sh
+=======
+
+set -ex
+./01-bootstrap.sh
+
+#need to put mutiple cases here where decide this bundle to deploy by default use the odl bundle.
+
+#case deploy opencontrail
+#cp ./opencontrail/01-deploybundle.sh ./01-deploybundle.sh
+
+#case deploy ODL bundle
+cp ./odl/01-deploybundle.sh ./01-deploybundle.sh
+
+#case default:
+./01-deploybundle.sh
+
+#case ha:
+#./01-deploybundle.sh ha
+
+#case tip
+#./01-deploybundle.sh tip
+>>>>>>> 3b30953... Added a script to have a openstack with odl bundle.
diff --git a/ci/intel/pod5/kilo/odl/environment.yaml b/ci/intel/pod5/environment.yaml
index 10f7637b..10f7637b 100644
--- a/ci/intel/pod5/kilo/odl/environment.yaml
+++ b/ci/intel/pod5/environment.yaml
diff --git a/ci/intel/pod5/kilo/odl/ha/deploy.sh b/ci/intel/pod5/kilo/odl/ha/deploy.sh
deleted file mode 100644
index 5e8044be..00000000
--- a/ci/intel/pod5/kilo/odl/ha/deploy.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-#placeholder for deployment script.
-set -ex
-
-cp intel/pod5/kilo/odl/ha/ovs-odl.yaml ./
-
-echo "Deployment Started ...."
-
-JUJU_REPOSITORY=
-juju set-constraints tags=
-juju-deployer -d -r 13 -c ovs-odl.yaml trusty-kilo
-
-echo "... Deployment finished"
diff --git a/ci/intel/pod5/kilo/odl/ha/environment.yaml b/ci/intel/pod5/kilo/odl/ha/environment.yaml
deleted file mode 100644
index 10f7637b..00000000
--- a/ci/intel/pod5/kilo/odl/ha/environment.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-default: maas
-environments:
- # https://juju.ubuntu.com/docs/config-maas.html
- maas:
- type: maas
-
- # maas-server specifies the location of the MAAS server. It must
- # specify the base path.
- #
- maas-server: 'http://10.4.1.1/MAAS/'
-
- # maas-oauth holds the OAuth credentials from MAAS.
- #
- maas-oauth: 'c6tcQz4tyS3ALajCtF:sqcWhw8MkxTjUDLZrm:hBhszBLv5EqrY8h6yktFXWUT5825ShvE'
-
- # maas-server bootstrap ssh connection options
- #
-
- # bootstrap-timeout time to wait contacting a state server, in seconds.
- bootstrap-timeout: 1800
- admin-secret: admin
-
- # Whether or not to refresh the list of available updates for an
- # OS. The default option of true is recommended for use in
- # production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-refresh-update: false
-
- # Whether or not to perform OS upgrades when machines are
- # provisioned. The default option of true is recommended for use
- # in production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-upgrade: false
-
diff --git a/ci/intel/pod5/master/odl/deploy.sh b/ci/intel/pod5/master/odl/deploy.sh
deleted file mode 100644
index 193cbae9..00000000
--- a/ci/intel/pod5/master/odl/deploy.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-#placeholder for deployment script.
-set -ex
-
-cp intel/pod5/kilo/master/odl/ovs-odl-tip.yaml ./
-cp intel/pod5/kilo/master/odl/source/*.yaml ./
-
-echo "Deployment Started ...."
-
-JUJU_REPOSITORY=
-juju set-constraints tags=
-juju-deployer -d -r 13 -c ovs-odl-tip.yaml trusty-master-kilo
-
-echo "... Deployment finished"
diff --git a/ci/intel/pod5/master/odl/environment.yaml b/ci/intel/pod5/master/odl/environment.yaml
deleted file mode 100644
index 10f7637b..00000000
--- a/ci/intel/pod5/master/odl/environment.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-default: maas
-environments:
- # https://juju.ubuntu.com/docs/config-maas.html
- maas:
- type: maas
-
- # maas-server specifies the location of the MAAS server. It must
- # specify the base path.
- #
- maas-server: 'http://10.4.1.1/MAAS/'
-
- # maas-oauth holds the OAuth credentials from MAAS.
- #
- maas-oauth: 'c6tcQz4tyS3ALajCtF:sqcWhw8MkxTjUDLZrm:hBhszBLv5EqrY8h6yktFXWUT5825ShvE'
-
- # maas-server bootstrap ssh connection options
- #
-
- # bootstrap-timeout time to wait contacting a state server, in seconds.
- bootstrap-timeout: 1800
- admin-secret: admin
-
- # Whether or not to refresh the list of available updates for an
- # OS. The default option of true is recommended for use in
- # production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-refresh-update: false
-
- # Whether or not to perform OS upgrades when machines are
- # provisioned. The default option of true is recommended for use
- # in production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-upgrade: false
-
diff --git a/ci/intel/pod5/master/odl/ha/deploy.sh b/ci/intel/pod5/master/odl/ha/deploy.sh
deleted file mode 100644
index 0d54c464..00000000
--- a/ci/intel/pod5/master/odl/ha/deploy.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-#placeholder for deployment script.
-set -ex
-
-cp intel/pod5/kilo/master/odl/ha/ovs-odl-tip.yaml ./
-cp intel/pod5/kilo/master/odl/source/*.yaml ./
-
-echo "Deployment Started ...."
-
-JUJU_REPOSITORY=
-juju set-constraints tags=
-juju-deployer -d -r 13 -c ovs-odl-tip.yaml trusty-master-kilo
-
-echo "... Deployment finished"
diff --git a/ci/intel/pod5/master/odl/ha/environment.yaml b/ci/intel/pod5/master/odl/ha/environment.yaml
deleted file mode 100644
index 10f7637b..00000000
--- a/ci/intel/pod5/master/odl/ha/environment.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-default: maas
-environments:
- # https://juju.ubuntu.com/docs/config-maas.html
- maas:
- type: maas
-
- # maas-server specifies the location of the MAAS server. It must
- # specify the base path.
- #
- maas-server: 'http://10.4.1.1/MAAS/'
-
- # maas-oauth holds the OAuth credentials from MAAS.
- #
- maas-oauth: 'c6tcQz4tyS3ALajCtF:sqcWhw8MkxTjUDLZrm:hBhszBLv5EqrY8h6yktFXWUT5825ShvE'
-
- # maas-server bootstrap ssh connection options
- #
-
- # bootstrap-timeout time to wait contacting a state server, in seconds.
- bootstrap-timeout: 1800
- admin-secret: admin
-
- # Whether or not to refresh the list of available updates for an
- # OS. The default option of true is recommended for use in
- # production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-refresh-update: false
-
- # Whether or not to perform OS upgrades when machines are
- # provisioned. The default option of true is recommended for use
- # in production systems, but disabling this can speed up local
- # deployments for development or testing.
- #
- enable-os-upgrade: false
-
diff --git a/ci/intel/pod5/master/odl/ovs-odl-tip.yaml b/ci/intel/pod5/master/odl/ovs-odl-tip.yaml
deleted file mode 100644
index f2833635..00000000
--- a/ci/intel/pod5/master/odl/ovs-odl-tip.yaml
+++ /dev/null
@@ -1,126 +0,0 @@
-openstack-services:
- services:
- ubuntu:
- branch: "lp:charms/trusty/ubuntu"
- num_utils: 1
- constraints: tags=physical
- neutron-gateway:
- branch: lp:~sdn-charmers/charms/trusty/neutron-gateway/ovs-odl
- constraints: tags=neutron
- options:
- plugin: ovs-odl
- instance-mtu: 1400
- nova-compute:
- branch: lp:~openstack-charmers/charms/trusty/nova-compute/next
- num_units: 2
- constraints: tags=physical
- options:
- enable-live-migration: False
- manage-neutron-plugin-legacy-mode: False
- neutron-api:
- branch: lp:~openstack-charmers/charms/trusty/neutron-api/next
- options:
- neutron-security-groups: False
- manage-neutron-plugin-legacy-mode: False
- to: lxc:ubuntu=0
- neutron-api-odl:
- branch: lp:~openstack-charmers/charms/trusty/neutron-api-odl/vpp
- options:
- overlay-network-type: 'vxlan gre'
- security-groups: true
- odl-controller:
- branch: lp:~sdn-charmers/charms/trusty/odl-controller/trunk
- options:
- install-url: "http://10.4.1.1/odl/distribution-karaf-0.2.4-Helium-SR4.tar.gz"
- to: lxc:ubuntu=0
- openvswitch-odl:
- charm: local:trusty/openvswitch-odl
- mysql:
- charm: cs:trusty/mysql
- options:
- dataset-size: 50%
- max-connections: 20000
- to: lxc:ubuntu=0
- rabbitmq-server:
- charm: cs:trusty/rabbitmq-server
- to: lxc:ubuntu=0
- keystone:
- charm: cs:trusty/keystone
- options:
- admin-password: openstack
- admin-token: admin
- to: lxc:ubuntu=0
- openstack-dashboard:
- charm: cs:trusty/openstack-dashboard
- to: lxc:ubuntu=0
- nova-cloud-controller:
- charm: cs:trusty/nova-cloud-controller
- options:
- network-manager: Neutron
- quantum-security-groups: "yes"
- to: lxc:ubuntu=0
- glance:
- charm: cs:trusty/glance
- to: lxc:ubuntu=0
- relations:
- - ['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']
- - ['keystone:shared-db', 'mysql:shared-db']
- - ['nova-cloud-controller:shared-db', 'mysql:shared-db']
- - ['nova-cloud-controller:amqp', 'rabbitmq-server:amqp']
- - ['nova-cloud-controller:image-service', 'glance:image-service']
- - ['nova-cloud-controller:identity-service', 'keystone:identity-service']
- - ['nova-compute:cloud-compute', 'nova-cloud-controller:cloud-compute']
- - ['nova-compute:amqp', 'rabbitmq-server:amqp']
- - ['nova-compute:image-service', 'glance:image-service']
- - ['glance:shared-db', 'mysql:shared-db']
- - ['glance:identity-service', 'keystone:identity-service']
- - ['glance:amqp', 'rabbitmq-server:amqp']
- - ['neutron-api:shared-db', 'mysql:shared-db']
- - ['neutron-api:amqp', 'rabbitmq-server:amqp']
- - ['neutron-api:neutron-api', 'nova-cloud-controller:neutron-api']
- - ['neutron-api:identity-service', 'keystone:identity-service']
- - ['neutron-gateway:amqp', 'rabbitmq-server:amqp']
- - ['neutron-gateway:neutron-plugin-api', 'neutron-api:neutron-plugin-api']
- - ['neutron-gateway:quantum-network-service', 'nova-cloud-controller:quantum-network-service']
- - ['openstack-dashboard:identity-service','keystone:identity-service']
-# master
-openstack-master-git:
- inherits: openstack-services
- services:
- keystone:
- options:
- openstack-origin-git: include-file://keystone-master.yaml
- glance:
- options:
- openstack-origin-git: include-file://glance-master.yaml
-# cinder:
-# options:
-# openstack-origin-git: include-file://cinder-master.yaml
-# neutron-api:
-# options:
-# openstack-origin-git: include-file://neutron-master.yaml
- neutron-gateway:
- options:
- openstack-origin-git: include-file://neutron-master.yaml
-# neutron-openvswitch:
-# options:
-# openstack-origin-git: include-file://neutron-master.yaml
- openstack-dashboard:
- options:
- openstack-origin-git: include-file://horizon-master.yaml
- nova-compute:
- options:
- openstack-origin-git: include-file://nova-master.yaml
- nova-cloud-controller:
- options:
- openstack-origin-git: include-file://nova-master.yaml
-trusty-master-kilo:
- inherits: openstack-master-git
- series: trusty
- overrides:
- openstack-origin: cloud:trusty-kilo
- source: cloud:trusty-kilo
diff --git a/ci/odl/01-deploybundle.sh b/ci/odl/01-deploybundle.sh
new file mode 100755
index 00000000..4d5da31d
--- /dev/null
+++ b/ci/odl/01-deploybundle.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+#placeholder for deployment script.
+set -ex
+
+cp odl/juju-deployer/ovs-odl.yaml ./
+
+echo "... Deployment Started ...."
+
+#case openstack kilo with odl
+juju-deployer -d -r 13 -c ovs-odl.yaml trusty-kilo
+
+#case openstack kilo with odl ha
+#juju-deployer -d -r 13 -c ovs-odl-ha.yaml trusty-kilo
+
+#case openstack master tip git tree with odl
+#cp -R odl/juju-deployer/source/*.yaml ./
+#juju-deployer -d -r 13 -c ovs-odl-tip.yaml trusty-master-kilo
+
+echo "... Deployment finished ...."
diff --git a/ci/odl/README b/ci/odl/README
new file mode 100644
index 00000000..765e5eb7
--- /dev/null
+++ b/ci/odl/README
@@ -0,0 +1,87 @@
+OpenDaylight Deployment with Juju
+=================================
+
+This readme contains instructions for checking out and deploying Juju charms for
+OpenDaylight.
+
+The charms are targetted at Trusty.
+
+
+Checkout charms
+---------------
+
+Charms are hosted on Launchpad.
+You need to 'sudo apt-get install bzr' first.
+
+Follow these steps to checkout code:
+
+cd <deployer dir>
+./fetch-charms.sh
+
+This will checkout the relevant charms into 'src' and create any Juju symlinks
+in 'charms'.
+
+
+Deploy with cloud-sh-odl
+------------------------
+
+cloud-sh-odl is a collection of development shell scripts to deploy
+and setup OpenStack with OpenDaylight using Juju's local provider. This will
+create 3 KVMs as follows:
+
+*KVM #1 - Keystone, Glance, Neutron Server, Nova Cloud Controller, Horizon,
+ MySQL, RabbitMQ, OpenDaylight Controller
+
+*KVM #2 - Neutron agents
+
+*KVM #3 - Nova Compute
+
+You'll require approx. 13Gb RAM with 40Gb+ disk space.
+Deployment can take anywhere between 20 mins to 1 hour.
+
+You need to 'sudo apt-get install juju juju-local uvtool', and
+logout/login in order to pick up libvirt group permissions before
+proceeding. See https://bugs.launchpad.net/juju-core/+bug/1308088.
+
+Follow these steps:
+
+ssh-keygen
+ (if you don't already have a key at ~/.ssh/id_rsa).
+
+cp cloud-sh-odl/environments.yaml ~/.juju
+ (or create your own default local environment in your existing
+ environments.yaml file)
+
+cd cloud-sh-odl
+
+./deploy.sh
+
+This will log to 'out.log'.
+
+This will deploy OpenStack and import Trusty's daily image into Glance.
+
+Horizon will be located on the machine 'juju status openstack-dashboard' -
+http://<ip>/horizon.
+Admin credentials will be written to cloud/admin-openrc.
+
+The deployment can be destroyed with:
+
+juju destroy-environment local
+
+
+Deploy with Juju Deployer
+-------------------------
+
+Juju Deployer can deploy a preset configuration of charms given a yaml
+configuration file. There is a configuration file in
+'juju-deployer/odl.yaml'.
+
+You need to 'sudo apt-get install juju-deployer' first.
+
+Then:
+
+cd juju-deployer
+
+juju-deployer -c odl.yaml -d trusty-icehouse-odl
+
+Juju Deployer will branch its own copy of the remote charms.
diff --git a/ci/odl/cloud-sh-odl/cloud-setup.sh b/ci/odl/cloud-sh-odl/cloud-setup.sh
new file mode 100755
index 00000000..2a0bc2a7
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/cloud-setup.sh
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+# adjust tiny image
+nova flavor-delete m1.tiny
+nova flavor-create m1.tiny 1 512 8 1
+
+# import key pair
+nova keypair-add --pub-key id_rsa.pub ubuntu-keypair
diff --git a/ci/odl/cloud-sh-odl/compute.sh b/ci/odl/cloud-sh-odl/compute.sh
new file mode 100755
index 00000000..eb818250
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/compute.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+modprobe kvm_intel
+printf "\n%s\n" kvm_intel >> /etc/modules
+service libvirt-bin restart
+
+sed -e 's/KSM_ENABLED=1/KSM_ENABLED=0/' -i /etc/default/qemu-kvm
+service qemu-kvm restart
diff --git a/ci/odl/cloud-sh-odl/config.sh b/ci/odl/cloud-sh-odl/config.sh
new file mode 100644
index 00000000..66932c58
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/config.sh
@@ -0,0 +1,30 @@
+export JUJU_REPOSITORY=../charms
+
+DEFAULT_SERIES=trusty
+
+CHARM_GLANCE=local:trusty/glance
+
+CHARM_KEYSTONE=local:trusty/keystone
+CHARM_KEYSTONE_DEPLOY_OPTS="--config config.yaml"
+
+CHARM_MYSQL=trusty/mysql
+CHARM_MYSQL_DEPLOY_OPTS="--config config.yaml"
+
+CHARM_NEUTRON_API=local:trusty/neutron-api
+CHARM_NEUTRON_API_DEPLOY_OPTS="--config config.yaml"
+
+CHARM_NEUTRON_GATEWAY=local:trusty/quantum-gateway
+CHARM_NEUTRON_GATEWAY_DEPLOY_OPTS="--config config.yaml"
+
+CHARM_NEUTRON_ODL=local:trusty/neutron-odl
+
+CHARM_NOVA_CLOUD_CONTROLLER=local:trusty/nova-cloud-controller
+CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS="--config config.yaml"
+
+CHARM_NOVA_COMPUTE=local:trusty/nova-compute
+
+CHARM_ODL_CONTROLLER=local:trusty/odl-controller
+
+CHARM_OPENSTACK_DASHBOARD=local:trusty/openstack-dashboard
+
+CHARM_RABBITMQ_SERVER=trusty/rabbitmq-server
diff --git a/ci/odl/cloud-sh-odl/config.yaml b/ci/odl/cloud-sh-odl/config.yaml
new file mode 100644
index 00000000..066171be
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/config.yaml
@@ -0,0 +1,18 @@
+keystone:
+ admin-password: password
+
+mysql:
+ dataset-size: 10%
+ max-connections: 1000
+
+neutron-api:
+ neutron-plugin: odl
+ neutron-security-groups: True
+
+neutron-gateway:
+ instance-mtu: 1400
+ plugin: odl
+
+nova-cloud-controller:
+ network-manager: Neutron
+ quantum-security-groups: "yes"
diff --git a/ci/odl/cloud-sh-odl/deploy.sh b/ci/odl/cloud-sh-odl/deploy.sh
new file mode 100755
index 00000000..b0a63b6b
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/deploy.sh
@@ -0,0 +1,2 @@
+#!/bin/sh -e
+exec ./openstack.sh ./config.sh 2>&1 | tee out.log
diff --git a/ci/odl/cloud-sh-odl/environments.yaml b/ci/odl/cloud-sh-odl/environments.yaml
new file mode 100644
index 00000000..72a492d3
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/environments.yaml
@@ -0,0 +1,8 @@
+default: local
+
+environments:
+ local:
+ type: local
+ container: kvm
+ default-series: trusty
+ lxc-clone: true
diff --git a/ci/odl/cloud-sh-odl/glance.sh b/ci/odl/cloud-sh-odl/glance.sh
new file mode 100755
index 00000000..467932ff
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/glance.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+wget http://cloud-images.ubuntu.com/trusty/current/MD5SUMS
+
+wget http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
+glance image-create --name ubuntu-trusty-daily --disk-format qcow2 --container-format bare --owner admin --file trusty-server-cloudimg-amd64-disk1.img --checksum $(grep trusty-server-cloudimg-amd64-disk1.img MD5SUMS | cut -d " " -f 1) --is-public True
diff --git a/ci/odl/cloud-sh-odl/lxc-network.sh b/ci/odl/cloud-sh-odl/lxc-network.sh
new file mode 100755
index 00000000..5a65fa18
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/lxc-network.sh
@@ -0,0 +1,18 @@
+#!/bin/sh -e
+
+DEBIAN_FRONTEND=noninteractive apt-get -qy -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install lxc < /dev/null
+
+sed -e 's/^USE_LXC_BRIDGE="true"/USE_LXC_BRIDGE="false"/' -i /etc/default/lxc
+service lxc-net restart
+
+ifdown eth0
+mv /etc/network/interfaces.d/eth0.cfg /etc/network/interfaces.d/eth0.cfg.bak
+cat <<-"EOF" > /etc/network/interfaces.d/bridge.cfg
+ auto eth0
+ iface eth0 inet manual
+
+ auto lxcbr0
+ iface lxcbr0 inet dhcp
+ bridge_ports eth0
+ EOF
+ifup eth0 lxcbr0
diff --git a/ci/odl/cloud-sh-odl/openstack.sh b/ci/odl/cloud-sh-odl/openstack.sh
new file mode 100755
index 00000000..9da2cfb5
--- /dev/null
+++ b/ci/odl/cloud-sh-odl/openstack.sh
@@ -0,0 +1,146 @@
+#!/bin/sh -ex
+
+agentState()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"machines\"][\"$1\"][\"agent-state\"]" 2> /dev/null
+}
+
+agentStateUnit()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"agent-state\"]" 2> /dev/null
+}
+
+configOpenrc()
+{
+ cat <<-EOF
+ export OS_USERNAME=$1
+ export OS_PASSWORD=$2
+ export OS_TENANT_NAME=$3
+ export OS_AUTH_URL=$4
+ export OS_REGION_NAME=$5
+ EOF
+}
+
+unitAddress()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"public-address\"]" 2> /dev/null
+}
+
+unitMachine()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"machine\"]" 2> /dev/null
+}
+
+waitForMachine()
+{
+ for machine; do
+ while [ "$(agentState $machine)" != started ]; do
+ sleep 5
+ done
+ done
+}
+
+waitForService()
+{
+ for service; do
+ while [ "$(agentStateUnit "$service" 0)" != started ]; do
+ sleep 5
+ done
+ done
+}
+
+if [ $# -ne 0 ]; then
+ . "$1"
+fi
+
+juju bootstrap
+waitForMachine 0
+
+spare_cpus=$(($(grep processor /proc/cpuinfo | wc -l) - 5))
+if [ $spare_cpus -gt 0 ]; then
+ spare_cpus=$(((spare_cpus * 3) / 4))
+else
+ spare_cpus=0
+fi
+
+extra_cpus=0
+[ $spare_cpus -ne 0 ] && extra_cpus=$((1 + (((spare_cpus - 1) * 3) / 4))) && spare_cpus=$((spare_cpus - extra_cpus))
+juju add-machine --constraints "cpu-cores=$((1 + extra_cpus)) mem=8G root-disk=20G" --series $DEFAULT_SERIES
+
+juju deploy --constraints mem=1G $CHARM_NEUTRON_GATEWAY_DEPLOY_OPTS "${CHARM_NEUTRON_GATEWAY:-quantum-gateway}" neutron-gateway
+
+juju deploy --constraints "cpu-cores=$((1 + spare_cpus)) mem=4G root-disk=20G" $CHARM_NOVA_COMPUTE_DEPLOY_OPTS "${CHARM_NOVA_COMPUTE:-nova-compute}"
+
+waitForMachine 1
+juju scp lxc-network.sh 1:
+juju run --machine 1 "sudo ./lxc-network.sh"
+juju deploy --to lxc:1 $CHARM_MYSQL_DEPLOY_OPTS "${CHARM_MYSQL:-mysql}"
+juju deploy --to lxc:1 $CHARM_RABBITMQ_SERVER_DEPLOY_OPTS "${CHARM_RABBITMQ_SERVER:-rabbitmq-server}"
+juju deploy --to lxc:1 $CHARM_KEYSTONE_DEPLOY_OPTS "${CHARM_KEYSTONE:-keystone}"
+juju deploy --to lxc:1 $CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS "${CHARM_NOVA_CLOUD_CONTROLLER:-nova-cloud-controller}"
+juju deploy --to lxc:1 $CHARM_NEUTRON_API_DEPLOY_OPTS "${CHARM_NEUTRON_API:-neutron-api}"
+juju deploy --to lxc:1 $CHARM_GLANCE_DEPLOY_OPTS "${CHARM_GLANCE:-glance}"
+juju deploy --to lxc:1 $CHARM_OPENSTACK_DASHBOARD_DEPLOY_OPTS "${CHARM_OPENSTACK_DASHBOARD:-openstack-dashboard}"
+# opendaylight
+juju deploy --to lxc:1 $CHARM_ODL_CONTROLLER_DEPLOY_OPTS "${CHARM_ODL_CONTROLLER:-odl-controller}"
+juju deploy $CHARM_NEUTRON_ODL_DEPLOY_OPTS "${CHARM_NEUTRON_ODL:-neutron-odl}"
+
+# relation must be set first
+# no official way of knowing when this relation hook will fire
+waitForService mysql keystone
+juju add-relation keystone mysql
+sleep 60
+
+waitForService rabbitmq-server nova-cloud-controller glance
+juju add-relation nova-cloud-controller mysql
+juju add-relation nova-cloud-controller rabbitmq-server
+juju add-relation nova-cloud-controller glance
+juju add-relation nova-cloud-controller keystone
+sleep 60
+
+waitForService neutron-api
+juju add-relation neutron-api mysql
+juju add-relation neutron-api rabbitmq-server
+juju add-relation neutron-api keystone
+juju add-relation neutron-api nova-cloud-controller
+sleep 60
+
+waitForService openstack-dashboard neutron-gateway nova-compute
+juju add-relation neutron-gateway mysql
+juju add-relation neutron-gateway:amqp rabbitmq-server:amqp
+juju add-relation neutron-gateway nova-cloud-controller
+juju add-relation neutron-gateway neutron-api
+juju add-relation nova-compute:shared-db mysql:shared-db
+juju add-relation nova-compute:amqp rabbitmq-server:amqp
+juju add-relation nova-compute glance
+juju add-relation nova-compute nova-cloud-controller
+juju add-relation glance mysql
+juju add-relation glance keystone
+juju add-relation openstack-dashboard keystone
+sleep 60
+
+# opendaylight
+waitForService odl-controller
+juju add-relation neutron-api odl-controller
+juju add-relation neutron-gateway odl-controller
+juju add-relation nova-compute neutron-odl
+juju add-relation neutron-odl odl-controller
+sleep 60
+
+# enable kvm on compute
+machine=$(unitMachine nova-compute 0)
+juju scp compute.sh $machine:
+juju run --machine $machine "sudo ./compute.sh"
+
+mkdir -m 0700 -p cloud
+controller_address=$(unitAddress keystone 0)
+configOpenrc admin password Admin http://$controller_address:5000/v2.0 RegionOne > cloud/admin-openrc
+chmod 0600 cloud/admin-openrc
+
+machine=$(unitMachine nova-cloud-controller 0)
+juju scp cloud-setup.sh cloud/admin-openrc ~/.ssh/id_rsa.pub $machine:
+juju run --machine $machine ./cloud-setup.sh
+
+machine=$(unitMachine glance 0)
+juju scp glance.sh cloud/admin-openrc $machine:
+juju run --machine $machine ./glance.sh
diff --git a/ci/odl/fetch-charms.sh b/ci/odl/fetch-charms.sh
new file mode 100755
index 00000000..3cf269c2
--- /dev/null
+++ b/ci/odl/fetch-charms.sh
@@ -0,0 +1,19 @@
+#!/bin/sh -ex
+
+mkdir -p src/charms/trusty
+
+# openstack
+bzr branch lp:~openstack-charmers/charms/trusty/glance/next src/charms/trusty/glance-next
+bzr branch lp:~openstack-charmers/charms/trusty/keystone/next src/charms/trusty/keystone-next
+bzr branch lp:~sdn-charmers/charms/trusty/neutron-api/odl src/charms/trusty/neutron-api-odl
+bzr branch lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next src/charms/trusty/nova-cloud-controller-next
+bzr branch lp:~sdn-charmers/charms/trusty/nova-compute/odl src/charms/trusty/nova-compute-odl
+bzr branch lp:~openstack-charmers/charms/trusty/openstack-dashboard/next src/charms/trusty/openstack-dashboard-next
+bzr branch lp:~sdn-charmers/charms/trusty/quantum-gateway/odl src/charms/trusty/quantum-gateway-odl
+
+# opendaylight
+bzr branch lp:~sdn-charmers/charms/trusty/odl-controller/trunk src/charms/trusty/odl-controller
+bzr branch lp:~sdn-charmers/charms/trusty/neutron-odl/trunk src/charms/trusty/neutron-odl
+
+mkdir -p charms/trusty
+(cd charms/trusty; ln -s ../../src/charms/trusty/* .)
diff --git a/ci/odl/juju-deployer/odl.yaml b/ci/odl/juju-deployer/odl.yaml
new file mode 100644
index 00000000..f5e6bd73
--- /dev/null
+++ b/ci/odl/juju-deployer/odl.yaml
@@ -0,0 +1,80 @@
+openstack:
+ services:
+ mysql:
+ constraints: mem=1G
+ options:
+ dataset-size: 50%
+ max-connections: 1000
+ rabbitmq-server:
+ constraints: mem=1G
+ keystone:
+ branch: lp:~openstack-charmers/charms/trusty/keystone/next
+ constraints: mem=1G
+ openstack-dashboard:
+ branch: lp:~openstack-charmers/charms/trusty/openstack-dashboard/next
+ constraints: mem=1G
+ nova-compute:
+ branch: lp:~sdn-charmers/charms/trusty/nova-compute/odl
+ constraints: mem=4G root-disk=20G
+ nova-cloud-controller:
+ branch: lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next
+ constraints: mem=1G
+ options:
+ network-manager: Neutron
+ neutron-api:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-api/odl
+ constraints: mem=1G
+ neutron-gateway:
+ branch: lp:~sdn-charmers/charms/trusty/quantum-gateway/odl
+ constraints: mem=1G
+ glance:
+ branch: lp:~openstack-charmers/charms/trusty/glance/next
+ constraints: mem=1G
+ relations:
+ - [ keystone, mysql ]
+ - [ nova-cloud-controller, mysql ]
+ - [ nova-cloud-controller, rabbitmq-server ]
+ - [ nova-cloud-controller, glance ]
+ - [ nova-cloud-controller, keystone ]
+ - [ neutron-api, mysql ]
+ - [ neutron-api, rabbitmq-server ]
+ - [ neutron-api, keystone ]
+ - [ neutron-api, nova-cloud-controller ]
+ - [ neutron-gateway, mysql ]
+ - [ "neutron-gateway:amqp", "rabbitmq-server:amqp" ]
+ - [ neutron-gateway, nova-cloud-controller ]
+ - [ neutron-gateway, neutron-api ]
+ - [ "nova-compute:shared-db", "mysql:shared-db" ]
+ - [ "nova-compute:amqp", "rabbitmq-server:amqp" ]
+ - [ nova-compute, glance ]
+ - [ nova-compute, nova-cloud-controller ]
+ - [ glance, mysql ]
+ - [ glance, keystone ]
+ - [ openstack-dashboard, keystone ]
+odl:
+ inherits: openstack
+ services:
+ odl-controller:
+ branch: lp:~sdn-charmers/charms/trusty/odl-controller/trunk
+ constraints: mem=4G
+ neutron-odl:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-odl/trunk
+ relations:
+ - [ neutron-api, odl-controller ]
+ - [ neutron-gateway, odl-controller ]
+ - [ nova-compute, neutron-odl ]
+ - [ neutron-odl, odl-controller ]
+trusty-icehouse-odl:
+ inherits: odl
+ series: trusty
+ services:
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+ overrides:
+ instance-mtu: 1400
+ neutron-plugin: odl
+ neutron-security-groups: True
+ plugin: odl
+ quantum-security-groups: "yes"
diff --git a/ci/intel/pod5/kilo/odl/ha/ovs-odl.yaml b/ci/odl/juju-deployer/ovs-odl-ha.yaml
index 8da98659..8da98659 100644
--- a/ci/intel/pod5/kilo/odl/ha/ovs-odl.yaml
+++ b/ci/odl/juju-deployer/ovs-odl-ha.yaml
diff --git a/ci/intel/pod5/master/odl/ha/ovs-odl-tip.yaml b/ci/odl/juju-deployer/ovs-odl-tip.yaml
index f2833635..f2833635 100644
--- a/ci/intel/pod5/master/odl/ha/ovs-odl-tip.yaml
+++ b/ci/odl/juju-deployer/ovs-odl-tip.yaml
diff --git a/ci/intel/pod5/kilo/odl/ovs-odl.yaml b/ci/odl/juju-deployer/ovs-odl.yaml
index 8da98659..8da98659 100644
--- a/ci/intel/pod5/kilo/odl/ovs-odl.yaml
+++ b/ci/odl/juju-deployer/ovs-odl.yaml
diff --git a/ci/intel/pod5/master/odl/source/cinder-master.yaml b/ci/odl/juju-deployer/source/cinder-master.yaml
index b000d709..b000d709 100644
--- a/ci/intel/pod5/master/odl/source/cinder-master.yaml
+++ b/ci/odl/juju-deployer/source/cinder-master.yaml
diff --git a/ci/intel/pod5/master/odl/source/glance-master.yaml b/ci/odl/juju-deployer/source/glance-master.yaml
index 94a0622b..94a0622b 100644
--- a/ci/intel/pod5/master/odl/source/glance-master.yaml
+++ b/ci/odl/juju-deployer/source/glance-master.yaml
diff --git a/ci/intel/pod5/master/odl/source/horizon-master.yaml b/ci/odl/juju-deployer/source/horizon-master.yaml
index 0fd7e501..0fd7e501 100644
--- a/ci/intel/pod5/master/odl/source/horizon-master.yaml
+++ b/ci/odl/juju-deployer/source/horizon-master.yaml
diff --git a/ci/intel/pod5/master/odl/source/keystone-master.yaml b/ci/odl/juju-deployer/source/keystone-master.yaml
index fb8575de..fb8575de 100644
--- a/ci/intel/pod5/master/odl/source/keystone-master.yaml
+++ b/ci/odl/juju-deployer/source/keystone-master.yaml
diff --git a/ci/intel/pod5/master/odl/source/neutron-master.yaml b/ci/odl/juju-deployer/source/neutron-master.yaml
index ee4c8932..ee4c8932 100644
--- a/ci/intel/pod5/master/odl/source/neutron-master.yaml
+++ b/ci/odl/juju-deployer/source/neutron-master.yaml
diff --git a/ci/intel/pod5/master/odl/source/nova-master.yaml b/ci/odl/juju-deployer/source/nova-master.yaml
index 0bbee4c3..0bbee4c3 100644
--- a/ci/intel/pod5/master/odl/source/nova-master.yaml
+++ b/ci/odl/juju-deployer/source/nova-master.yaml
diff --git a/ci/opencontrail/01-deploybundle.sh b/ci/opencontrail/01-deploybundle.sh
new file mode 100755
index 00000000..07365780
--- /dev/null
+++ b/ci/opencontrail/01-deploybundle.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+#placeholder for deployment script.
+set -ex
+
+cp opencontrail/juju-deployer/contrail.yaml ./
+
+echo "... Deployment Started ...."
+
+#case openstack kilo with odl
+juju-deployer -d -r 13 -c contrail.yaml trusty-juno-contrail
+
+#case openstack kilo with odl ha
+#juju-deployer -d -r 13 -c contrail-ha.yaml trusty-juno-contrail
+
+#case openstack master tip git tree with odl
+#cp -R odl/juju-deployer/source/*.yaml ./
+#juju-deployer -d -r 13 -c contrail-tip.yaml trusty-juno-contrail
+
+echo "... Deployment finished ...."
diff --git a/ci/opencontrail/README b/ci/opencontrail/README
new file mode 100644
index 00000000..bf127542
--- /dev/null
+++ b/ci/opencontrail/README
@@ -0,0 +1,113 @@
+OpenContrail Deployment with Juju
+=================================
+
+This readme contains instructions for checking out and deploying Juju charms for
+OpenContrail.
+
+The charms are targetted at Trusty but originally used OpenContrail Precise
+packages.
+
+
+Checkout charms
+---------------
+
+Charms are hosted on Launchpad.
+You need to 'sudo apt-get install bzr' first.
+
+Follow these steps to checkout code:
+
+cd <deployer dir>
+./fetch-charms.sh
+
+This will checkout the relevant charms into 'src' and create any Juju symlinks
+in 'charms'.
+
+
+Deploy with cloud-sh-contrail
+-----------------------------
+
+cloud-sh-contrail is a collection of development shell scripts to deploy
+and setup OpenStack with OpenContrail using Juju's local provider. This will
+create 4 KVMs as follows:
+
+*KVM #1 - Keystone, Glance, Neutron Server, Nova Cloud Controller, Horizon,
+ MySQL, RabbitMQ, Contrail Configuration, Contrail Control,
+ Contrail Analytics, Zookeeper
+
+*KVM #2 - Neutron agents
+
+*KVM #3 - Nova Compute with Contrail vRouter
+
+*KVM #4 - Cassandra
+
+You'll require approx. 25Gb RAM with 60Gb+ disk space.
+Deployment can take anywhere between 20 mins to 1 hour.
+
+You need to 'sudo apt-get install juju juju-local uvtool', and
+logout/login in order to pick up libvirt group permissions before
+proceeding. See https://bugs.launchpad.net/juju-core/+bug/1308088.
+
+Follow these steps:
+
+ssh-keygen
+ (if you don't already have a key at ~/.ssh/id_rsa).
+
+cp cloud-sh-contrail/environments.yaml ~/.juju
+ (or create your own default local environment in your existing
+ environments.yaml file)
+
+cd cloud-sh-contrail
+
+./deploy-trusty.sh (deploys under trusty)
+or
+./deploy-precise.sh (deploys under precise)
+
+This will log to 'out.log'.
+
+This will deploy OpenStack and import Trusty's daily image into Glance.
+
+Horizon will be located on the machine 'juju status openstack-dashboard' -
+http://<ip>/horizon.
+Admin credentials will be written to cloud/admin-openrc.
+
+Upon deployment, the host's route and iptables config will be updated to send
+NAT'ed traffic to the Nova Compute node hosting Contrail's virtual gateway.
+Such changes can be disabled by not defining or commenting out the variable
+'CONFIGURE_HOST_ROUTING' in cloud-sh-contrail/config-*.sh.
+
+The deployment can be destroyed with:
+
+juju destroy-environment local
+
+
+Deploy with Juju Deployer
+-------------------------
+
+Juju Deployer can deploy a preset configuration of charms given a yaml
+configuration file. There is a configuration file in
+'juju-deployer/contrail.yaml'.
+
+You need to 'sudo apt-get install juju-deployer' first.
+
+Then:
+
+cd juju-deployer
+
+juju-deployer -c contrail.yaml -d trusty-icehouse-contrail (deploy trusty)
+or
+juju-deployer -c contrail.yaml -d precise-icehouse-contrail (deploy precise)
+
+Juju Deployer will branch its own copy of the remote charms.
+
+Post-deployment scripts exist to configure OpenStack.
+You will need 'dnsutils' package installed beforehand.
+To run:
+
+cd scripts
+
+CONFIGURE_HOST_ROUTING=true ./openstack.sh
+
+Setting 'CONFIGURE_HOST_ROUTING' environment variable will configure the host's
+route and iptables config to send NAT'ed traffic to the Nova Compute node
+hosting Contrail's virtual gateway. If you do not want this, run
+'./openstack.sh' directly.
diff --git a/ci/opencontrail/cloud-sh-contrail/cloud-setup.sh b/ci/opencontrail/cloud-sh-contrail/cloud-setup.sh
new file mode 100755
index 00000000..47e625c9
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/cloud-setup.sh
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+# adjust tiny image
+nova flavor-delete m1.tiny
+nova flavor-create m1.tiny 1 512 8 1
+
+# configure external network
+neutron net-create --router:external=True public-net
+neutron subnet-create --name public-subnet --no-gateway --allocation-pool start=10.0.10.2,end=10.0.10.254 --disable-dhcp public-net 10.0.10.0/24
+
+# create vm network
+neutron net-create ubuntu-net
+neutron subnet-create --name ubuntu-subnet --gateway 10.0.5.1 ubuntu-net 10.0.5.0/24
+
+# create pool of floating ips
+i=0
+while [ $i -ne 10 ]; do
+ neutron floatingip-create public-net
+ i=$((i + 1))
+done
+
+# configure security groups
+neutron security-group-rule-create --direction ingress --ethertype IPv4 --protocol icmp --remote-ip-prefix 0.0.0.0/0 default
+neutron security-group-rule-create --direction ingress --ethertype IPv4 --protocol tcp --port-range-min 22 --port-range-max 22 --remote-ip-prefix 0.0.0.0/0 default
+
+# import key pair
+nova keypair-add --pub-key id_rsa.pub ubuntu-keypair
diff --git a/ci/opencontrail/cloud-sh-contrail/compute.sh b/ci/opencontrail/cloud-sh-contrail/compute.sh
new file mode 100755
index 00000000..eb818250
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/compute.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+modprobe kvm_intel
+printf "\n%s\n" kvm_intel >> /etc/modules
+service libvirt-bin restart
+
+sed -e 's/KSM_ENABLED=1/KSM_ENABLED=0/' -i /etc/default/qemu-kvm
+service qemu-kvm restart
diff --git a/ci/opencontrail/cloud-sh-contrail/config-precise.sh b/ci/opencontrail/cloud-sh-contrail/config-precise.sh
new file mode 100644
index 00000000..7ef7f322
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-precise.sh
@@ -0,0 +1,51 @@
+export JUJU_REPOSITORY=../charms
+
+DEFAULT_SERIES=precise
+
+CHARM_CASSANDRA=local:precise/cassandra
+CHARM_CASSANDRA_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_CONTRAIL_ANALYTICS=local:precise/contrail-analytics
+CHARM_CONTRAIL_ANALYTICS_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_CONTRAIL_CONFIGURATION=local:precise/contrail-configuration
+CHARM_CONTRAIL_CONFIGURATION_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_CONTRAIL_CONTROL=local:precise/contrail-control
+CHARM_CONTRAIL_CONTROL_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_CONTRAIL_WEBUI=local:trusty/contrail-webui
+
+CHARM_GLANCE=local:precise/glance
+CHARM_GLANCE_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_KEYSTONE=local:precise/keystone
+CHARM_KEYSTONE_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_MYSQL=precise/mysql
+CHARM_MYSQL_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_NEUTRON_API=local:precise/neutron-api
+CHARM_NEUTRON_API_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_NEUTRON_API_CONTRAIL=local:precise/neutron-api-contrail
+
+CHARM_NEUTRON_CONTRAIL=local:precise/neutron-contrail
+
+CHARM_NEUTRON_GATEWAY=local:precise/quantum-gateway
+CHARM_NEUTRON_GATEWAY_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_NOVA_CLOUD_CONTROLLER=local:precise/nova-cloud-controller
+CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_NOVA_COMPUTE=local:precise/nova-compute
+CHARM_NOVA_COMPUTE_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_OPENSTACK_DASHBOARD=local:precise/openstack-dashboard
+CHARM_OPENSTACK_DASHBOARD_DEPLOY_OPTS="--config config-precise.yaml"
+
+CHARM_RABBITMQ_SERVER=precise/rabbitmq-server
+
+CHARM_ZOOKEEPER=local:precise/zookeeper
+
+CONFIGURE_HOST_ROUTING=true
diff --git a/ci/opencontrail/cloud-sh-contrail/config-precise.yaml b/ci/opencontrail/cloud-sh-contrail/config-precise.yaml
new file mode 100644
index 00000000..72c08b67
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-precise.yaml
@@ -0,0 +1,40 @@
+cassandra:
+ allow-single-node: true
+
+contrail-analytics:
+ openstack-origin: cloud:precise-icehouse
+
+contrail-configuration:
+ openstack-origin: cloud:precise-icehouse
+
+contrail-control:
+ openstack-origin: cloud:precise-icehouse
+
+glance:
+ openstack-origin: cloud:precise-icehouse
+
+keystone:
+ admin-password: password
+ admin-role: admin
+ openstack-origin: cloud:precise-icehouse
+
+mysql:
+ dataset-size: 15%
+
+neutron-api:
+ manage-neutron-plugin-legacy-mode: false
+ openstack-origin: cloud:precise-icehouse
+
+neutron-gateway:
+ openstack-origin: cloud:precise-icehouse
+
+nova-cloud-controller:
+ network-manager: Neutron
+ openstack-origin: cloud:precise-icehouse
+
+nova-compute:
+ manage-neutron-plugin-legacy-mode: false
+ openstack-origin: cloud:precise-icehouse
+
+openstack-dashboard:
+ openstack-origin: cloud:precise-icehouse
diff --git a/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.sh b/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.sh
new file mode 100644
index 00000000..6719e874
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.sh
@@ -0,0 +1,51 @@
+export JUJU_REPOSITORY=../charms
+
+DEFAULT_SERIES=trusty
+
+CHARM_CASSANDRA=local:precise/cassandra
+CHARM_CASSANDRA_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_CONTRAIL_ANALYTICS=local:trusty/contrail-analytics
+CHARM_CONTRAIL_ANALYTICS_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_CONTRAIL_CONFIGURATION=local:trusty/contrail-configuration
+CHARM_CONTRAIL_CONFIGURATION_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_CONTRAIL_CONTROL=local:trusty/contrail-control
+CHARM_CONTRAIL_CONTROL_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_CONTRAIL_WEBUI=local:trusty/contrail-webui
+
+CHARM_GLANCE=local:trusty/glance
+CHARM_GLANCE_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_KEYSTONE=local:trusty/keystone
+CHARM_KEYSTONE_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_MYSQL=trusty/mysql
+CHARM_MYSQL_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_NEUTRON_API=local:trusty/neutron-api
+CHARM_NEUTRON_API_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_NEUTRON_API_CONTRAIL=local:trusty/neutron-api-contrail
+
+CHARM_NEUTRON_CONTRAIL=local:trusty/neutron-contrail
+
+CHARM_NEUTRON_GATEWAY=local:trusty/quantum-gateway
+CHARM_NEUTRON_GATEWAY_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_NOVA_CLOUD_CONTROLLER=local:trusty/nova-cloud-controller
+CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_NOVA_COMPUTE=local:trusty/nova-compute
+CHARM_NOVA_COMPUTE_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_OPENSTACK_DASHBOARD=local:trusty/openstack-dashboard
+CHARM_OPENSTACK_DASHBOARD_DEPLOY_OPTS="--config config-trusty-juno.yaml"
+
+CHARM_RABBITMQ_SERVER=trusty/rabbitmq-server
+
+CHARM_ZOOKEEPER=local:precise/zookeeper
+
+CONFIGURE_HOST_ROUTING=true
diff --git a/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.yaml b/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.yaml
new file mode 100644
index 00000000..3767364d
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-trusty-juno.yaml
@@ -0,0 +1,40 @@
+cassandra:
+ allow-single-node: true
+
+contrail-analytics:
+ openstack-origin: cloud:trusty-juno
+
+contrail-configuration:
+ openstack-origin: cloud:trusty-juno
+
+contrail-control:
+ openstack-origin: cloud:trusty-juno
+
+glance:
+ openstack-origin: cloud:trusty-juno
+
+keystone:
+ admin-password: password
+ admin-role: admin
+ openstack-origin: cloud:trusty-juno
+
+mysql:
+ dataset-size: 15%
+
+neutron-api:
+ manage-neutron-plugin-legacy-mode: false
+ openstack-origin: cloud:trusty-juno
+
+neutron-gateway:
+ openstack-origin: cloud:trusty-juno
+
+nova-cloud-controller:
+ network-manager: Neutron
+ openstack-origin: cloud:trusty-juno
+
+nova-compute:
+ manage-neutron-plugin-legacy-mode: false
+ openstack-origin: cloud:trusty-juno
+
+openstack-dashboard:
+ openstack-origin: cloud:trusty-juno
diff --git a/ci/opencontrail/cloud-sh-contrail/config-trusty.sh b/ci/opencontrail/cloud-sh-contrail/config-trusty.sh
new file mode 100644
index 00000000..16743b0e
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-trusty.sh
@@ -0,0 +1,45 @@
+export JUJU_REPOSITORY=../charms
+
+DEFAULT_SERIES=trusty
+
+CHARM_CASSANDRA=local:precise/cassandra
+CHARM_CASSANDRA_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_CONTRAIL_ANALYTICS=local:trusty/contrail-analytics
+
+CHARM_CONTRAIL_CONFIGURATION=local:trusty/contrail-configuration
+
+CHARM_CONTRAIL_CONTROL=local:trusty/contrail-control
+
+CHARM_CONTRAIL_WEBUI=local:trusty/contrail-webui
+
+CHARM_GLANCE=local:trusty/glance
+
+CHARM_KEYSTONE=local:trusty/keystone
+CHARM_KEYSTONE_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_MYSQL=trusty/mysql
+CHARM_MYSQL_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_NEUTRON_API=local:trusty/neutron-api
+CHARM_NEUTRON_API_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_NEUTRON_API_CONTRAIL=local:trusty/neutron-api-contrail
+
+CHARM_NEUTRON_CONTRAIL=local:trusty/neutron-contrail
+
+CHARM_NEUTRON_GATEWAY=local:trusty/quantum-gateway
+
+CHARM_NOVA_CLOUD_CONTROLLER=local:trusty/nova-cloud-controller
+CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_NOVA_COMPUTE=local:trusty/nova-compute
+CHARM_NOVA_COMPUTE_DEPLOY_OPTS="--config config-trusty.yaml"
+
+CHARM_OPENSTACK_DASHBOARD=local:trusty/openstack-dashboard
+
+CHARM_RABBITMQ_SERVER=trusty/rabbitmq-server
+
+CHARM_ZOOKEEPER=local:precise/zookeeper
+
+CONFIGURE_HOST_ROUTING=true
diff --git a/ci/opencontrail/cloud-sh-contrail/config-trusty.yaml b/ci/opencontrail/cloud-sh-contrail/config-trusty.yaml
new file mode 100644
index 00000000..7d4bf58d
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/config-trusty.yaml
@@ -0,0 +1,18 @@
+cassandra:
+ allow-single-node: true
+
+keystone:
+ admin-password: password
+ admin-role: admin
+
+mysql:
+ dataset-size: 15%
+
+neutron-api:
+ manage-neutron-plugin-legacy-mode: false
+
+nova-cloud-controller:
+ network-manager: Neutron
+
+nova-compute:
+ manage-neutron-plugin-legacy-mode: false
diff --git a/ci/opencontrail/cloud-sh-contrail/deploy-precise.sh b/ci/opencontrail/cloud-sh-contrail/deploy-precise.sh
new file mode 100755
index 00000000..2e35546b
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/deploy-precise.sh
@@ -0,0 +1,2 @@
+#!/bin/sh -e
+exec ./openstack.sh ./config-precise.sh 2>&1 | tee out.log
diff --git a/ci/opencontrail/cloud-sh-contrail/deploy-trusty-juno.sh b/ci/opencontrail/cloud-sh-contrail/deploy-trusty-juno.sh
new file mode 100755
index 00000000..27a9d56f
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/deploy-trusty-juno.sh
@@ -0,0 +1,2 @@
+#!/bin/sh -e
+exec ./openstack.sh ./config-trusty-juno.sh 2>&1 | tee out.log
diff --git a/ci/opencontrail/cloud-sh-contrail/deploy-trusty.sh b/ci/opencontrail/cloud-sh-contrail/deploy-trusty.sh
new file mode 100755
index 00000000..b7b21de0
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/deploy-trusty.sh
@@ -0,0 +1,2 @@
+#!/bin/sh -e
+exec ./openstack.sh ./config-trusty.sh 2>&1 | tee out.log
diff --git a/ci/opencontrail/cloud-sh-contrail/environments.yaml b/ci/opencontrail/cloud-sh-contrail/environments.yaml
new file mode 100644
index 00000000..72a492d3
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/environments.yaml
@@ -0,0 +1,8 @@
+default: local
+
+environments:
+ local:
+ type: local
+ container: kvm
+ default-series: trusty
+ lxc-clone: true
diff --git a/ci/opencontrail/cloud-sh-contrail/glance.sh b/ci/opencontrail/cloud-sh-contrail/glance.sh
new file mode 100755
index 00000000..467932ff
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/glance.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+wget http://cloud-images.ubuntu.com/trusty/current/MD5SUMS
+
+wget http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
+glance image-create --name ubuntu-trusty-daily --disk-format qcow2 --container-format bare --owner admin --file trusty-server-cloudimg-amd64-disk1.img --checksum $(grep trusty-server-cloudimg-amd64-disk1.img MD5SUMS | cut -d " " -f 1) --is-public True
diff --git a/ci/opencontrail/cloud-sh-contrail/lxc-network.sh b/ci/opencontrail/cloud-sh-contrail/lxc-network.sh
new file mode 100755
index 00000000..5a65fa18
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/lxc-network.sh
@@ -0,0 +1,18 @@
+#!/bin/sh -e
+
+DEBIAN_FRONTEND=noninteractive apt-get -qy -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install lxc < /dev/null
+
+sed -e 's/^USE_LXC_BRIDGE="true"/USE_LXC_BRIDGE="false"/' -i /etc/default/lxc
+service lxc-net restart
+
+ifdown eth0
+mv /etc/network/interfaces.d/eth0.cfg /etc/network/interfaces.d/eth0.cfg.bak
+cat <<-"EOF" > /etc/network/interfaces.d/bridge.cfg
+ auto eth0
+ iface eth0 inet manual
+
+ auto lxcbr0
+ iface lxcbr0 inet dhcp
+ bridge_ports eth0
+ EOF
+ifup eth0 lxcbr0
diff --git a/ci/opencontrail/cloud-sh-contrail/openstack.sh b/ci/opencontrail/cloud-sh-contrail/openstack.sh
new file mode 100755
index 00000000..960a9934
--- /dev/null
+++ b/ci/opencontrail/cloud-sh-contrail/openstack.sh
@@ -0,0 +1,193 @@
+#!/bin/sh -ex
+
+agentState()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"machines\"][\"$1\"][\"agent-state\"]" 2> /dev/null
+}
+
+agentStateUnit()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"agent-state\"]" 2> /dev/null
+}
+
+configOpenrc()
+{
+ cat <<-EOF
+ export OS_USERNAME=$1
+ export OS_PASSWORD=$2
+ export OS_TENANT_NAME=$3
+ export OS_AUTH_URL=$4
+ export OS_REGION_NAME=$5
+ EOF
+}
+
+unitAddress()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"public-address\"]" 2> /dev/null
+}
+
+unitMachine()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"machine\"]" 2> /dev/null
+}
+
+waitForMachine()
+{
+ for machine; do
+ while [ "$(agentState $machine)" != started ]; do
+ sleep 5
+ done
+ done
+}
+
+waitForService()
+{
+ for service; do
+ while [ "$(agentStateUnit "$service" 0)" != started ]; do
+ sleep 5
+ done
+ done
+}
+
+if [ $# -ne 0 ]; then
+ . "$1"
+fi
+
+juju bootstrap
+waitForMachine 0
+
+spare_cpus=$(($(grep processor /proc/cpuinfo | wc -l) - 5))
+if [ $spare_cpus -gt 0 ]; then
+ spare_cpus=$(((spare_cpus * 3) / 4))
+else
+ spare_cpus=0
+fi
+
+extra_cpus=0
+[ $spare_cpus -ne 0 ] && extra_cpus=$((1 + (((spare_cpus - 1) * 3) / 4))) && spare_cpus=$((spare_cpus - extra_cpus))
+juju add-machine --constraints "cpu-cores=$((1 + extra_cpus)) mem=12G root-disk=20G" --series $DEFAULT_SERIES
+
+juju deploy --constraints mem=1G $CHARM_NEUTRON_GATEWAY_DEPLOY_OPTS "${CHARM_NEUTRON_GATEWAY:-quantum-gateway}" neutron-gateway
+
+extra_cpus=0
+[ $spare_cpus -ne 0 ] && extra_cpus=$((1 + (((spare_cpus - 1) * 3) / 4))) && spare_cpus=$((spare_cpus - extra_cpus))
+juju deploy --constraints "cpu-cores=$((1 + extra_cpus)) mem=4G root-disk=20G" $CHARM_NOVA_COMPUTE_DEPLOY_OPTS "${CHARM_NOVA_COMPUTE:-nova-compute}"
+
+juju add-machine --constraints "cpu-cores=$((1 + spare_cpus)) mem=8G root-disk=20G" --series $DEFAULT_SERIES
+
+waitForMachine 1
+juju scp lxc-network.sh 1:
+juju run --machine 1 "sudo ./lxc-network.sh"
+
+waitForMachine 4
+juju scp lxc-network.sh 4:
+juju run --machine 4 "sudo ./lxc-network.sh"
+
+juju deploy --to lxc:1 $CHARM_MYSQL_DEPLOY_OPTS "${CHARM_MYSQL:-mysql}"
+juju deploy --to lxc:1 $CHARM_RABBITMQ_SERVER_DEPLOY_OPTS "${CHARM_RABBITMQ_SERVER:-rabbitmq-server}"
+juju deploy --to lxc:1 $CHARM_KEYSTONE_DEPLOY_OPTS "${CHARM_KEYSTONE:-keystone}"
+juju deploy --to lxc:1 $CHARM_NOVA_CLOUD_CONTROLLER_DEPLOY_OPTS "${CHARM_NOVA_CLOUD_CONTROLLER:-nova-cloud-controller}"
+juju deploy --to lxc:1 $CHARM_NEUTRON_API_DEPLOY_OPTS "${CHARM_NEUTRON_API:-neutron-api}"
+juju deploy --to lxc:1 $CHARM_GLANCE_DEPLOY_OPTS "${CHARM_GLANCE:-glance}"
+juju deploy --to lxc:1 $CHARM_OPENSTACK_DASHBOARD_DEPLOY_OPTS "${CHARM_OPENSTACK_DASHBOARD:-openstack-dashboard}"
+# contrail
+juju deploy --to lxc:1 $CHARM_ZOOKEEPER_DEPLOY_OPTS "${CHARM_ZOOKEEPER:-zookeeper}"
+juju deploy --to lxc:1 $CHARM_CONTRAIL_CONFIGURATION_DEPLOY_OPTS "${CHARM_CONTRAIL_CONFIGURATION:-contrail-configuration}"
+juju deploy --to lxc:1 $CHARM_CONTRAIL_CONTROL_DEPLOY_OPTS "${CHARM_CONTRAIL_CONTROL:-contrail-control}"
+juju deploy --to lxc:1 $CHARM_CONTRAIL_ANALYTICS_DEPLOY_OPTS "${CHARM_CONTRAIL_ANALYTICS:-contrail-analytics}"
+juju deploy --to lxc:1 $CHARM_CONTRAIL_WEBUI_DEPLOY_OPTS "${CHARM_CONTRAIL_WEBUI:-contrail-webui}"
+juju deploy --to lxc:4 $CHARM_CASSANDRA_DEPLOY_OPTS "${CHARM_CASSANDRA:-cassandra}"
+juju deploy $CHARM_NEUTRON_API_CONTRAIL_DEPLOY_OPTS "${CHARM_NEUTRON_API_CONTRAIL:-neutron-api-contrail}"
+juju deploy $CHARM_NEUTRON_CONTRAIL_DEPLOY_OPTS "${CHARM_NEUTRON_CONTRAIL:-neutron-contrail}"
+
+# relation must be set first
+# no official way of knowing when this relation hook will fire
+waitForService mysql keystone
+juju add-relation keystone mysql
+sleep 60
+
+waitForService rabbitmq-server nova-cloud-controller glance openstack-dashboard neutron-gateway nova-compute
+juju add-relation nova-cloud-controller mysql
+juju add-relation nova-cloud-controller rabbitmq-server
+juju add-relation nova-cloud-controller glance
+juju add-relation nova-cloud-controller keystone
+juju add-relation neutron-gateway mysql
+juju add-relation neutron-gateway:amqp rabbitmq-server:amqp
+juju add-relation neutron-gateway nova-cloud-controller
+juju add-relation nova-compute:shared-db mysql:shared-db
+juju add-relation nova-compute:amqp rabbitmq-server:amqp
+juju add-relation nova-compute glance
+juju add-relation nova-compute nova-cloud-controller
+juju add-relation glance mysql
+juju add-relation glance keystone
+juju add-relation openstack-dashboard keystone
+sleep 60
+
+waitForService neutron-api
+juju add-relation neutron-api mysql
+juju add-relation neutron-api rabbitmq-server
+juju add-relation neutron-api nova-cloud-controller
+juju add-relation neutron-api keystone
+juju add-relation neutron-api neutron-api-contrail
+sleep 60
+
+# contrail
+waitForService cassandra zookeeper contrail-configuration
+juju add-relation contrail-configuration:cassandra cassandra:database
+juju add-relation contrail-configuration zookeeper
+juju add-relation contrail-configuration rabbitmq-server
+juju add-relation contrail-configuration keystone
+juju add-relation contrail-configuration neutron-gateway
+sleep 60
+
+waitForService contrail-control contrail-analytics
+juju add-relation neutron-api-contrail contrail-configuration
+juju add-relation neutron-api-contrail keystone
+juju add-relation contrail-control:contrail-discovery contrail-configuration:contrail-discovery
+juju add-relation contrail-control:contrail-ifmap contrail-configuration:contrail-ifmap
+juju add-relation contrail-analytics:cassandra cassandra:database
+juju add-relation contrail-analytics contrail-configuration
+juju add-relation nova-compute neutron-contrail
+juju add-relation neutron-contrail:contrail-discovery contrail-configuration:contrail-discovery
+juju add-relation neutron-contrail neutron-gateway
+juju add-relation neutron-contrail:contrail-api contrail-configuration:contrail-api
+juju add-relation neutron-contrail keystone
+sleep 60
+
+waitForService contrail-webui
+juju add-relation contrail-webui keystone
+juju add-relation contrail-webui:contrail_api contrail-configuration:contrail-api
+juju add-relation contrail-webui:contrail_discovery contrail-configuration:contrail-discovery
+juju add-relation contrail-webui:cassandra cassandra:database
+sleep 60
+
+# enable kvm on compute
+machine=$(unitMachine nova-compute 0)
+juju scp compute.sh $machine:
+juju run --machine $machine "sudo ./compute.sh"
+
+mkdir -m 0700 -p cloud
+controller_address=$(unitAddress keystone 0)
+configOpenrc admin password Admin http://$controller_address:5000/v2.0 RegionOne > cloud/admin-openrc
+chmod 0600 cloud/admin-openrc
+
+machine=$(unitMachine nova-cloud-controller 0)
+juju scp cloud-setup.sh cloud/admin-openrc ~/.ssh/id_rsa.pub $machine:
+juju run --machine $machine ./cloud-setup.sh
+
+# setup contrail routing
+juju set contrail-configuration "floating-ip-pools=[ { project: admin, network: public-net, pool-name: floatingip_pool, target-projects: [ admin ] } ]"
+juju set neutron-contrail "virtual-gateways=[ { project: admin, network: public-net, interface: vgw, subnets: [ 10.0.10.0/24 ], routes: [ 0.0.0.0/0 ] } ]"
+
+machine=$(unitMachine glance 0)
+juju scp glance.sh cloud/admin-openrc $machine:
+juju run --machine $machine ./glance.sh
+
+# setup host routing
+if [ -n "$CONFIGURE_HOST_ROUTING" ]; then
+ compute_address=$(unitAddress nova-compute 0)
+ sudo ip route replace 10.0.10.0/24 via $compute_address
+ sudo iptables -C FORWARD -s 10.0.10.0/24 -j ACCEPT 2> /dev/null || sudo iptables -I FORWARD 1 -s 10.0.10.0/24 -j ACCEPT
+ sudo iptables -C FORWARD -d 10.0.10.0/24 -j ACCEPT 2> /dev/null || sudo iptables -I FORWARD 2 -d 10.0.10.0/24 -j ACCEPT
+ sudo iptables -t nat -C POSTROUTING -s 10.0.10.0/24 ! -d 10.0.10.0/24 -j MASQUERADE 2> /dev/null || sudo iptables -t nat -A POSTROUTING -s 10.0.10.0/24 ! -d 10.0.10.0/24 -j MASQUERADE
+fi
diff --git a/ci/opencontrail/fetch-charms.sh b/ci/opencontrail/fetch-charms.sh
new file mode 100755
index 00000000..911dc55d
--- /dev/null
+++ b/ci/opencontrail/fetch-charms.sh
@@ -0,0 +1,27 @@
+#!/bin/sh -ex
+
+mkdir -p src/charms/trusty src/charms/precise
+
+# openstack
+bzr branch lp:~openstack-charmers/charms/trusty/glance/next src/charms/trusty/glance-next
+bzr branch lp:~openstack-charmers/charms/trusty/keystone/next src/charms/trusty/keystone-next
+bzr branch lp:~openstack-charmers/charms/trusty/neutron-api/vpp src/charms/trusty/neutron-api-vpp
+bzr branch lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next src/charms/trusty/nova-cloud-controller-next
+bzr branch lp:~openstack-charmers/charms/trusty/nova-compute/next src/charms/trusty/nova-compute-next
+bzr branch lp:~openstack-charmers/charms/trusty/openstack-dashboard/next src/charms/trusty/openstack-dashboard-next
+bzr branch lp:~sdn-charmers/charms/trusty/quantum-gateway/contrail src/charms/trusty/quantum-gateway-contrail
+
+# contrail
+bzr branch lp:~sdn-charmers/charms/precise/cassandra/forced-install src/charms/precise/cassandra-forced-install
+bzr branch lp:~sdn-charmers/charms/trusty/contrail-analytics/trunk src/charms/trusty/contrail-analytics
+bzr branch lp:~sdn-charmers/charms/trusty/contrail-configuration/trunk src/charms/trusty/contrail-configuration
+bzr branch lp:~sdn-charmers/charms/trusty/contrail-control/trunk src/charms/trusty/contrail-control
+bzr branch lp:~sdn-charmers/charms/trusty/contrail-webui/trunk src/charms/trusty/contrail-webui
+bzr branch lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk src/charms/trusty/neutron-api-contrail
+bzr branch lp:~sdn-charmers/charms/trusty/neutron-contrail/trunk src/charms/trusty/neutron-contrail
+bzr branch lp:~sdn-charmers/charms/precise/zookeeper/fix-symlink src/charms/precise/zookeeper-fix-symlink
+
+mkdir -p charms/trusty charms/precise
+(cd charms/trusty; ln -s ../../src/charms/trusty/* .)
+# symlink trusty charms to precise
+(cd charms/precise; ln -s ../../src/charms/trusty/* .; ln -s ../../src/charms/precise/* .)
diff --git a/ci/opencontrail/juju-deployer/contrail-ha.yaml b/ci/opencontrail/juju-deployer/contrail-ha.yaml
new file mode 100644
index 00000000..d978c599
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/contrail-ha.yaml
@@ -0,0 +1,149 @@
+openstack:
+ services:
+ mysql:
+ constraints: mem=1G
+ options:
+ dataset-size: 50%
+ rabbitmq-server:
+ constraints: mem=1G
+ keystone:
+ branch: lp:~openstack-charmers/charms/trusty/keystone/next
+ constraints: mem=1G
+ options:
+ admin-password: password
+ openstack-dashboard:
+ branch: lp:~openstack-charmers/charms/trusty/openstack-dashboard/next
+ constraints: mem=1G
+ nova-compute:
+ branch: lp:~openstack-charmers/charms/trusty/nova-compute/next
+ constraints: mem=4G root-disk=20G
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ nova-cloud-controller:
+ branch: lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next
+ constraints: mem=1G
+ options:
+ network-manager: Neutron
+ neutron-gateway:
+ branch: lp:~sdn-charmers/charms/trusty/quantum-gateway/contrail
+ constraints: mem=1G
+ glance:
+ branch: lp:~openstack-charmers/charms/trusty/glance/next
+ constraints: mem=1G
+ neutron-api:
+ branch: lp:~openstack-charmers/charms/trusty/neutron-api/vpp
+ constraints: mem=1G
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ relations:
+ - [ keystone, mysql ]
+ - [ nova-cloud-controller, mysql ]
+ - [ nova-cloud-controller, rabbitmq-server ]
+ - [ nova-cloud-controller, glance ]
+ - [ nova-cloud-controller, keystone ]
+ - [ nova-compute, nova-cloud-controller ]
+ - [ "nova-compute:shared-db", "mysql:shared-db" ]
+ - [ "nova-compute:amqp", "rabbitmq-server:amqp" ]
+ - [ nova-compute, glance ]
+ - [ glance, mysql ]
+ - [ glance, keystone ]
+ - [ neutron-gateway, mysql ]
+ - [ "neutron-gateway:amqp", "rabbitmq-server:amqp" ]
+ - [ neutron-gateway, nova-cloud-controller ]
+ - [ openstack-dashboard, keystone ]
+ - [ neutron-api, mysql ]
+ - [ neutron-api, rabbitmq-server ]
+ - [ neutron-api, nova-cloud-controller ]
+ - [ neutron-api, keystone ]
+ - [ neutron-api, neutron-api-contrail ]
+contrail:
+ inherits: openstack
+ services:
+ cassandra:
+ branch: lp:~sdn-charmers/charms/precise/cassandra/forced-install
+ series: precise
+ constraints: mem=8G root-disk=20G
+ units: 3
+ zookeeper:
+ branch: lp:~sdn-charmers/charms/precise/zookeeper/fix-symlink
+ series: precise
+ constraints: mem=1G
+ units: 3
+ contrail-configuration:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-configuration/trunk
+ constraints: mem=4G
+ options:
+ vip: x.x.x.x
+ units: 2
+ contrail-control:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-control/trunk
+ constraints: mem=2G
+ units: 2
+ contrail-analytics:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-analytics/trunk
+ constraints: mem=4G
+ units: 2
+ contrail-webui:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-webui/trunk
+ units: 2
+ neutron-api-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk
+ neutron-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-contrail/trunk
+ haproxy:
+ options:
+ peering_mode: active-active
+ units: 2
+ keepalived:
+ branch: lp:~sdn-charmers/charms/trusty/keepalived/trunk
+ options:
+ virtual-ip: x.x.x.x
+ overrides:
+ admin-role: admin
+ relations:
+ - [ "contrail-configuration:cassandra", "cassandra:database" ]
+ - [ contrail-configuration, zookeeper ]
+ - [ contrail-configuration, rabbitmq-server ]
+ - [ contrail-configuration, keystone ]
+ - [ contrail-configuration, neutron-gateway ]
+ - [ neutron-api-contrail, contrail-configuration ]
+ - [ neutron-api-contrail, keystone ]
+ - [ "contrail-control:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-control:contrail-ifmap", "contrail-configuration:contrail-ifmap" ]
+ - [ "contrail-analytics:cassandra", "cassandra:database" ]
+ - [ contrail-analytics, contrail-configuration ]
+ - [ contrail-webui, keystone ]
+ - [ "contrail-webui:contrail_api", "contrail-configuration:contrail-api" ]
+ - [ "contrail-webui:contrail_discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-webui:cassandra", "cassandra:database" ]
+ - [ nova-compute, neutron-contrail ]
+ - [ "neutron-contrail:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ neutron-contrail, neutron-gateway ]
+ - [ "neutron-contrail:contrail-api", "contrail-configuration:contrail-api" ]
+ - [ neutron-contrail, keystone ]
+ - [ contrail-configuration, haproxy ]
+ - [ contrail-analytics, haproxy ]
+ - [ contrail-webui, haproxy ]
+ - [ haproxy, keepalived ]
+trusty-icehouse-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ haproxy:
+ charm: cs:trusty/haproxy
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+trusty-juno-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ haproxy:
+ charm: cs:trusty/haproxy
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+ overrides:
+ openstack-origin: cloud:trusty-juno
diff --git a/ci/opencontrail/juju-deployer/contrail-tip.yaml b/ci/opencontrail/juju-deployer/contrail-tip.yaml
new file mode 100644
index 00000000..d978c599
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/contrail-tip.yaml
@@ -0,0 +1,149 @@
+openstack:
+ services:
+ mysql:
+ constraints: mem=1G
+ options:
+ dataset-size: 50%
+ rabbitmq-server:
+ constraints: mem=1G
+ keystone:
+ branch: lp:~openstack-charmers/charms/trusty/keystone/next
+ constraints: mem=1G
+ options:
+ admin-password: password
+ openstack-dashboard:
+ branch: lp:~openstack-charmers/charms/trusty/openstack-dashboard/next
+ constraints: mem=1G
+ nova-compute:
+ branch: lp:~openstack-charmers/charms/trusty/nova-compute/next
+ constraints: mem=4G root-disk=20G
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ nova-cloud-controller:
+ branch: lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next
+ constraints: mem=1G
+ options:
+ network-manager: Neutron
+ neutron-gateway:
+ branch: lp:~sdn-charmers/charms/trusty/quantum-gateway/contrail
+ constraints: mem=1G
+ glance:
+ branch: lp:~openstack-charmers/charms/trusty/glance/next
+ constraints: mem=1G
+ neutron-api:
+ branch: lp:~openstack-charmers/charms/trusty/neutron-api/vpp
+ constraints: mem=1G
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ relations:
+ - [ keystone, mysql ]
+ - [ nova-cloud-controller, mysql ]
+ - [ nova-cloud-controller, rabbitmq-server ]
+ - [ nova-cloud-controller, glance ]
+ - [ nova-cloud-controller, keystone ]
+ - [ nova-compute, nova-cloud-controller ]
+ - [ "nova-compute:shared-db", "mysql:shared-db" ]
+ - [ "nova-compute:amqp", "rabbitmq-server:amqp" ]
+ - [ nova-compute, glance ]
+ - [ glance, mysql ]
+ - [ glance, keystone ]
+ - [ neutron-gateway, mysql ]
+ - [ "neutron-gateway:amqp", "rabbitmq-server:amqp" ]
+ - [ neutron-gateway, nova-cloud-controller ]
+ - [ openstack-dashboard, keystone ]
+ - [ neutron-api, mysql ]
+ - [ neutron-api, rabbitmq-server ]
+ - [ neutron-api, nova-cloud-controller ]
+ - [ neutron-api, keystone ]
+ - [ neutron-api, neutron-api-contrail ]
+contrail:
+ inherits: openstack
+ services:
+ cassandra:
+ branch: lp:~sdn-charmers/charms/precise/cassandra/forced-install
+ series: precise
+ constraints: mem=8G root-disk=20G
+ units: 3
+ zookeeper:
+ branch: lp:~sdn-charmers/charms/precise/zookeeper/fix-symlink
+ series: precise
+ constraints: mem=1G
+ units: 3
+ contrail-configuration:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-configuration/trunk
+ constraints: mem=4G
+ options:
+ vip: x.x.x.x
+ units: 2
+ contrail-control:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-control/trunk
+ constraints: mem=2G
+ units: 2
+ contrail-analytics:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-analytics/trunk
+ constraints: mem=4G
+ units: 2
+ contrail-webui:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-webui/trunk
+ units: 2
+ neutron-api-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk
+ neutron-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-contrail/trunk
+ haproxy:
+ options:
+ peering_mode: active-active
+ units: 2
+ keepalived:
+ branch: lp:~sdn-charmers/charms/trusty/keepalived/trunk
+ options:
+ virtual-ip: x.x.x.x
+ overrides:
+ admin-role: admin
+ relations:
+ - [ "contrail-configuration:cassandra", "cassandra:database" ]
+ - [ contrail-configuration, zookeeper ]
+ - [ contrail-configuration, rabbitmq-server ]
+ - [ contrail-configuration, keystone ]
+ - [ contrail-configuration, neutron-gateway ]
+ - [ neutron-api-contrail, contrail-configuration ]
+ - [ neutron-api-contrail, keystone ]
+ - [ "contrail-control:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-control:contrail-ifmap", "contrail-configuration:contrail-ifmap" ]
+ - [ "contrail-analytics:cassandra", "cassandra:database" ]
+ - [ contrail-analytics, contrail-configuration ]
+ - [ contrail-webui, keystone ]
+ - [ "contrail-webui:contrail_api", "contrail-configuration:contrail-api" ]
+ - [ "contrail-webui:contrail_discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-webui:cassandra", "cassandra:database" ]
+ - [ nova-compute, neutron-contrail ]
+ - [ "neutron-contrail:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ neutron-contrail, neutron-gateway ]
+ - [ "neutron-contrail:contrail-api", "contrail-configuration:contrail-api" ]
+ - [ neutron-contrail, keystone ]
+ - [ contrail-configuration, haproxy ]
+ - [ contrail-analytics, haproxy ]
+ - [ contrail-webui, haproxy ]
+ - [ haproxy, keepalived ]
+trusty-icehouse-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ haproxy:
+ charm: cs:trusty/haproxy
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+trusty-juno-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ haproxy:
+ charm: cs:trusty/haproxy
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+ overrides:
+ openstack-origin: cloud:trusty-juno
diff --git a/ci/opencontrail/juju-deployer/contrail.yaml b/ci/opencontrail/juju-deployer/contrail.yaml
new file mode 100644
index 00000000..c2f48789
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/contrail.yaml
@@ -0,0 +1,191 @@
+openstack:
+ services:
+ ubuntu:
+ branch: "lp:charms/trusty/ubuntu"
+ constraints: tags=physical
+ num_units: 2
+
+ mysql:
+ constraints: mem=1G
+ options:
+ dataset-size: 50%
+ max-connections: 20000
+ to:
+ - "lxc:ubuntu=0"
+
+ rabbitmq-server:
+ constraints: mem=1G
+ to:
+ - "lxc:ubuntu=0"
+
+ keystone:
+ branch: lp:~openstack-charmers/charms/trusty/keystone/next
+ constraints: mem=1G
+ options:
+ admin-password: openstack
+ admin-role: admin
+ to:
+ - "lxc:ubuntu=0"
+
+ openstack-dashboard:
+ branch: lp:~openstack-charmers/charms/trusty/openstack-dashboard/next
+ constraints: mem=1G
+ to:
+ - "lxc:ubuntu=0"
+
+ nova-compute:
+ branch: lp:~openstack-charmers/charms/trusty/nova-compute/next
+ constraints: tags=physical
+ num_units: 2
+ to:
+ - "ubuntu=0"
+ - "ubuntu=1"
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ nova-cloud-controller:
+ branch: lp:~openstack-charmers/charms/trusty/nova-cloud-controller/next
+ constraints: mem=1G
+ options:
+ network-manager: Neutron
+ to:
+ - "lxc:ubuntu=0"
+
+ neutron-gateway:
+ branch: lp:~sdn-charmers/charms/trusty/quantum-gateway/contrail
+ constraints: tags=virtual
+
+ glance:
+ branch: lp:~openstack-charmers/charms/trusty/glance/next
+ constraints: mem=1G
+ to:
+ - "lxc:ubuntu=0"
+
+ neutron-api:
+ branch: lp:~openstack-charmers/charms/trusty/neutron-api/vpp
+ constraints: tags=virtual
+ to:
+ - "lxc:ubuntu=0"
+ options:
+ manage-neutron-plugin-legacy-mode: false
+ relations:
+ - [ keystone, mysql ]
+ - [ nova-cloud-controller, mysql ]
+ - [ nova-cloud-controller, rabbitmq-server ]
+ - [ nova-cloud-controller, glance ]
+ - [ nova-cloud-controller, keystone ]
+ - [ nova-compute, nova-cloud-controller ]
+ - [ "nova-compute:shared-db", "mysql:shared-db" ]
+ - [ "nova-compute:amqp", "rabbitmq-server:amqp" ]
+ - [ nova-compute, glance ]
+ - [ glance, mysql ]
+ - [ glance, keystone ]
+ - [ neutron-gateway, mysql ]
+ - [ "neutron-gateway:amqp", "rabbitmq-server:amqp" ]
+ - [ neutron-gateway, nova-cloud-controller ]
+ - [ openstack-dashboard, keystone ]
+ - [ neutron-api, mysql ]
+ - [ neutron-api, rabbitmq-server ]
+ - [ neutron-api, nova-cloud-controller ]
+ - [ neutron-api, keystone ]
+ - [ neutron-api, neutron-api-contrail ]
+contrail:
+ inherits: openstack
+ services:
+ cassandra:
+ branch: lp:~sdn-charmers/charms/precise/cassandra/forced-install
+ series: precise
+ constraints: tags=physical
+ options:
+ allow-single-node: true
+
+ zookeeper:
+ branch: lp:~sdn-charmers/charms/precise/zookeeper/fix-symlink
+ series: precise
+ constraints: mem=1G
+ to:
+ - "lxc:cassandra=0"
+
+ contrail-configuration:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-configuration/ssl
+ constraints: mem=4G
+ to:
+ - "lxc:ubuntu=0"
+# options:
+# floating-ip-pools: "[ { project: admin, network: public, pool-name: floatingip_pool, target-projects: [ admin ] } ]"
+
+ contrail-control:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-control/trunk
+ constraints: mem=2G
+ to:
+ - "lxc:ubuntu=0"
+
+ contrail-analytics:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-analytics/trunk
+ constraints: mem=4G
+ to:
+ - "lxc:ubuntu=0"
+
+ contrail-webui:
+ branch: lp:~sdn-charmers/charms/trusty/contrail-webui/trunk
+ to:
+ - "lxc:ubuntu=0"
+
+ neutron-api-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk
+# options:
+# overlay-network-type: 'vxlan gre'
+# security-groups: true
+
+ neutron-contrail:
+ branch: lp:~sdn-charmers/charms/trusty/neutron-contrail/trunk
+ overrides:
+ admin-role: admin
+ relations:
+ - [ "contrail-configuration:cassandra", "cassandra:database" ]
+ - [ neutron-api-contrail, contrail-configuration ]
+ - [ neutron-api-contrail, keystone ]
+ - [ "contrail-control:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-control:contrail-ifmap", "contrail-configuration:contrail-ifmap" ]
+ - [ "contrail-analytics:cassandra", "cassandra:database" ]
+ - [ contrail-analytics, contrail-configuration ]
+ - [ contrail-webui, keystone ]
+ - [ "contrail-webui:contrail_api", "contrail-configuration:contrail-api" ]
+ - [ "contrail-webui:contrail_discovery", "contrail-configuration:contrail-discovery" ]
+ - [ "contrail-webui:cassandra", "cassandra:database" ]
+ - [ nova-compute, neutron-contrail ]
+ - [ "neutron-contrail:contrail-discovery", "contrail-configuration:contrail-discovery" ]
+ - [ neutron-contrail, neutron-gateway ]
+ - [ "neutron-contrail:contrail-api", "contrail-configuration:contrail-api" ]
+ - [ neutron-contrail, keystone ]
+ - [ contrail-configuration, zookeeper ]
+ - [ contrail-configuration, rabbitmq-server ]
+ - [ contrail-configuration, keystone ]
+ - [ contrail-configuration, neutron-gateway ]
+precise-icehouse-contrail:
+ inherits: contrail
+ series: precise
+ services:
+ mysql:
+ charm: cs:precise/mysql
+ rabbitmq-server:
+ charm: cs:precise/rabbitmq-server
+ overrides:
+ openstack-origin: cloud:precise-icehouse
+trusty-icehouse-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+trusty-juno-contrail:
+ inherits: contrail
+ series: trusty
+ services:
+ mysql:
+ charm: cs:trusty/mysql
+ rabbitmq-server:
+ charm: cs:trusty/rabbitmq-server
+ overrides:
+ openstack-origin: cloud:trusty-juno
diff --git a/ci/opencontrail/juju-deployer/scripts/cloud-setup.sh b/ci/opencontrail/juju-deployer/scripts/cloud-setup.sh
new file mode 100755
index 00000000..47e625c9
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/scripts/cloud-setup.sh
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+# adjust tiny image
+nova flavor-delete m1.tiny
+nova flavor-create m1.tiny 1 512 8 1
+
+# configure external network
+neutron net-create --router:external=True public-net
+neutron subnet-create --name public-subnet --no-gateway --allocation-pool start=10.0.10.2,end=10.0.10.254 --disable-dhcp public-net 10.0.10.0/24
+
+# create vm network
+neutron net-create ubuntu-net
+neutron subnet-create --name ubuntu-subnet --gateway 10.0.5.1 ubuntu-net 10.0.5.0/24
+
+# create pool of floating ips
+i=0
+while [ $i -ne 10 ]; do
+ neutron floatingip-create public-net
+ i=$((i + 1))
+done
+
+# configure security groups
+neutron security-group-rule-create --direction ingress --ethertype IPv4 --protocol icmp --remote-ip-prefix 0.0.0.0/0 default
+neutron security-group-rule-create --direction ingress --ethertype IPv4 --protocol tcp --port-range-min 22 --port-range-max 22 --remote-ip-prefix 0.0.0.0/0 default
+
+# import key pair
+nova keypair-add --pub-key id_rsa.pub ubuntu-keypair
diff --git a/ci/opencontrail/juju-deployer/scripts/glance.sh b/ci/opencontrail/juju-deployer/scripts/glance.sh
new file mode 100755
index 00000000..467932ff
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/scripts/glance.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+. ~/admin-openrc
+
+wget http://cloud-images.ubuntu.com/trusty/current/MD5SUMS
+
+wget http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
+glance image-create --name ubuntu-trusty-daily --disk-format qcow2 --container-format bare --owner admin --file trusty-server-cloudimg-amd64-disk1.img --checksum $(grep trusty-server-cloudimg-amd64-disk1.img MD5SUMS | cut -d " " -f 1) --is-public True
diff --git a/ci/opencontrail/juju-deployer/scripts/openstack.sh b/ci/opencontrail/juju-deployer/scripts/openstack.sh
new file mode 100755
index 00000000..7c0a8ab0
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/scripts/openstack.sh
@@ -0,0 +1,48 @@
+#!/bin/sh -ex
+
+configOpenrc()
+{
+ cat <<-EOF
+ export OS_USERNAME=$1
+ export OS_PASSWORD=$2
+ export OS_TENANT_NAME=$3
+ export OS_AUTH_URL=$4
+ export OS_REGION_NAME=$5
+ EOF
+}
+
+unitAddress()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"public-address\"]" 2> /dev/null
+}
+
+unitMachine()
+{
+ juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"machine\"]" 2> /dev/null
+}
+
+mkdir -m 0700 -p cloud
+controller_address=$(unitAddress keystone 0)
+configOpenrc admin openstack admin http://$controller_address:5000/v2.0 RegionOne > cloud/admin-openrc
+chmod 0600 cloud/admin-openrc
+
+machine=$(unitMachine nova-cloud-controller 0)
+juju scp cloud-setup.sh cloud/admin-openrc ~/.ssh/id_rsa.pub $machine:
+juju run --machine $machine ./cloud-setup.sh
+
+# setup contrail routing
+juju set contrail-configuration "floating-ip-pools=[ { project: admin, network: public-net, pool-name: floatingip_pool, target-projects: [ admin ] } ]"
+juju set neutron-contrail "virtual-gateways=[ { project: admin, network: public-net, interface: vgw, subnets: [ 10.0.10.0/24 ], routes: [ 0.0.0.0/0 ] } ]"
+
+machine=$(unitMachine glance 0)
+juju scp glance.sh cloud/admin-openrc $machine:
+juju run --machine $machine ./glance.sh
+
+# setup host routing
+if [ -n "$CONFIGURE_HOST_ROUTING" ]; then
+ compute_address=$(dig +short $(unitAddress nova-compute 0) | tail -n 1)
+ sudo ip route replace 10.0.10.0/24 via $compute_address
+ sudo iptables -C FORWARD -s 10.0.10.0/24 -j ACCEPT 2> /dev/null || sudo iptables -I FORWARD 1 -s 10.0.10.0/24 -j ACCEPT
+ sudo iptables -C FORWARD -d 10.0.10.0/24 -j ACCEPT 2> /dev/null || sudo iptables -I FORWARD 2 -d 10.0.10.0/24 -j ACCEPT
+ sudo iptables -t nat -C POSTROUTING -s 10.0.10.0/24 ! -d 10.0.10.0/24 -j MASQUERADE 2> /dev/null || sudo iptables -t nat -A POSTROUTING -s 10.0.10.0/24 ! -d 10.0.10.0/24 -j MASQUERADE
+fi
diff --git a/ci/opencontrail/juju-deployer/source/cinder-master.yaml b/ci/opencontrail/juju-deployer/source/cinder-master.yaml
new file mode 100644
index 00000000..b000d709
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/cinder-master.yaml
@@ -0,0 +1,10 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: cinder,
+ repository: 'git://github.com/openstack/cinder',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128
diff --git a/ci/opencontrail/juju-deployer/source/glance-master.yaml b/ci/opencontrail/juju-deployer/source/glance-master.yaml
new file mode 100644
index 00000000..94a0622b
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/glance-master.yaml
@@ -0,0 +1,10 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: glance,
+ repository: 'git://github.com/openstack/glance',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128
diff --git a/ci/opencontrail/juju-deployer/source/horizon-master.yaml b/ci/opencontrail/juju-deployer/source/horizon-master.yaml
new file mode 100644
index 00000000..0fd7e501
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/horizon-master.yaml
@@ -0,0 +1,10 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: horizon,
+ repository: 'git://github.com/openstack/horizon',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128
diff --git a/ci/opencontrail/juju-deployer/source/keystone-master.yaml b/ci/opencontrail/juju-deployer/source/keystone-master.yaml
new file mode 100644
index 00000000..fb8575de
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/keystone-master.yaml
@@ -0,0 +1,10 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: keystone,
+ repository: 'git://github.com/openstack/keystone',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128
diff --git a/ci/opencontrail/juju-deployer/source/neutron-master.yaml b/ci/opencontrail/juju-deployer/source/neutron-master.yaml
new file mode 100644
index 00000000..ee4c8932
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/neutron-master.yaml
@@ -0,0 +1,19 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: neutron-fwaas,
+ repository: 'git://github.com/openstack/neutron-fwaas',
+ branch: master}
+ - {name: neutron-lbaas,
+ repository: 'git://github.com/openstack/neutron-lbaas',
+ branch: master}
+ - {name: neutron-vpnaas,
+ repository: 'git://github.com/openstack/neutron-vpnaas',
+ branch: master}
+ - {name: neutron,
+ repository: 'git://github.com/openstack/neutron',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128
diff --git a/ci/opencontrail/juju-deployer/source/nova-master.yaml b/ci/opencontrail/juju-deployer/source/nova-master.yaml
new file mode 100644
index 00000000..0bbee4c3
--- /dev/null
+++ b/ci/opencontrail/juju-deployer/source/nova-master.yaml
@@ -0,0 +1,13 @@
+repositories:
+ - {name: requirements,
+ repository: 'git://github.com/openstack/requirements',
+ branch: master}
+ - {name: neutron,
+ repository: 'git://github.com/openstack/neutron',
+ branch: master}
+ - {name: nova,
+ repository: 'git://github.com/openstack/nova',
+ branch: master}
+directory: /mnt/openstack-git
+#http_proxy: http://squid.internal:3128
+#https_proxy: http://squid.internal:3128