X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fapplication.py;h=4a98622de21707f8066f5972d961be4387108b2e;hb=bccd5c73a2f02a768612c7aec318c910fceda299;hp=f6129a5f8120bcaba62ecdf89adbde088cade0b0;hpb=c82b09f55dddef7a72885713bcfd272af479fb5a;p=osm%2FN2VC.git diff --git a/juju/application.py b/juju/application.py index f6129a5..4a98622 100644 --- a/juju/application.py +++ b/juju/application.py @@ -35,7 +35,21 @@ class Application(model.ModelEntity): if unit.application == self.name ] - def add_relation(self, local_relation, remote_relation): + @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'] + + 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 @@ -43,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. @@ -101,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 @@ -109,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. @@ -137,17 +171,30 @@ class Application(model.ModelEntity): return await app_facade.Expose(self.name) - def get_config(self): - """Return the configuration settings for this application. + async def get_config(self): + """Return the configuration settings dict for this application. """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Getting config for %s', self.name) + + return (await app_facade.Get(self.name)).config - def get_constraints(self): - """Return the machine constraints for this application. + async def get_constraints(self): + """Return the machine constraints dict for this application. """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Getting constraints for %s', self.name) + + result = (await app_facade.Get(self.name)).constraints + return vars(result) if result else result def get_actions(self, schema=False): """Get actions defined for this application. @@ -166,14 +213,27 @@ class Application(model.ModelEntity): """ pass - def run(self, command, timeout=None): + async def run(self, command, timeout=None): """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 """ - pass + action = client.ActionFacade() + action.connect(self.connection) + + log.debug( + 'Running `%s` on all units of %s', command, self.name) + + # TODO this should return a list of Actions + return await action.Run( + [self.name], + command, + [], + timeout, + [], + ) async def set_annotations(self, annotations): """Set annotations on this application. @@ -193,22 +253,34 @@ class Application(model.ModelEntity): ) return await self.ann_facade.Set([ann]) - def set_config(self, to_default=False, **config): + async def set_config(self, config, to_default=False): """Set configuration options for this application. + :param config: Dict of configuration to set :param bool to_default: Set application options to default values - :param \*\*config: Config key/values """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Setting config for %s: %s', self.name, config) - def set_constraints(self, constraints): + return await app_facade.Set(self.name, config) + + async def set_constraints(self, constraints): """Set machine constraints for this application. - :param :class:`juju.Constraints` constraints: Machine constraints + :param dict constraints: Dict of machine constraints """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Setting constraints for %s: %s', self.name, constraints) + + return await app_facade.SetConstraints(self.name, constraints) def set_meter_status(self, status, info=None): """Set the meter status on this status. @@ -227,11 +299,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.