Wire up more Application apis
authorTim Van Steenburgh <tvansteenburgh@gmail.com>
Tue, 1 Nov 2016 18:47:16 +0000 (14:47 -0400)
committerTim Van Steenburgh <tvansteenburgh@gmail.com>
Tue, 1 Nov 2016 18:49:58 +0000 (14:49 -0400)
examples/relate.py
juju/application.py
juju/model.py

index 1952ffe..aeb320d 100644 (file)
@@ -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',
index 4e0154a..c12af85 100644 (file)
@@ -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 '<application>[:<relation_name>]'
 
         """
-        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 '<application>[:<relation_name>]'
 
         """
-        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.
index 7fe0514..cc9ee95 100644 (file)
@@ -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.