diff --git a/scripts/juju-compute-setup.py b/scripts/juju-compute-setup.py
new file mode 100755
index 0000000..cc62b50
--- /dev/null
+++ b/scripts/juju-compute-setup.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+
+import subprocess
+import json
+import time
+
+jujuconfig="/home/ubuntu/openstack.cfg"
+
+services = {
+    "nova-compute" : "--config=%s cs:~andybavier/trusty/nova-compute" % jujuconfig,
+}
+
+def get_free_machines(status):
+    for (service, svcinfo) in status['services'].iteritems():
+        if 'units' in svcinfo:
+            for (unit, unitinfo) in svcinfo['units'].iteritems():
+                if 'machine' in unitinfo:
+                    machine = unitinfo['machine']
+                    status['machines'][machine]['unit'] = unit
+
+    free = {}
+    for (machine, mchinfo) in status['machines'].iteritems():
+        if machine == "0":
+            continue
+
+        if 'unit' not in mchinfo:
+            # print "%s: %s" % (machine, mchinfo['dns-name'])
+            free[machine] = mchinfo
+
+    return free
+                
+
+def deploy(status, service, cmd):
+    # Deploy nova-compute to all free machines
+    machines = get_free_machines(status)
+    
+    for (machine, mchinfo) in machines.iteritems():
+        if service in status['services']: 
+            print "Adding unit %s on %s" % (service, mchinfo['dns-name'])
+            subprocess.check_call("juju add-unit --to=%s %s" % (machine, service), shell=True)
+        else:
+            print "Deploying service %s on %s" % (service, mchinfo['dns-name'])
+            subprocess.check_call("juju deploy --to=%s %s" % (machine, cmd), shell=True)
+            status['services'][service] = "installed"
+            time.sleep(10)
+
+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 main():
+    addservices()
+
+if  __name__ =='__main__':
+    main()
