summaryrefslogtreecommitdiffstats
path: root/ci/opencontrail/juju-deployer
diff options
context:
space:
mode:
Diffstat (limited to 'ci/opencontrail/juju-deployer')
-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
12 files changed, 646 insertions, 0 deletions
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