from . import model
from .client import client
+from .placement import parse as parse_placement
log = logging.getLogger(__name__)
"""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.
result = await app_facade.AddUnits(
application=self.name,
- placement=to,
+ placement=parse_placement(to) if to else None,
num_units=count,
)
:param int value: Budget limit
"""
- pass
+ raise NotImplementedError()
def attach(self, resource_name, file_path):
"""Upload a file as a resource for this application.
: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.
:param bool schema: Return the full action schema
"""
- pass
+ raise NotImplementedError()
def get_resources(self, details=False):
"""Return resources for this application.
unit
"""
- pass
+ raise NotImplementedError()
- 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.
self.ann_facade.connect(self.connection)
ann = client.EntityAnnotations(
- entity=self.name,
+ entity=self.tag,
annotations=annotations,
)
return await self.ann_facade.Set([ann])
:param str info: Extra info message
"""
- pass
+ raise NotImplementedError()
def set_plan(self, plan_name):
"""Set the plan for this application, effective immediately.
:param str plan_name: Name of plan
"""
- pass
+ raise NotImplementedError()
async def unexpose(self):
"""Remove public availability over the network for this application.
:param int allocation: The allocation to set
"""
- pass
+ raise NotImplementedError()
def upgrade_charm(
self, channel=None, force_series=False, force_units=False,
: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)