From 01df4afcb5ff210724d9e8702539aee811a36092 Mon Sep 17 00:00:00 2001 From: Tim Van Steenburgh Date: Tue, 1 Nov 2016 14:47:16 -0400 Subject: [PATCH] Wire up more Application apis --- examples/relate.py | 2 +- juju/application.py | 40 ++++++++++++++++++++++++++++++++++------ juju/model.py | 15 +++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/examples/relate.py b/examples/relate.py index 1952ffe..aeb320d 100644 --- a/examples/relate.py +++ b/examples/relate.py @@ -78,7 +78,7 @@ async def run(): service_name='nrpe', series='trusty', channel='stable', - num_units=0, + num_units=1, ) my_relation = await model.add_relation( 'ubuntu', diff --git a/juju/application.py b/juju/application.py index 4e0154a..c12af85 100644 --- a/juju/application.py +++ b/juju/application.py @@ -38,16 +38,18 @@ class Application(model.ModelEntity): @property def status(self): """Get the application status, as set by the charm's leader. + """ return self.data['status']['current'] @property def status_message(self): """Get the application status message, as set by the charm's leader. + """ return self.data['status']['message'] - def add_relation(self, local_relation, remote_relation): + async def add_relation(self, local_relation, remote_relation): """Add a relation to another application. :param str local_relation: Name of relation on this application @@ -55,7 +57,10 @@ class Application(model.ModelEntity): application in the form '[:]' """ - pass + if ':' not in local_relation: + local_relation = '{}:{}'.format(self.name, local_relation) + + return await self.model.add_relation(local_relation, remote_relation) async def add_unit(self, count=1, to=None): """Add one or more units to this application. @@ -113,7 +118,7 @@ class Application(model.ModelEntity): """ pass - def destroy_relation(self, local_relation, remote_relation): + async def destroy_relation(self, local_relation, remote_relation): """Remove a relation to another application. :param str local_relation: Name of relation on this application @@ -121,9 +126,26 @@ class Application(model.ModelEntity): application in the form '[:]' """ - pass + if ':' not in local_relation: + local_relation = '{}:{}'.format(self.name, local_relation) + + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Destroying relation %s <-> %s', local_relation, remote_relation) + + return await app_facade.DestroyRelation([ + local_relation, remote_relation]) remove_relation = destroy_relation + async def destroy_unit(self, *unit_names): + """Destroy units by name. + + """ + return await self.model.destroy_units(*unit_names) + destroy_units = destroy_unit + async def destroy(self): """Remove this application from the model. @@ -239,11 +261,17 @@ class Application(model.ModelEntity): """ pass - def unexpose(self): + async def unexpose(self): """Remove public availability over the network for this application. """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Unexposing %s', self.name) + + return await app_facade.Unexpose(self.name) def update_allocation(self, allocation): """Update existing allocation for this application. diff --git a/juju/model.py b/juju/model.py index 7fe0514..cc9ee95 100644 --- a/juju/model.py +++ b/juju/model.py @@ -823,6 +823,21 @@ class Model(object): """ pass + async def destroy_unit(self, *unit_names): + """Destroy units by name. + + """ + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Destroying unit%s %s', + 's' if len(unit_names) == 1 else '', + ' '.join(unit_names)) + + return await app_facade.Destroy(self.name) + destroy_units = destroy_unit + def get_backup(self, archive_id): """Download a backup archive file. -- 2.25.1