From bea85caae65ac8d28b87feec5c7a1b6d5dbce070 Mon Sep 17 00:00:00 2001 From: Tim Van Steenburgh Date: Tue, 1 Nov 2016 16:17:11 -0400 Subject: [PATCH] Add set config/constraints for Application --- examples/config.py | 20 +++++++++++++++++--- juju/application.py | 27 ++++++++++++++++++++------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/examples/config.py b/examples/config.py index 616c780..eda9891 100644 --- a/examples/config.py +++ b/examples/config.py @@ -11,6 +11,9 @@ import logging from juju.model import Model +log = logging.getLogger(__name__) + +MB = 1024 * 1024 async def run(): model = Model() @@ -22,12 +25,23 @@ async def run(): service_name='mysql', series='trusty', channel='stable', + config={ + 'tuning-level': 'safest', + }, constraints={ - 'mem': 512 * 1024 * 1024 + 'mem': 256 * MB, }, ) - print(await ubuntu_app.get_config()) - print(await ubuntu_app.get_constraints()) + + # update and check app config + await ubuntu_app.set_config({'tuning-level': 'fast'}) + config = await ubuntu_app.get_config() + assert(config['tuning-level']['value'] == 'fast') + + # update and check app constraints + await ubuntu_app.set_constraints({'mem': 512 * MB}) + constraints = await ubuntu_app.get_constraints() + assert(constraints['mem'] == 512 * MB) await model.disconnect() model.loop.stop() diff --git a/juju/application.py b/juju/application.py index 42dae71..272268d 100644 --- a/juju/application.py +++ b/juju/application.py @@ -193,7 +193,8 @@ class Application(model.ModelEntity): log.debug( 'Getting constraints for %s', self.name) - return vars((await app_facade.Get(self.name)).constraints) + 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. @@ -239,22 +240,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) + + return await app_facade.Set(self.name, config) - def set_constraints(self, constraints): + 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. -- 2.25.1