From 4c1f68ce9871fa965fe9683aeeb5ddd66b42a5bc Mon Sep 17 00:00:00 2001 From: Tim Van Steenburgh Date: Tue, 18 Oct 2016 10:13:46 -0400 Subject: [PATCH] Move set_annotations to Application, Machine --- juju/application.py | 74 ++++++++++++++++++++++++++++----------------- juju/machine.py | 18 +++++++++++ juju/model.py | 9 ++---- 3 files changed, 66 insertions(+), 35 deletions(-) diff --git a/juju/application.py b/juju/application.py index 90a78ca..c3d2f0d 100644 --- a/juju/application.py +++ b/juju/application.py @@ -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 '[:]' + :param str local_relation: Name of relation on this application + :param str remote_relation: Name of relation on the other + application in the form '[:]' """ 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 '[:]' + :param str local_relation: Name of relation on this application + :param str remote_relation: Name of relation on the other + application in the form '[:]' """ 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 diff --git a/juju/machine.py b/juju/machine.py index 181c60c..5eac6c2 100644 --- a/juju/machine.py +++ b/juju/machine.py @@ -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): diff --git a/juju/model.py b/juju/model.py index b168987..7781d34 100644 --- a/juju/model.py +++ b/juju/model.py @@ -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): -- 2.25.1