diff --git a/scripts/juju-relations.py b/scripts/juju-relations.py
new file mode 100755
index 0000000..1be59ab
--- /dev/null
+++ b/scripts/juju-relations.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+
+import subprocess
+import time
+import argparse
+
+sleep_interval = 1
+
+relations = ["keystone mysql",
+             "nova-cloud-controller mysql",
+             "nova-cloud-controller rabbitmq-server",
+             "nova-cloud-controller glance",
+             "nova-cloud-controller keystone",
+             "glance mysql",
+             "glance keystone",
+             "quantum-gateway mysql",
+             "quantum-gateway rabbitmq-server",
+             "quantum-gateway nova-cloud-controller",
+             "openstack-dashboard keystone",
+             "ntp nova-cloud-controller",
+             "mysql nagios",
+             "rabbitmq-server nagios",
+             "keystone nagios",
+             "glance nagios",
+             "nova-cloud-controller nagios",
+             "quantum-gateway nagios",
+             "openstack-dashboard nagios",
+             "nagios nrpe",
+             "mysql nrpe",
+             "rabbitmq-server nrpe",
+             "keystone nrpe",
+             "glance nrpe",
+             "nova-cloud-controller nrpe",
+             "quantum-gateway nrpe",
+             "openstack-dashboard nrpe",
+             "ceilometer mongodb",
+             "ceilometer rabbitmq-server",
+             "ceilometer:identity-service keystone:identity-service",
+             "ceilometer:ceilometer-service ceilometer-agent:ceilometer-service",
+             "ceilometer nagios",
+             "ceilometer nrpe",
+             ]
+
+def addrelation(relation):
+    subprocess.check_call("juju add-relation %s" % relation, shell=True)
+
+def destroyrelation(relation):
+    subprocess.check_call("juju destroy-relation %s" % relation, shell=True)
+
+def addrelations():
+    for relation in relations:
+        print "Adding relation %s" % relation
+        try:
+            addrelation(relation)
+            time.sleep(sleep_interval)
+        except:
+            pass
+            
+def destroyrelations():
+    for relation in relations:
+        print "Destroying relation %s" % relation
+        try:
+            destroyrelation(relation)
+            time.sleep(sleep_interval)
+        except:
+            pass
+
+def main():
+    parser = argparse.ArgumentParser(description='Deploy OpenStack controller services')
+    parser.add_argument('--destroy', action='store_true',
+                       help='Destroy the relations instead of adding them')
+
+    args = parser.parse_args()
+    if args.destroy:
+        destroyrelations()
+    else:
+        addrelations()
+        
+if  __name__ =='__main__':
+    main()
