X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fapplication.py;h=1e87ced2e26ea1ab24de5badfb63f011c0b9a803;hb=1dd5b8bb6d597700bd5ae06e00a25f7f7d684797;hp=a72533d43daba7fca764015fe05192e4e777d80c;hpb=fe2d2f1a5ef2453359858481929a2526ea1a3c5c;p=osm%2FN2VC.git diff --git a/juju/application.py b/juju/application.py index a72533d..1e87ced 100644 --- a/juju/application.py +++ b/juju/application.py @@ -1,7 +1,39 @@ +import logging + from . import model +from .client import client + +log = logging.getLogger(__name__) class Application(model.ModelEntity): + @property + def _unit_match_pattern(self): + return r'^{}.*$'.format(self.entity_id) + + def on_unit_add(self, callable_): + """Add a "unit added" observer to this entity, which will be called + whenever a unit is added to this application. + + """ + self.model.add_observer( + callable_, 'unit', 'add', self._unit_match_pattern) + + def on_unit_remove(self, callable_): + """Add a "unit removed" observer to this entity, which will be called + whenever a unit is removed from this application. + + """ + self.model.add_observer( + callable_, 'unit', 'remove', self._unit_match_pattern) + + @property + def units(self): + return [ + unit for unit in self.model.units.values() + if unit.application == self.name + ] + def add_relation(self, local_relation, remote_relation): """Add a relation to another service. @@ -62,11 +94,17 @@ class Application(model.ModelEntity): pass remove_relation = destroy_relation - def destroy(self): + async def destroy(self): """Remove this service from the model. """ - pass + app_facade = client.ApplicationFacade() + app_facade.connect(self.connection) + + log.debug( + 'Destroying %s', self.name) + + return await app_facade.Destroy(self.name) remove = destroy def expose(self):