#!/usr/bin/python

import subprocess
import time
import argparse

sleep_interval = 1

relations = [
    "nova-compute:shared-db mysql:shared-db",
    "nova-compute:amqp rabbitmq-server:amqp",
    "nova-compute glance",
    "nova-compute nova-cloud-controller",
    "nova-compute neutron-openvswitch",
    "ntp nova-compute",
    "nova-compute nagios",
    "nova-compute nrpe",
    "nova-compute:nova-ceilometer ceilometer-agent:nova-ceilometer",
    ]

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()
