class Controller(object):
+ def __init__(self, loop=None):
+ """Instantiate a new Controller.
+
+ One of the connect_* methods will need to be called before this
+ object can be used for anything interesting.
+
+ :param loop: an asyncio event loop
+
+ """
+ self.loop = loop or asyncio.get_event_loop()
+ self.connection = None
+
+ async def connect(
+ self, endpoint, username, password, cacert=None, macaroons=None):
+ """Connect to an arbitrary Juju controller.
+
+ """
+ self.connection = await connection.Connection.connect(
+ endpoint, None, username, password, cacert, macaroons)
+
async def connect_current(self):
"""Connect to the current Juju controller.
self.connection = (
await connection.Connection.connect_current_controller())
+ async def connect_controller(self, controller_name):
+ """Connect to a Juju controller by name.
+
+ """
+ self.connection = (
+ await connection.Connection.connect_controller(controller_name))
+
async def disconnect(self):
"""Shut down the watcher task and close websockets.
return model
+ async def destroy_models(self, *args):
+
+ """Destroy a model to this controller.
+
+ :param str : <UUID> of the Model
+ param accepts string of <UUID> only OR `model-<UUID>`
+
+
+ """
+ model_facade = client.ModelManagerFacade()
+ model_facade.connect(self.connection)
+
+ # Generate list of args, pre-pend 'model-'
+ prependarg = list(args)
+ for index, item in enumerate(prependarg):
+ if not item.startswith('model-'):
+ prependarg[index] = "model-%s" % item
+
+ # Create list of objects to pass to DestroyModels()
+ arglist = []
+ for arg in prependarg:
+ arglist.append(client.Entity(arg))
+ log.debug('Destroying Model %s', arg)
+
+ await model_facade.DestroyModels(arglist)
+
def add_user(self, username, display_name=None, acl=None, models=None):
"""Add a user to this controller.