X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=juju%2Fapplication.py;h=2733a6c370ff347c59169698522eb14e17f56c98;hb=refs%2Ftags%2F0.4.0;hp=df309b30366a1913d5c050148d3adaf54324606e;hpb=0056d3f87102e50a1c35c05bdfa25124c387440f;p=osm%2FN2VC.git diff --git a/juju/application.py b/juju/application.py index df309b3..2733a6c 100644 --- a/juju/application.py +++ b/juju/application.py @@ -41,14 +41,18 @@ class Application(model.ModelEntity): """Get the application status, as set by the charm's leader. """ - return self.data['status']['current'] + return self.safe_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'] + return self.safe_data['status']['message'] + + @property + def tag(self): + return 'application-%s' % self.name async def add_relation(self, local_relation, remote_relation): """Add a relation to another application. @@ -75,8 +79,7 @@ class Application(model.ModelEntity): If None, a new machine is provisioned. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Adding %s unit%s to %s', @@ -84,7 +87,7 @@ class Application(model.ModelEntity): result = await app_facade.AddUnits( application=self.name, - placement=[parse_placement(to)], + placement=parse_placement(to) if to else None, num_units=count, ) @@ -102,7 +105,7 @@ class Application(model.ModelEntity): :param int value: Budget limit """ - pass + raise NotImplementedError() def attach(self, resource_name, file_path): """Upload a file as a resource for this application. @@ -111,13 +114,13 @@ class Application(model.ModelEntity): :param str file_path: Path to the file to upload """ - pass + raise NotImplementedError() def collect_metrics(self): """Collect metrics on this application. """ - pass + raise NotImplementedError() async def destroy_relation(self, local_relation, remote_relation): """Remove a relation to another application. @@ -130,8 +133,7 @@ class Application(model.ModelEntity): if ':' not in local_relation: local_relation = '{}:{}'.format(self.name, local_relation) - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Destroying relation %s <-> %s', local_relation, remote_relation) @@ -151,8 +153,7 @@ class Application(model.ModelEntity): """Remove this application from the model. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Destroying %s', self.name) @@ -164,8 +165,7 @@ class Application(model.ModelEntity): """Make this application publicly available over the network. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Exposing %s', self.name) @@ -176,8 +176,7 @@ class Application(model.ModelEntity): """Return the configuration settings dict for this application. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Getting config for %s', self.name) @@ -188,8 +187,7 @@ class Application(model.ModelEntity): """Return the machine constraints dict for this application. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Getting constraints for %s', self.name) @@ -203,7 +201,7 @@ class Application(model.ModelEntity): :param bool schema: Return the full action schema """ - pass + raise NotImplementedError() def get_resources(self, details=False): """Return resources for this application. @@ -212,7 +210,7 @@ class Application(model.ModelEntity): unit """ - pass + raise NotImplementedError() async def run(self, command, timeout=None): """Run command on all units for this application. @@ -221,8 +219,7 @@ class Application(model.ModelEntity): :param int timeout: Time to wait before command is considered failed """ - action = client.ActionFacade() - action.connect(self.connection) + action = client.ActionFacade.from_connection(self.connection) log.debug( 'Running `%s` on all units of %s', command, self.name) @@ -245,11 +242,11 @@ class Application(model.ModelEntity): """ log.debug('Updating annotations on application %s', self.name) - self.ann_facade = client.AnnotationsFacade() - self.ann_facade.connect(self.connection) + self.ann_facade = client.AnnotationsFacade.from_connection( + self.connection) ann = client.EntityAnnotations( - entity=self.name, + entity=self.tag, annotations=annotations, ) return await self.ann_facade.Set([ann]) @@ -261,8 +258,7 @@ class Application(model.ModelEntity): :param bool to_default: Set application options to default values """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Setting config for %s: %s', self.name, config) @@ -275,8 +271,7 @@ class Application(model.ModelEntity): :param dict constraints: Dict of machine constraints """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Setting constraints for %s: %s', self.name, constraints) @@ -290,7 +285,7 @@ class Application(model.ModelEntity): :param str info: Extra info message """ - pass + raise NotImplementedError() def set_plan(self, plan_name): """Set the plan for this application, effective immediately. @@ -298,14 +293,13 @@ class Application(model.ModelEntity): :param str plan_name: Name of plan """ - pass + raise NotImplementedError() async def unexpose(self): """Remove public availability over the network for this application. """ - app_facade = client.ApplicationFacade() - app_facade.connect(self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) log.debug( 'Unexposing %s', self.name) @@ -318,7 +312,7 @@ class Application(model.ModelEntity): :param int allocation: The allocation to set """ - pass + raise NotImplementedError() def upgrade_charm( self, channel=None, force_series=False, force_units=False, @@ -337,4 +331,12 @@ class Application(model.ModelEntity): :param str switch: Crossgrade charm url """ - pass + raise NotImplementedError() + + async def get_metrics(self): + """Get metrics for this application's units. + + :return: Dictionary of unit_name:metrics + + """ + return await self.model.get_metrics(self.tag)