Move set_annotations to Application, Machine
authorTim Van Steenburgh <tvansteenburgh@gmail.com>
Tue, 18 Oct 2016 14:13:46 +0000 (10:13 -0400)
committerTim Van Steenburgh <tvansteenburgh@gmail.com>
Tue, 18 Oct 2016 14:13:46 +0000 (10:13 -0400)
juju/application.py
juju/machine.py
juju/model.py

index 90a78ca..c3d2f0d 100644 (file)
@@ -36,17 +36,17 @@ class Application(model.ModelEntity):
         ]
 
     def add_relation(self, local_relation, remote_relation):
-        """Add a relation to another service.
+        """Add a relation to another application.
 
-        :param str local_relation: Name of relation on this service
-        :param str remote_relation: Name of relation on the other service in
-            the form '<service>[:<relation_name>]'
+        :param str local_relation: Name of relation on this application
+        :param str remote_relation: Name of relation on the other
+            application in the form '<application>[:<relation_name>]'
 
         """
         pass
 
     async def add_unit(self, count=1, to=None):
-        """Add one or more units to this service.
+        """Add one or more units to this application.
 
         :param int count: Number of units to add
         :param str to: Placement directive, e.g.::
@@ -78,7 +78,7 @@ class Application(model.ModelEntity):
     add_units = add_unit
 
     def allocate(self, budget, value):
-        """Allocate budget to this service.
+        """Allocate budget to this application.
 
         :param str budget: Name of budget
         :param int value: Budget limit
@@ -87,7 +87,7 @@ class Application(model.ModelEntity):
         pass
 
     def attach(self, resource_name, file_path):
-        """Upload a file as a resource for this service.
+        """Upload a file as a resource for this application.
 
         :param str resource: Name of the resource
         :param str file_path: Path to the file to upload
@@ -96,24 +96,24 @@ class Application(model.ModelEntity):
         pass
 
     def collect_metrics(self):
-        """Collect metrics on this service.
+        """Collect metrics on this application.
 
         """
         pass
 
     def destroy_relation(self, local_relation, remote_relation):
-        """Remove a relation to another service.
+        """Remove a relation to another application.
 
-        :param str local_relation: Name of relation on this service
-        :param str remote_relation: Name of relation on the other service in
-            the form '<service>[:<relation_name>]'
+        :param str local_relation: Name of relation on this application
+        :param str remote_relation: Name of relation on the other
+            application in the form '<application>[:<relation_name>]'
 
         """
         pass
     remove_relation = destroy_relation
 
     async def destroy(self):
-        """Remove this service from the model.
+        """Remove this application from the model.
 
         """
         app_facade = client.ApplicationFacade()
@@ -126,7 +126,7 @@ class Application(model.ModelEntity):
     remove = destroy
 
     async def expose(self):
-        """Make this service publicly available over the network.
+        """Make this application publicly available over the network.
 
         """
         app_facade = client.ApplicationFacade()
@@ -138,19 +138,19 @@ class Application(model.ModelEntity):
         return await app_facade.Expose(self.name)
 
     def get_config(self):
-        """Return the configuration settings for this service.
+        """Return the configuration settings for this application.
 
         """
         pass
 
     def get_constraints(self):
-        """Return the machine constraints for this service.
+        """Return the machine constraints for this application.
 
         """
         pass
 
     def get_actions(self, schema=False):
-        """Get actions defined for this service.
+        """Get actions defined for this application.
 
         :param bool schema: Return the full action schema
 
@@ -158,7 +158,7 @@ class Application(model.ModelEntity):
         pass
 
     def get_resources(self, details=False):
-        """Return resources for this service.
+        """Return resources for this application.
 
         :param bool details: Include detailed info about resources used by each
             unit
@@ -167,7 +167,7 @@ class Application(model.ModelEntity):
         pass
 
     def run(self, command, timeout=None):
-        """Run command on all units for this service.
+        """Run command on all units for this application.
 
         :param str command: The command to run
         :param int timeout: Time to wait before command is considered failed
@@ -175,17 +175,35 @@ class Application(model.ModelEntity):
         """
         pass
 
+    async def set_annotations(self, annotations):
+        """Set annotations on this application.
+
+        :param annotations map[string]string: the annotations as key/value
+            pairs.
+
+        """
+        log.debug('Updating annotations on application %s', self.name)
+
+        self.ann_facade = client.AnnotationsFacade()
+        self.ann_facade.connect(model.connection)
+
+        ann = client.EntityAnnotations(
+            entity=self.name,
+            annotations=annotations,
+        )
+        return await self.ann_facade.Set([ann])
+
     def set_config(self, to_default=False, **config):
-        """Set configuration options for this service.
+        """Set configuration options for this application.
 
-        :param bool to_default: Set service options to default values
+        :param bool to_default: Set application options to default values
         :param \*\*config: Config key/values
 
         """
         pass
 
     def set_constraints(self, constraints):
-        """Set machine constraints for this service.
+        """Set machine constraints for this application.
 
         :param :class:`juju.Constraints` constraints: Machine constraints
 
@@ -202,7 +220,7 @@ class Application(model.ModelEntity):
         pass
 
     def set_plan(self, plan_name):
-        """Set the plan for this service, effective immediately.
+        """Set the plan for this application, effective immediately.
 
         :param str plan_name: Name of plan
 
@@ -210,13 +228,13 @@ class Application(model.ModelEntity):
         pass
 
     def unexpose(self):
-        """Remove public availability over the network for this service.
+        """Remove public availability over the network for this application.
 
         """
         pass
 
     def update_allocation(self, allocation):
-        """Update existing allocation for this service.
+        """Update existing allocation for this application.
 
         :param int allocation: The allocation to set
 
@@ -226,12 +244,12 @@ class Application(model.ModelEntity):
     def upgrade_charm(
             self, channel=None, force_series=False, force_units=False,
             path=None, resources=None, revision=-1, switch=None):
-        """Upgrade the charm for this service.
+        """Upgrade the charm for this application.
 
         :param str channel: Channel to use when getting the charm from the
             charm store, e.g. 'development'
-        :param bool force_series: Upgrade even if series of deployed service
-            is not supported by the new charm
+        :param bool force_series: Upgrade even if series of deployed
+            application is not supported by the new charm
         :param bool force_units: Upgrade all units immediately, even if in
             error state
         :param str path: Uprade to a charm located at path
index 181c60c..5eac6c2 100644 (file)
@@ -29,6 +29,24 @@ class Machine(model.ModelEntity):
         """
         pass
 
+    async def set_annotations(self, annotations):
+        """Set annotations on this machine.
+
+        :param annotations map[string]string: the annotations as key/value
+            pairs.
+
+        """
+        log.debug('Updating annotations on machine %s', self.id)
+
+        self.ann_facade = client.AnnotationsFacade()
+        self.ann_facade.connect(model.connection)
+
+        ann = client.EntityAnnotations(
+            entity=self.id,
+            annotations=annotations,
+        )
+        return await self.ann_facade.Set([ann])
+
     def scp(
             self, source_path, user=None, destination_path=None, proxy=False,
             scp_opts=None):
index b168987..7781d34 100644 (file)
@@ -1325,13 +1325,8 @@ class BundleHandler(object):
             Annotations holds the annotations as key/value pairs.
         """
         entity_id = self.resolve(id_)
-        log.debug('Updating annotations of %s', entity_id)
-        ann = client.EntityAnnotations(
-            entity=entity_id,
-            annotations=annotations,
-        )
-        await self.ann_facade.Set([ann])
-        return None
+        entity = self.model.state.get_entity(entity_type, entity_id)
+        return await entity.set_annotations(annotations)
 
 
 class CharmStore(object):