blob: 326eaf35cb0af6c86bc3f4ebc0798d913103a189 [file] [log] [blame]
#!/usr/bin/python
import subprocess
import json
import time
jujuconfig="/usr/local/src/openstack.cfg"
services = {
# "nova-compute" : "--config=%s cs:~andybavier/trusty/nova-compute" % jujuconfig,
"nova-compute" : "--config=%s 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()