Initial commit
diff --git a/scripts/juju-setup.py b/scripts/juju-setup.py
new file mode 100755
index 0000000..f9bb0ac
--- /dev/null
+++ b/scripts/juju-setup.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+
+import subprocess
+import json
+import socket
+
+jujuconfig="openstack.cfg"
+
+# Assumption: VMs have same hostname as service that runs inside
+machines = ["mysql", "rabbitmq-server", "keystone", "glance", "nova-cloud-controller",
+            "quantum-gateway", "openstack-dashboard", "ceilometer", "nagios"]
+
+services = {
+    "mysql" : "mysql",
+    "rabbitmq-server" : "rabbitmq-server",
+    "keystone" : "--config=%s keystone" % jujuconfig,
+    "glance" : "--config=%s glance" % jujuconfig,
+    "nova-cloud-controller" : "--config=%s cs:~andybavier/trusty/nova-cloud-controller" % jujuconfig,
+    "quantum-gateway" : "--config=%s cs:~andybavier/trusty/quantum-gateway" % jujuconfig,
+    "openstack-dashboard" : "--config=%s openstack-dashboard" % jujuconfig,
+    "nagios" : "nagios",
+    "mongodb" : "mongodb",   # deploy to ceilometer machine
+    "ceilometer" : "ceilometer",
+    "nrpe" : "nrpe",
+    "ntp" : "ntp",
+    "ceilometer-agent" : "ceilometer-agent"
+}
+
+# Figure out Juju ID of machine we should install on
+def get_machine(status, service):
+    if service == "mongodb":
+        service = "ceilometer"
+    for key, value in status['machines'].iteritems():
+        (hostname, aliaslist, ipaddrlist) = socket.gethostbyaddr(value['dns-name'])
+        if hostname == service:
+            return key
+    return None
+
+def deploy(status, service, cmd):
+    if service in status['services']:
+        return
+
+    print "Installing %s" % service
+    machine = get_machine(status, service)
+    if machine:
+        subprocess.check_call("juju deploy --to=%s %s" % (machine, cmd), shell=True)
+    else:
+        subprocess.check_call("juju deploy %s" % cmd, shell=True)
+
+def get_juju_status():
+    output = subprocess.check_output("juju status --format=json", shell=True)
+    status = json.loads(output)
+    return status
+
+def addservices():
+    status = get_juju_status()
+
+    for service, cmd in services.iteritems():
+        try:
+            deploy(status, service, cmd)
+        except:
+            pass
+
+def addmachines():
+    status = get_juju_status()
+
+    for machine in machines:
+        if get_machine(status, machine) == None:
+            ipaddr = socket.gethostbyname(machine)
+            subprocess.check_call("juju add-machine ssh:%s" % ipaddr, shell=True)
+
+def main():
+    addmachines()
+    addservices()
+
+if  __name__ =='__main__':
+    main()