Source code for juju.client._client2
# DO NOT CHANGE THIS FILE! This file is auto-generated by facade.py.
# Changes will be overwritten/lost when the file is regenerated.
from juju.client.facade import Type, ReturnMapping
from juju.client._definitions import *
[docs]class AnnotationsFacade(Type):
name = 'Annotations'
version = 2
schema = {'definitions': {'AnnotationsGetResult': {'additionalProperties': False,
'properties': {'annotations': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'entity': {'type': 'string'},
'error': {'$ref': '#/definitions/ErrorResult'}},
'required': ['entity', 'annotations'],
'type': 'object'},
'AnnotationsGetResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/AnnotationsGetResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'AnnotationsSet': {'additionalProperties': False,
'properties': {'annotations': {'items': {'$ref': '#/definitions/EntityAnnotations'},
'type': 'array'}},
'required': ['annotations'],
'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'EntityAnnotations': {'additionalProperties': False,
'properties': {'annotations': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'entity': {'type': 'string'}},
'required': ['entity', 'annotations'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'}},
'properties': {'Get': {'description': 'Get returns annotations for given '
'entities.\n'
'If annotations cannot be retrieved for '
'a given entity, an error is returned.\n'
'Each entity is treated independently '
'and, hence, will fail or succeed '
'independently.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/AnnotationsGetResults'}},
'type': 'object'},
'Set': {'description': 'Set stores annotations for given '
'entities',
'properties': {'Params': {'$ref': '#/definitions/AnnotationsSet'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(AnnotationsGetResults)
async def Get(self, entities=None):
'''
Get returns annotations for given entities.
If annotations cannot be retrieved for a given entity, an error is returned.
Each entity is treated independently and, hence, will fail or succeed independently.
entities : typing.Sequence[~Entity]
Returns -> AnnotationsGetResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Annotations',
request='Get',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def Set(self, annotations=None):
'''
Set stores annotations for given entities
annotations : typing.Sequence[~EntityAnnotations]
Returns -> ErrorResults
'''
if annotations is not None and not isinstance(annotations, (bytes, str, list)):
raise Exception("Expected annotations to be a Sequence, received: {}".format(type(annotations)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Annotations',
request='Set',
version=2,
params=_params)
_params['annotations'] = annotations
reply = await self.rpc(msg)
return reply
[docs]class BlockFacade(Type):
name = 'Block'
version = 2
schema = {'definitions': {'Block': {'additionalProperties': False,
'properties': {'id': {'type': 'string'},
'message': {'type': 'string'},
'tag': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['id', 'tag', 'type'],
'type': 'object'},
'BlockResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/Block'}},
'required': ['result'],
'type': 'object'},
'BlockResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'},
'type': 'array'}},
'type': 'object'},
'BlockSwitchParams': {'additionalProperties': False,
'properties': {'message': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['type'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'}},
'properties': {'List': {'description': 'List implements Block.List().',
'properties': {'Result': {'$ref': '#/definitions/BlockResults'}},
'type': 'object'},
'SwitchBlockOff': {'description': 'SwitchBlockOff implements '
'Block.SwitchBlockOff().',
'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'},
'SwitchBlockOn': {'description': 'SwitchBlockOn implements '
'Block.SwitchBlockOn().',
'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(BlockResults)
async def List(self):
'''
List implements Block.List().
Returns -> BlockResults
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='Block',
request='List',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResult)
async def SwitchBlockOff(self, message=None, type_=None):
'''
SwitchBlockOff implements Block.SwitchBlockOff().
message : str
type_ : str
Returns -> ErrorResult
'''
if message is not None and not isinstance(message, (bytes, str)):
raise Exception("Expected message to be a str, received: {}".format(type(message)))
if type_ is not None and not isinstance(type_, (bytes, str)):
raise Exception("Expected type_ to be a str, received: {}".format(type(type_)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Block',
request='SwitchBlockOff',
version=2,
params=_params)
_params['message'] = message
_params['type'] = type_
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResult)
async def SwitchBlockOn(self, message=None, type_=None):
'''
SwitchBlockOn implements Block.SwitchBlockOn().
message : str
type_ : str
Returns -> ErrorResult
'''
if message is not None and not isinstance(message, (bytes, str)):
raise Exception("Expected message to be a str, received: {}".format(type(message)))
if type_ is not None and not isinstance(type_, (bytes, str)):
raise Exception("Expected type_ to be a str, received: {}".format(type(type_)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Block',
request='SwitchBlockOn',
version=2,
params=_params)
_params['message'] = message
_params['type'] = type_
reply = await self.rpc(msg)
return reply
[docs]class CAASAgentFacade(Type):
name = 'CAASAgent'
version = 2
schema = {'definitions': {'CloudCredential': {'additionalProperties': False,
'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'auth-type': {'type': 'string'},
'redacted': {'items': {'type': 'string'},
'type': 'array'}},
'required': ['auth-type'],
'type': 'object'},
'CloudSpec': {'additionalProperties': False,
'properties': {'cacertificates': {'items': {'type': 'string'},
'type': 'array'},
'credential': {'$ref': '#/definitions/CloudCredential'},
'endpoint': {'type': 'string'},
'identity-endpoint': {'type': 'string'},
'is-controller-cloud': {'type': 'boolean'},
'name': {'type': 'string'},
'region': {'type': 'string'},
'skip-tls-verify': {'type': 'boolean'},
'storage-endpoint': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['type', 'name'],
'type': 'object'},
'CloudSpecResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/CloudSpec'}},
'type': 'object'},
'CloudSpecResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/CloudSpecResult'},
'type': 'array'}},
'type': 'object'},
'ControllerAPIInfoResult': {'additionalProperties': False,
'properties': {'addresses': {'items': {'type': 'string'},
'type': 'array'},
'cacert': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['addresses',
'cacert'],
'type': 'object'},
'ControllerAPIInfoResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ControllerAPIInfoResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ControllerConfigResult': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'}},
'required': ['config'],
'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ModelConfigResult': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'}},
'required': ['config'],
'type': 'object'},
'ModelTag': {'additionalProperties': False, 'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'NotifyWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'}},
'properties': {'CloudSpec': {'description': "CloudSpec returns the model's "
'cloud spec.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/CloudSpecResults'}},
'type': 'object'},
'ControllerAPIInfoForModels': {'description': 'ControllerAPIInfoForModels '
'returns the '
'controller api '
'connection '
'details for the '
'specified '
'models.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}},
'type': 'object'},
'ControllerConfig': {'description': 'ControllerConfig returns '
"the controller's "
'configuration.',
'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
'type': 'object'},
'GetCloudSpec': {'description': 'GetCloudSpec constructs the '
'CloudSpec for a validated and '
'authorized model.',
'properties': {'Params': {'$ref': '#/definitions/ModelTag'},
'Result': {'$ref': '#/definitions/CloudSpecResult'}},
'type': 'object'},
'ModelConfig': {'description': 'ModelConfig returns the '
"current model's configuration.",
'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
'type': 'object'},
'WatchCloudSpecsChanges': {'description': 'WatchCloudSpecsChanges '
'returns a watcher '
'for cloud spec '
'changes.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'},
'WatchForModelConfigChanges': {'description': 'WatchForModelConfigChanges '
'returns a '
'NotifyWatcher '
'that observes\n'
'changes to the '
'model '
'configuration.\n'
'Note that '
'although the '
'NotifyWatchResult '
'contains an '
'Error field,\n'
"it's not used "
'because we are '
'only returning '
'a single '
'watcher,\n'
'so we use the '
'regular error '
'return.',
'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(CloudSpecResults)
async def CloudSpec(self, entities=None):
'''
CloudSpec returns the model's cloud spec.
entities : typing.Sequence[~Entity]
Returns -> CloudSpecResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='CloudSpec',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ControllerAPIInfoResults)
async def ControllerAPIInfoForModels(self, entities=None):
'''
ControllerAPIInfoForModels returns the controller api connection details for the specified models.
entities : typing.Sequence[~Entity]
Returns -> ControllerAPIInfoResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='ControllerAPIInfoForModels',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ControllerConfigResult)
async def ControllerConfig(self):
'''
ControllerConfig returns the controller's configuration.
Returns -> ControllerConfigResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='ControllerConfig',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(CloudSpecResult)
async def GetCloudSpec(self):
'''
GetCloudSpec constructs the CloudSpec for a validated and authorized model.
Returns -> CloudSpecResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='GetCloudSpec',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ModelConfigResult)
async def ModelConfig(self):
'''
ModelConfig returns the current model's configuration.
Returns -> ModelConfigResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='ModelConfig',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def WatchCloudSpecsChanges(self, entities=None):
'''
WatchCloudSpecsChanges returns a watcher for cloud spec changes.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='WatchCloudSpecsChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchForModelConfigChanges(self):
'''
WatchForModelConfigChanges returns a NotifyWatcher that observes
changes to the model configuration.
Note that although the NotifyWatchResult contains an Error field,
it's not used because we are only returning a single watcher,
so we use the regular error return.
Returns -> NotifyWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASAgent',
request='WatchForModelConfigChanges',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class CAASUnitProvisionerFacade(Type):
name = 'CAASUnitProvisioner'
version = 2
schema = {'definitions': {'Address': {'additionalProperties': False,
'properties': {'cidr': {'type': 'string'},
'config-type': {'type': 'string'},
'is-secondary': {'type': 'boolean'},
'scope': {'type': 'string'},
'space-id': {'type': 'string'},
'space-name': {'type': 'string'},
'type': {'type': 'string'},
'value': {'type': 'string'}},
'required': ['value', 'type', 'scope'],
'type': 'object'},
'ApplicationGetConfigResults': {'additionalProperties': False,
'properties': {'Results': {'items': {'$ref': '#/definitions/ConfigResult'},
'type': 'array'}},
'required': ['Results'],
'type': 'object'},
'ApplicationUnitInfo': {'additionalProperties': False,
'properties': {'provider-id': {'type': 'string'},
'unit-tag': {'type': 'string'}},
'required': ['provider-id',
'unit-tag'],
'type': 'object'},
'ApplicationUnitParams': {'additionalProperties': False,
'properties': {'address': {'type': 'string'},
'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'filesystem-info': {'items': {'$ref': '#/definitions/KubernetesFilesystemInfo'},
'type': 'array'},
'info': {'type': 'string'},
'ports': {'items': {'type': 'string'},
'type': 'array'},
'provider-id': {'type': 'string'},
'stateful': {'type': 'boolean'},
'status': {'type': 'string'},
'unit-tag': {'type': 'string'}},
'required': ['provider-id',
'unit-tag',
'address',
'ports',
'status',
'info'],
'type': 'object'},
'BoolResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'boolean'}},
'required': ['result'],
'type': 'object'},
'BoolResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'Charm': {'additionalProperties': False,
'properties': {'actions': {'$ref': '#/definitions/CharmActions'},
'config': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmOption'}},
'type': 'object'},
'lxd-profile': {'$ref': '#/definitions/CharmLXDProfile'},
'manifest': {'$ref': '#/definitions/CharmManifest'},
'meta': {'$ref': '#/definitions/CharmMeta'},
'metrics': {'$ref': '#/definitions/CharmMetrics'},
'revision': {'type': 'integer'},
'url': {'type': 'string'}},
'required': ['revision', 'url', 'config'],
'type': 'object'},
'CharmActionSpec': {'additionalProperties': False,
'properties': {'description': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'}},
'required': ['description', 'params'],
'type': 'object'},
'CharmActions': {'additionalProperties': False,
'properties': {'specs': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmActionSpec'}},
'type': 'object'}},
'type': 'object'},
'CharmBase': {'additionalProperties': False,
'properties': {'architectures': {'items': {'type': 'string'},
'type': 'array'},
'channel': {'type': 'string'},
'name': {'type': 'string'}},
'type': 'object'},
'CharmContainer': {'additionalProperties': False,
'properties': {'mounts': {'items': {'$ref': '#/definitions/CharmMount'},
'type': 'array'},
'resource': {'type': 'string'}},
'type': 'object'},
'CharmDeployment': {'additionalProperties': False,
'properties': {'min-version': {'type': 'string'},
'mode': {'type': 'string'},
'service': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['type',
'mode',
'service',
'min-version'],
'type': 'object'},
'CharmDevice': {'additionalProperties': False,
'properties': {'CountMax': {'type': 'integer'},
'CountMin': {'type': 'integer'},
'Description': {'type': 'string'},
'Name': {'type': 'string'},
'Type': {'type': 'string'}},
'required': ['Name',
'Description',
'Type',
'CountMin',
'CountMax'],
'type': 'object'},
'CharmLXDProfile': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'description': {'type': 'string'},
'devices': {'patternProperties': {'.*': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'}},
'type': 'object'}},
'required': ['config',
'description',
'devices'],
'type': 'object'},
'CharmManifest': {'additionalProperties': False,
'properties': {'bases': {'items': {'$ref': '#/definitions/CharmBase'},
'type': 'array'}},
'type': 'object'},
'CharmMeta': {'additionalProperties': False,
'properties': {'assumes-expr': {'$ref': '#/definitions/ExpressionTree'},
'categories': {'items': {'type': 'string'},
'type': 'array'},
'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmContainer'}},
'type': 'object'},
'deployment': {'$ref': '#/definitions/CharmDeployment'},
'description': {'type': 'string'},
'devices': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmDevice'}},
'type': 'object'},
'extra-bindings': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'min-juju-version': {'type': 'string'},
'name': {'type': 'string'},
'payload-classes': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmPayloadClass'}},
'type': 'object'},
'peers': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
'type': 'object'},
'provides': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
'type': 'object'},
'requires': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
'type': 'object'},
'resources': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmResourceMeta'}},
'type': 'object'},
'series': {'items': {'type': 'string'},
'type': 'array'},
'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmStorage'}},
'type': 'object'},
'subordinate': {'type': 'boolean'},
'summary': {'type': 'string'},
'tags': {'items': {'type': 'string'},
'type': 'array'},
'terms': {'items': {'type': 'string'},
'type': 'array'}},
'required': ['name',
'summary',
'description',
'subordinate'],
'type': 'object'},
'CharmMetric': {'additionalProperties': False,
'properties': {'description': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['type', 'description'],
'type': 'object'},
'CharmMetrics': {'additionalProperties': False,
'properties': {'metrics': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmMetric'}},
'type': 'object'},
'plan': {'$ref': '#/definitions/CharmPlan'}},
'required': ['metrics', 'plan'],
'type': 'object'},
'CharmMount': {'additionalProperties': False,
'properties': {'location': {'type': 'string'},
'storage': {'type': 'string'}},
'type': 'object'},
'CharmOption': {'additionalProperties': False,
'properties': {'default': {'additionalProperties': True,
'type': 'object'},
'description': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['type'],
'type': 'object'},
'CharmPayloadClass': {'additionalProperties': False,
'properties': {'name': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['name', 'type'],
'type': 'object'},
'CharmPlan': {'additionalProperties': False,
'properties': {'required': {'type': 'boolean'}},
'required': ['required'],
'type': 'object'},
'CharmRelation': {'additionalProperties': False,
'properties': {'interface': {'type': 'string'},
'limit': {'type': 'integer'},
'name': {'type': 'string'},
'optional': {'type': 'boolean'},
'role': {'type': 'string'},
'scope': {'type': 'string'}},
'required': ['name',
'role',
'interface',
'optional',
'limit',
'scope'],
'type': 'object'},
'CharmResourceMeta': {'additionalProperties': False,
'properties': {'description': {'type': 'string'},
'name': {'type': 'string'},
'path': {'type': 'string'},
'type': {'type': 'string'}},
'required': ['name',
'type',
'path',
'description'],
'type': 'object'},
'CharmStorage': {'additionalProperties': False,
'properties': {'count-max': {'type': 'integer'},
'count-min': {'type': 'integer'},
'description': {'type': 'string'},
'location': {'type': 'string'},
'minimum-size': {'type': 'integer'},
'name': {'type': 'string'},
'properties': {'items': {'type': 'string'},
'type': 'array'},
'read-only': {'type': 'boolean'},
'shared': {'type': 'boolean'},
'type': {'type': 'string'}},
'required': ['name',
'description',
'type',
'shared',
'read-only',
'count-min',
'count-max',
'minimum-size'],
'type': 'object'},
'CharmURL': {'additionalProperties': False,
'properties': {'url': {'type': 'string'}},
'required': ['url'],
'type': 'object'},
'ConfigResult': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['config'],
'type': 'object'},
'DockerImageInfo': {'additionalProperties': False,
'properties': {'auth': {'type': 'string'},
'email': {'type': 'string'},
'identitytoken': {'type': 'string'},
'image-name': {'type': 'string'},
'password': {'type': 'string'},
'registrytoken': {'type': 'string'},
'repository': {'type': 'string'},
'serveraddress': {'type': 'string'},
'username': {'type': 'string'}},
'required': ['image-name'],
'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'EntityStatus': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'info': {'type': 'string'},
'since': {'format': 'date-time',
'type': 'string'},
'status': {'type': 'string'}},
'required': ['status', 'info', 'since'],
'type': 'object'},
'EntityStatusArgs': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'info': {'type': 'string'},
'status': {'type': 'string'},
'tag': {'type': 'string'}},
'required': ['tag',
'status',
'info',
'data'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ExpressionTree': {'additionalProperties': False,
'properties': {'Expression': {'additionalProperties': True,
'type': 'object'}},
'required': ['Expression'],
'type': 'object'},
'IntResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'integer'}},
'required': ['result'],
'type': 'object'},
'IntResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/IntResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'KubernetesDeploymentInfo': {'additionalProperties': False,
'properties': {'deployment-type': {'type': 'string'},
'service-type': {'type': 'string'}},
'required': ['deployment-type',
'service-type'],
'type': 'object'},
'KubernetesDeviceParams': {'additionalProperties': False,
'properties': {'Attributes': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'Count': {'type': 'integer'},
'Type': {'type': 'string'}},
'required': ['Type',
'Count',
'Attributes'],
'type': 'object'},
'KubernetesFilesystemAttachmentParams': {'additionalProperties': False,
'properties': {'mount-point': {'type': 'string'},
'provider': {'type': 'string'},
'read-only': {'type': 'boolean'}},
'required': ['provider'],
'type': 'object'},
'KubernetesFilesystemInfo': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'filesystem-id': {'type': 'string'},
'info': {'type': 'string'},
'mount-point': {'type': 'string'},
'pool': {'type': 'string'},
'read-only': {'type': 'boolean'},
'size': {'type': 'integer'},
'status': {'type': 'string'},
'storagename': {'type': 'string'},
'volume': {'$ref': '#/definitions/KubernetesVolumeInfo'}},
'required': ['storagename',
'pool',
'size',
'filesystem-id',
'status',
'info',
'volume'],
'type': 'object'},
'KubernetesFilesystemParams': {'additionalProperties': False,
'properties': {'attachment': {'$ref': '#/definitions/KubernetesFilesystemAttachmentParams'},
'attributes': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'provider': {'type': 'string'},
'size': {'type': 'integer'},
'storagename': {'type': 'string'},
'tags': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'}},
'required': ['storagename',
'size',
'provider'],
'type': 'object'},
'KubernetesProvisioningInfo': {'additionalProperties': False,
'properties': {'charm-modified-version': {'type': 'integer'},
'constraints': {'$ref': '#/definitions/Value'},
'deployment-info': {'$ref': '#/definitions/KubernetesDeploymentInfo'},
'devices': {'items': {'$ref': '#/definitions/KubernetesDeviceParams'},
'type': 'array'},
'filesystems': {'items': {'$ref': '#/definitions/KubernetesFilesystemParams'},
'type': 'array'},
'image-repo': {'$ref': '#/definitions/DockerImageInfo'},
'pod-spec': {'type': 'string'},
'raw-k8s-spec': {'type': 'string'},
'tags': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'volumes': {'items': {'$ref': '#/definitions/KubernetesVolumeParams'},
'type': 'array'}},
'required': ['pod-spec',
'constraints'],
'type': 'object'},
'KubernetesProvisioningInfoResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/KubernetesProvisioningInfo'}},
'required': ['result'],
'type': 'object'},
'KubernetesProvisioningInfoResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/KubernetesProvisioningInfoResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'KubernetesVolumeAttachmentParams': {'additionalProperties': False,
'properties': {'provider': {'type': 'string'},
'read-only': {'type': 'boolean'}},
'required': ['provider'],
'type': 'object'},
'KubernetesVolumeInfo': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'info': {'type': 'string'},
'persistent': {'type': 'boolean'},
'pool': {'type': 'string'},
'size': {'type': 'integer'},
'status': {'type': 'string'},
'volume-id': {'type': 'string'}},
'required': ['volume-id',
'size',
'persistent',
'status',
'info'],
'type': 'object'},
'KubernetesVolumeParams': {'additionalProperties': False,
'properties': {'attachment': {'$ref': '#/definitions/KubernetesVolumeAttachmentParams'},
'attributes': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'provider': {'type': 'string'},
'size': {'type': 'integer'},
'storagename': {'type': 'string'},
'tags': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'}},
'required': ['storagename',
'size',
'provider'],
'type': 'object'},
'LifeResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'life': {'type': 'string'}},
'required': ['life'],
'type': 'object'},
'LifeResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'NotifyWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SetStatus': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'StringResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'string'}},
'required': ['result'],
'type': 'object'},
'StringResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'StringsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id'],
'type': 'object'},
'StringsWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'UpdateApplicationServiceArg': {'additionalProperties': False,
'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
'type': 'array'},
'application-tag': {'type': 'string'},
'generation': {'type': 'integer'},
'provider-id': {'type': 'string'},
'scale': {'type': 'integer'}},
'required': ['application-tag',
'provider-id',
'addresses'],
'type': 'object'},
'UpdateApplicationServiceArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/UpdateApplicationServiceArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'UpdateApplicationUnitArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/UpdateApplicationUnits'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'UpdateApplicationUnitResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'info': {'$ref': '#/definitions/UpdateApplicationUnitsInfo'}},
'type': 'object'},
'UpdateApplicationUnitResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/UpdateApplicationUnitResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'UpdateApplicationUnits': {'additionalProperties': False,
'properties': {'application-tag': {'type': 'string'},
'generation': {'type': 'integer'},
'scale': {'type': 'integer'},
'status': {'$ref': '#/definitions/EntityStatus'},
'units': {'items': {'$ref': '#/definitions/ApplicationUnitParams'},
'type': 'array'}},
'required': ['application-tag',
'units'],
'type': 'object'},
'UpdateApplicationUnitsInfo': {'additionalProperties': False,
'properties': {'units': {'items': {'$ref': '#/definitions/ApplicationUnitInfo'},
'type': 'array'}},
'required': ['units'],
'type': 'object'},
'Value': {'additionalProperties': False,
'properties': {'allocate-public-ip': {'type': 'boolean'},
'arch': {'type': 'string'},
'container': {'type': 'string'},
'cores': {'type': 'integer'},
'cpu-power': {'type': 'integer'},
'image-id': {'type': 'string'},
'instance-role': {'type': 'string'},
'instance-type': {'type': 'string'},
'mem': {'type': 'integer'},
'root-disk': {'type': 'integer'},
'root-disk-source': {'type': 'string'},
'spaces': {'items': {'type': 'string'},
'type': 'array'},
'tags': {'items': {'type': 'string'},
'type': 'array'},
'virt-type': {'type': 'string'},
'zones': {'items': {'type': 'string'},
'type': 'array'}},
'type': 'object'}},
'properties': {'ApplicationCharmInfo': {'description': 'ApplicationCharmInfo '
'returns information '
'about an '
"application's charm.",
'properties': {'Params': {'$ref': '#/definitions/Entity'},
'Result': {'$ref': '#/definitions/Charm'}},
'type': 'object'},
'ApplicationsConfig': {'description': 'ApplicationsConfig '
'returns the config for '
'the specified '
'applications.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ApplicationGetConfigResults'}},
'type': 'object'},
'ApplicationsScale': {'description': 'ApplicationsScale '
'returns the scaling info '
'for specified '
'applications in this '
'model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/IntResults'}},
'type': 'object'},
'ApplicationsTrust': {'description': 'ApplicationsTrust '
'returns the trust status '
'for specified '
'applications in this '
'model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/BoolResults'}},
'type': 'object'},
'CharmInfo': {'description': 'CharmInfo returns information '
'about the requested charm.',
'properties': {'Params': {'$ref': '#/definitions/CharmURL'},
'Result': {'$ref': '#/definitions/Charm'}},
'type': 'object'},
'ClearApplicationsResources': {'description': 'ClearApplicationsResources '
'clears the '
'flags which '
'indicate\n'
'applications '
'still have '
'resources in '
'the cluster.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'DeploymentMode': {'description': 'DeploymentMode returns the '
'deployment mode of the '
"given applications' charms.",
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
'Life': {'description': 'Life returns the life status of every '
'supplied entity, where available.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/LifeResults'}},
'type': 'object'},
'ProvisioningInfo': {'description': 'ProvisioningInfo returns '
'the provisioning info for '
'specified applications in '
'this model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/KubernetesProvisioningInfoResults'}},
'type': 'object'},
'SetOperatorStatus': {'description': 'SetOperatorStatus '
'updates the operator '
'status for each given '
'application.',
'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'UpdateApplicationsService': {'description': 'UpdateApplicationsService '
'updates the Juju '
'data model to '
'reflect the '
'given\n'
'service details '
'of the specified '
'application.',
'properties': {'Params': {'$ref': '#/definitions/UpdateApplicationServiceArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'UpdateApplicationsUnits': {'description': 'UpdateApplicationsUnits '
'updates the Juju '
'data model to '
'reflect the given\n'
'units of the '
'specified '
'application.',
'properties': {'Params': {'$ref': '#/definitions/UpdateApplicationUnitArgs'},
'Result': {'$ref': '#/definitions/UpdateApplicationUnitResults'}},
'type': 'object'},
'Watch': {'description': 'Watch starts a NotifyWatcher for '
'each entity given.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'},
'WatchApplications': {'description': 'WatchApplications starts '
'a StringsWatcher to '
'watch applications\n'
'deployed to this model.',
'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
'type': 'object'},
'WatchApplicationsScale': {'description': 'WatchApplicationsScale '
'starts a '
'NotifyWatcher to '
'watch changes\n'
'to the '
"applications' "
'scale.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'},
'WatchApplicationsTrustHash': {'description': 'WatchApplicationsTrustHash '
'starts a '
'StringsWatcher '
'to watch '
'changes\n'
'to the '
"applications' "
'trust status.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/StringsWatchResults'}},
'type': 'object'},
'WatchPodSpec': {'description': 'WatchPodSpec starts a '
'NotifyWatcher to watch '
'changes to the\n'
'pod spec for specified units '
'in this model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(Charm)
async def ApplicationCharmInfo(self, tag=None):
'''
ApplicationCharmInfo returns information about an application's charm.
tag : str
Returns -> Charm
'''
if tag is not None and not isinstance(tag, (bytes, str)):
raise Exception("Expected tag to be a str, received: {}".format(type(tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ApplicationCharmInfo',
version=2,
params=_params)
_params['tag'] = tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ApplicationGetConfigResults)
async def ApplicationsConfig(self, entities=None):
'''
ApplicationsConfig returns the config for the specified applications.
entities : typing.Sequence[~Entity]
Returns -> ApplicationGetConfigResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ApplicationsConfig',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(IntResults)
async def ApplicationsScale(self, entities=None):
'''
ApplicationsScale returns the scaling info for specified applications in this model.
entities : typing.Sequence[~Entity]
Returns -> IntResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ApplicationsScale',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(BoolResults)
async def ApplicationsTrust(self, entities=None):
'''
ApplicationsTrust returns the trust status for specified applications in this model.
entities : typing.Sequence[~Entity]
Returns -> BoolResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ApplicationsTrust',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(Charm)
async def CharmInfo(self, url=None):
'''
CharmInfo returns information about the requested charm.
url : str
Returns -> Charm
'''
if url is not None and not isinstance(url, (bytes, str)):
raise Exception("Expected url to be a str, received: {}".format(type(url)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='CharmInfo',
version=2,
params=_params)
_params['url'] = url
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def ClearApplicationsResources(self, entities=None):
'''
ClearApplicationsResources clears the flags which indicate
applications still have resources in the cluster.
entities : typing.Sequence[~Entity]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ClearApplicationsResources',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringResults)
async def DeploymentMode(self, entities=None):
'''
DeploymentMode returns the deployment mode of the given applications' charms.
entities : typing.Sequence[~Entity]
Returns -> StringResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='DeploymentMode',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(LifeResults)
async def Life(self, entities=None):
'''
Life returns the life status of every supplied entity, where available.
entities : typing.Sequence[~Entity]
Returns -> LifeResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='Life',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(KubernetesProvisioningInfoResults)
async def ProvisioningInfo(self, entities=None):
'''
ProvisioningInfo returns the provisioning info for specified applications in this model.
entities : typing.Sequence[~Entity]
Returns -> KubernetesProvisioningInfoResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='ProvisioningInfo',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SetOperatorStatus(self, entities=None):
'''
SetOperatorStatus updates the operator status for each given application.
entities : typing.Sequence[~EntityStatusArgs]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='SetOperatorStatus',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def UpdateApplicationsService(self, args=None):
'''
UpdateApplicationsService updates the Juju data model to reflect the given
service details of the specified application.
args : typing.Sequence[~UpdateApplicationServiceArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='UpdateApplicationsService',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(UpdateApplicationUnitResults)
async def UpdateApplicationsUnits(self, args=None):
'''
UpdateApplicationsUnits updates the Juju data model to reflect the given
units of the specified application.
args : typing.Sequence[~UpdateApplicationUnits]
Returns -> UpdateApplicationUnitResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='UpdateApplicationsUnits',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def Watch(self, entities=None):
'''
Watch starts a NotifyWatcher for each entity given.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='Watch',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResult)
async def WatchApplications(self):
'''
WatchApplications starts a StringsWatcher to watch applications
deployed to this model.
Returns -> StringsWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='WatchApplications',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def WatchApplicationsScale(self, entities=None):
'''
WatchApplicationsScale starts a NotifyWatcher to watch changes
to the applications' scale.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='WatchApplicationsScale',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResults)
async def WatchApplicationsTrustHash(self, entities=None):
'''
WatchApplicationsTrustHash starts a StringsWatcher to watch changes
to the applications' trust status.
entities : typing.Sequence[~Entity]
Returns -> StringsWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='WatchApplicationsTrustHash',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def WatchPodSpec(self, entities=None):
'''
WatchPodSpec starts a NotifyWatcher to watch changes to the
pod spec for specified units in this model.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CAASUnitProvisioner',
request='WatchPodSpec',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs]class CharmRevisionUpdaterFacade(Type):
name = 'CharmRevisionUpdater'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'}},
'properties': {'UpdateLatestRevisions': {'description': 'UpdateLatestRevisions '
'retrieves the latest '
'revision information '
'from the charm store '
'for all deployed '
'charms\n'
'and records this '
'information in '
'state.',
'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResult)
async def UpdateLatestRevisions(self):
'''
UpdateLatestRevisions retrieves the latest revision information from the charm store for all deployed charms
and records this information in state.
Returns -> ErrorResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CharmRevisionUpdater',
request='UpdateLatestRevisions',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class CleanerFacade(Type):
name = 'Cleaner'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'}},
'properties': {'Cleanup': {'description': 'Cleanup triggers a state cleanup',
'type': 'object'},
'WatchCleanups': {'description': 'WatchCleanups watches for '
'cleanups to be performed in '
'state.',
'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(None)
async def Cleanup(self):
'''
Cleanup triggers a state cleanup
Returns -> None
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='Cleaner',
request='Cleanup',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchCleanups(self):
'''
WatchCleanups watches for cleanups to be performed in state.
Returns -> NotifyWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='Cleaner',
request='WatchCleanups',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class CredentialValidatorFacade(Type):
name = 'CredentialValidator'
version = 2
schema = {'definitions': {'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'InvalidateCredentialArg': {'additionalProperties': False,
'properties': {'reason': {'type': 'string'}},
'type': 'object'},
'ModelCredential': {'additionalProperties': False,
'properties': {'credential-tag': {'type': 'string'},
'exists': {'type': 'boolean'},
'model-tag': {'type': 'string'},
'valid': {'type': 'boolean'}},
'required': ['model-tag',
'credential-tag'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'}},
'properties': {'InvalidateModelCredential': {'description': 'InvalidateModelCredential '
'marks the cloud '
'credential for '
'this model as '
'invalid.',
'properties': {'Params': {'$ref': '#/definitions/InvalidateCredentialArg'},
'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'},
'ModelCredential': {'description': 'ModelCredential returns '
'cloud credential '
'information for a model.',
'properties': {'Result': {'$ref': '#/definitions/ModelCredential'}},
'type': 'object'},
'WatchCredential': {'description': 'WatchCredential returns a '
'NotifyWatcher that '
'observes\n'
'changes to a given cloud '
'credential.',
'properties': {'Params': {'$ref': '#/definitions/Entity'},
'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'},
'WatchModelCredential': {'description': 'WatchModelCredential '
'returns a '
'NotifyWatcher that '
'watches what cloud '
'credential a model '
'uses.',
'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResult)
async def InvalidateModelCredential(self, reason=None):
'''
InvalidateModelCredential marks the cloud credential for this model as invalid.
reason : str
Returns -> ErrorResult
'''
if reason is not None and not isinstance(reason, (bytes, str)):
raise Exception("Expected reason to be a str, received: {}".format(type(reason)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CredentialValidator',
request='InvalidateModelCredential',
version=2,
params=_params)
_params['reason'] = reason
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ModelCredential)
async def ModelCredential(self):
'''
ModelCredential returns cloud credential information for a model.
Returns -> ModelCredential
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CredentialValidator',
request='ModelCredential',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchCredential(self, tag=None):
'''
WatchCredential returns a NotifyWatcher that observes
changes to a given cloud credential.
tag : str
Returns -> NotifyWatchResult
'''
if tag is not None and not isinstance(tag, (bytes, str)):
raise Exception("Expected tag to be a str, received: {}".format(type(tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CredentialValidator',
request='WatchCredential',
version=2,
params=_params)
_params['tag'] = tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchModelCredential(self):
'''
WatchModelCredential returns a NotifyWatcher that watches what cloud credential a model uses.
Returns -> NotifyWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='CredentialValidator',
request='WatchModelCredential',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class CrossModelRelationsFacade(Type):
name = 'CrossModelRelations'
version = 2
schema = {'definitions': {'EntityStatus': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'info': {'type': 'string'},
'since': {'format': 'date-time',
'type': 'string'},
'status': {'type': 'string'}},
'required': ['status', 'info', 'since'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'IngressNetworksChangeEvent': {'additionalProperties': False,
'properties': {'bakery-version': {'type': 'integer'},
'ingress-required': {'type': 'boolean'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'networks': {'items': {'type': 'string'},
'type': 'array'},
'relation-token': {'type': 'string'}},
'required': ['relation-token',
'ingress-required'],
'type': 'object'},
'IngressNetworksChanges': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/IngressNetworksChangeEvent'},
'type': 'array'}},
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
'OfferArg': {'additionalProperties': False,
'properties': {'bakery-version': {'type': 'integer'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'offer-uuid': {'type': 'string'}},
'required': ['offer-uuid'],
'type': 'object'},
'OfferArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/OfferArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'OfferStatusChange': {'additionalProperties': False,
'properties': {'offer-name': {'type': 'string'},
'status': {'$ref': '#/definitions/EntityStatus'}},
'required': ['offer-name', 'status'],
'type': 'object'},
'OfferStatusWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/OfferStatusChange'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'OfferStatusWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/OfferStatusWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'RegisterRemoteRelationArg': {'additionalProperties': False,
'properties': {'application-token': {'type': 'string'},
'bakery-version': {'type': 'integer'},
'consume-version': {'type': 'integer'},
'local-endpoint-name': {'type': 'string'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'offer-uuid': {'type': 'string'},
'relation-token': {'type': 'string'},
'remote-endpoint': {'$ref': '#/definitions/RemoteEndpoint'},
'remote-space': {'$ref': '#/definitions/RemoteSpace'},
'source-model-tag': {'type': 'string'}},
'required': ['application-token',
'source-model-tag',
'relation-token',
'remote-endpoint',
'remote-space',
'offer-uuid',
'local-endpoint-name'],
'type': 'object'},
'RegisterRemoteRelationArgs': {'additionalProperties': False,
'properties': {'relations': {'items': {'$ref': '#/definitions/RegisterRemoteRelationArg'},
'type': 'array'}},
'required': ['relations'],
'type': 'object'},
'RegisterRemoteRelationResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/RemoteRelationDetails'}},
'type': 'object'},
'RegisterRemoteRelationResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RegisterRemoteRelationResult'},
'type': 'array'}},
'type': 'object'},
'RelationLifeSuspendedStatusChange': {'additionalProperties': False,
'properties': {'key': {'type': 'string'},
'life': {'type': 'string'},
'suspended': {'type': 'boolean'},
'suspended-reason': {'type': 'string'}},
'required': ['key',
'life',
'suspended',
'suspended-reason'],
'type': 'object'},
'RelationLifeSuspendedStatusWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/RelationLifeSuspendedStatusChange'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'RelationStatusWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RelationLifeSuspendedStatusWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'RemoteEndpoint': {'additionalProperties': False,
'properties': {'interface': {'type': 'string'},
'limit': {'type': 'integer'},
'name': {'type': 'string'},
'role': {'type': 'string'}},
'required': ['name',
'role',
'interface',
'limit'],
'type': 'object'},
'RemoteEntityArg': {'additionalProperties': False,
'properties': {'bakery-version': {'type': 'integer'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'relation-token': {'type': 'string'}},
'required': ['relation-token'],
'type': 'object'},
'RemoteEntityArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/RemoteEntityArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'RemoteRelationChangeEvent': {'additionalProperties': False,
'properties': {'application-settings': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'application-token': {'type': 'string'},
'bakery-version': {'type': 'integer'},
'changed-units': {'items': {'$ref': '#/definitions/RemoteRelationUnitChange'},
'type': 'array'},
'departed-units': {'items': {'type': 'integer'},
'type': 'array'},
'force-cleanup': {'type': 'boolean'},
'life': {'type': 'string'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'relation-token': {'type': 'string'},
'suspended': {'type': 'boolean'},
'suspended-reason': {'type': 'string'},
'unit-count': {'type': 'integer'}},
'required': ['relation-token',
'application-token',
'life',
'unit-count'],
'type': 'object'},
'RemoteRelationDetails': {'additionalProperties': False,
'properties': {'bakery-version': {'type': 'integer'},
'macaroon': {'$ref': '#/definitions/Macaroon'},
'relation-token': {'type': 'string'}},
'required': ['relation-token'],
'type': 'object'},
'RemoteRelationUnitChange': {'additionalProperties': False,
'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'unit-id': {'type': 'integer'}},
'required': ['unit-id'],
'type': 'object'},
'RemoteRelationWatchResult': {'additionalProperties': False,
'properties': {'changes': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'RemoteRelationWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RemoteRelationWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'RemoteRelationsChanges': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
'type': 'array'}},
'type': 'object'},
'RemoteSpace': {'additionalProperties': False,
'properties': {'cloud-type': {'type': 'string'},
'name': {'type': 'string'},
'provider-attributes': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'provider-id': {'type': 'string'},
'subnets': {'items': {'$ref': '#/definitions/Subnet'},
'type': 'array'}},
'required': ['cloud-type',
'name',
'provider-id',
'provider-attributes',
'subnets'],
'type': 'object'},
'SecretRevisionChange': {'additionalProperties': False,
'properties': {'revision': {'type': 'integer'},
'uri': {'type': 'string'}},
'required': ['uri', 'revision'],
'type': 'object'},
'SecretRevisionWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/SecretRevisionChange'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'SecretRevisionWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/SecretRevisionWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'StringsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id'],
'type': 'object'},
'StringsWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'Subnet': {'additionalProperties': False,
'properties': {'cidr': {'type': 'string'},
'life': {'type': 'string'},
'provider-id': {'type': 'string'},
'provider-network-id': {'type': 'string'},
'provider-space-id': {'type': 'string'},
'space-tag': {'type': 'string'},
'status': {'type': 'string'},
'vlan-tag': {'type': 'integer'},
'zones': {'items': {'type': 'string'},
'type': 'array'}},
'required': ['cidr',
'vlan-tag',
'life',
'space-tag',
'zones'],
'type': 'object'},
'WatchRemoteSecretChangesArg': {'additionalProperties': False,
'properties': {'application-token': {'type': 'string'},
'bakery-version': {'type': 'integer'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'relation-token': {'type': 'string'}},
'required': ['application-token',
'relation-token'],
'type': 'object'},
'WatchRemoteSecretChangesArgs': {'additionalProperties': False,
'properties': {'relations': {'items': {'$ref': '#/definitions/WatchRemoteSecretChangesArg'},
'type': 'array'}},
'required': ['relations'],
'type': 'object'}},
'properties': {'PublishIngressNetworkChanges': {'description': 'PublishIngressNetworkChanges '
'publishes '
'changes to '
'the required\n'
'ingress '
'addresses to '
'the model '
'hosting the '
'offer in the '
'relation.',
'properties': {'Params': {'$ref': '#/definitions/IngressNetworksChanges'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'PublishRelationChanges': {'description': 'PublishRelationChanges '
'publishes relation '
'changes to the\n'
'model hosting the '
'remote application '
'involved in the '
'relation.',
'properties': {'Params': {'$ref': '#/definitions/RemoteRelationsChanges'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'RegisterRemoteRelations': {'description': 'RegisterRemoteRelations '
'sets up the model '
'to participate\n'
'in the specified '
'relations. This '
'operation is '
'idempotent.',
'properties': {'Params': {'$ref': '#/definitions/RegisterRemoteRelationArgs'},
'Result': {'$ref': '#/definitions/RegisterRemoteRelationResults'}},
'type': 'object'},
'WatchConsumedSecretsChanges': {'description': 'WatchConsumedSecretsChanges '
'returns a '
'watcher which '
'notifies of '
'changes to any '
'secrets\n'
'for the '
'specified '
'remote '
'consumers.',
'properties': {'Params': {'$ref': '#/definitions/WatchRemoteSecretChangesArgs'},
'Result': {'$ref': '#/definitions/SecretRevisionWatchResults'}},
'type': 'object'},
'WatchEgressAddressesForRelations': {'description': 'WatchEgressAddressesForRelations '
'creates a '
'watcher '
'that '
'notifies '
'when '
'addresses, '
'from '
'which\n'
'connections '
'will '
'originate '
'for the '
'relation, '
'change.\n'
'Each '
'event '
'contains '
'the '
'entire '
'set of '
'addresses '
'which are '
'required '
'for '
'ingress '
'for the '
'relation.',
'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'},
'Result': {'$ref': '#/definitions/StringsWatchResults'}},
'type': 'object'},
'WatchOfferStatus': {'description': 'WatchOfferStatus starts '
'an OfferStatusWatcher '
'for\n'
'watching the status of an '
'offer.',
'properties': {'Params': {'$ref': '#/definitions/OfferArgs'},
'Result': {'$ref': '#/definitions/OfferStatusWatchResults'}},
'type': 'object'},
'WatchRelationChanges': {'description': 'WatchRelationChanges '
'starts a '
'RemoteRelationChangesWatcher '
'for each\n'
'specified relation, '
'returning the watcher '
'IDs and initial '
'values,\n'
'or an error if the '
'remote relations '
"couldn't be watched.",
'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'},
'Result': {'$ref': '#/definitions/RemoteRelationWatchResults'}},
'type': 'object'},
'WatchRelationsSuspendedStatus': {'description': 'WatchRelationsSuspendedStatus '
'starts a '
'RelationStatusWatcher '
'for\n'
'watching the '
'life and '
'suspended '
'status of a '
'relation.',
'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'},
'Result': {'$ref': '#/definitions/RelationStatusWatchResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def PublishIngressNetworkChanges(self, changes=None):
'''
PublishIngressNetworkChanges publishes changes to the required
ingress addresses to the model hosting the offer in the relation.
changes : typing.Sequence[~IngressNetworksChangeEvent]
Returns -> ErrorResults
'''
if changes is not None and not isinstance(changes, (bytes, str, list)):
raise Exception("Expected changes to be a Sequence, received: {}".format(type(changes)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='PublishIngressNetworkChanges',
version=2,
params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def PublishRelationChanges(self, changes=None):
'''
PublishRelationChanges publishes relation changes to the
model hosting the remote application involved in the relation.
changes : typing.Sequence[~RemoteRelationChangeEvent]
Returns -> ErrorResults
'''
if changes is not None and not isinstance(changes, (bytes, str, list)):
raise Exception("Expected changes to be a Sequence, received: {}".format(type(changes)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='PublishRelationChanges',
version=2,
params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RegisterRemoteRelationResults)
async def RegisterRemoteRelations(self, relations=None):
'''
RegisterRemoteRelations sets up the model to participate
in the specified relations. This operation is idempotent.
relations : typing.Sequence[~RegisterRemoteRelationArg]
Returns -> RegisterRemoteRelationResults
'''
if relations is not None and not isinstance(relations, (bytes, str, list)):
raise Exception("Expected relations to be a Sequence, received: {}".format(type(relations)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='RegisterRemoteRelations',
version=2,
params=_params)
_params['relations'] = relations
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretRevisionWatchResults)
async def WatchConsumedSecretsChanges(self, relations=None):
'''
WatchConsumedSecretsChanges returns a watcher which notifies of changes to any secrets
for the specified remote consumers.
relations : typing.Sequence[~WatchRemoteSecretChangesArg]
Returns -> SecretRevisionWatchResults
'''
if relations is not None and not isinstance(relations, (bytes, str, list)):
raise Exception("Expected relations to be a Sequence, received: {}".format(type(relations)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='WatchConsumedSecretsChanges',
version=2,
params=_params)
_params['relations'] = relations
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResults)
async def WatchEgressAddressesForRelations(self, args=None):
'''
WatchEgressAddressesForRelations creates a watcher that notifies when addresses, from which
connections will originate for the relation, change.
Each event contains the entire set of addresses which are required for ingress for the relation.
args : typing.Sequence[~RemoteEntityArg]
Returns -> StringsWatchResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='WatchEgressAddressesForRelations',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(OfferStatusWatchResults)
async def WatchOfferStatus(self, args=None):
'''
WatchOfferStatus starts an OfferStatusWatcher for
watching the status of an offer.
args : typing.Sequence[~OfferArg]
Returns -> OfferStatusWatchResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='WatchOfferStatus',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RemoteRelationWatchResults)
async def WatchRelationChanges(self, args=None):
'''
WatchRelationChanges starts a RemoteRelationChangesWatcher for each
specified relation, returning the watcher IDs and initial values,
or an error if the remote relations couldn't be watched.
args : typing.Sequence[~RemoteEntityArg]
Returns -> RemoteRelationWatchResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='WatchRelationChanges',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RelationStatusWatchResults)
async def WatchRelationsSuspendedStatus(self, args=None):
'''
WatchRelationsSuspendedStatus starts a RelationStatusWatcher for
watching the life and suspended status of a relation.
args : typing.Sequence[~RemoteEntityArg]
Returns -> RelationStatusWatchResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='CrossModelRelations',
request='WatchRelationsSuspendedStatus',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs]class DiskManagerFacade(Type):
name = 'DiskManager'
version = 2
schema = {'definitions': {'BlockDevice': {'additionalProperties': False,
'properties': {'BusAddress': {'type': 'string'},
'DeviceLinks': {'items': {'type': 'string'},
'type': 'array'},
'DeviceName': {'type': 'string'},
'FilesystemType': {'type': 'string'},
'HardwareId': {'type': 'string'},
'InUse': {'type': 'boolean'},
'Label': {'type': 'string'},
'MountPoint': {'type': 'string'},
'SerialId': {'type': 'string'},
'Size': {'type': 'integer'},
'UUID': {'type': 'string'},
'WWN': {'type': 'string'}},
'required': ['DeviceName',
'DeviceLinks',
'Label',
'UUID',
'HardwareId',
'WWN',
'BusAddress',
'Size',
'FilesystemType',
'InUse',
'MountPoint',
'SerialId'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'MachineBlockDevices': {'additionalProperties': False,
'properties': {'block-devices': {'items': {'$ref': '#/definitions/BlockDevice'},
'type': 'array'},
'machine': {'type': 'string'}},
'required': ['machine'],
'type': 'object'},
'SetMachineBlockDevices': {'additionalProperties': False,
'properties': {'machine-block-devices': {'items': {'$ref': '#/definitions/MachineBlockDevices'},
'type': 'array'}},
'required': ['machine-block-devices'],
'type': 'object'}},
'properties': {'SetMachineBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/SetMachineBlockDevices'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def SetMachineBlockDevices(self, machine_block_devices=None):
'''
machine_block_devices : typing.Sequence[~MachineBlockDevices]
Returns -> ErrorResults
'''
if machine_block_devices is not None and not isinstance(machine_block_devices, (bytes, str, list)):
raise Exception("Expected machine_block_devices to be a Sequence, received: {}".format(type(machine_block_devices)))
# map input types to rpc msg
_params = dict()
msg = dict(type='DiskManager',
request='SetMachineBlockDevices',
version=2,
params=_params)
_params['machine-block-devices'] = machine_block_devices
reply = await self.rpc(msg)
return reply
[docs]class EntityWatcherFacade(Type):
name = 'EntityWatcher'
version = 2
schema = {'definitions': {'EntitiesWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'}},
'properties': {'Next': {'description': 'Next returns when a change has '
'occurred to an entity of the\n'
'collection being watched since the '
'most recent call to Next\n'
'or the Watch call that created the '
'srvEntitiesWatcher.',
'properties': {'Result': {'$ref': '#/definitions/EntitiesWatchResult'}},
'type': 'object'},
'Stop': {'description': 'Stop stops the watcher.',
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(EntitiesWatchResult)
async def Next(self):
'''
Next returns when a change has occurred to an entity of the
collection being watched since the most recent call to Next
or the Watch call that created the srvEntitiesWatcher.
Returns -> EntitiesWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='EntityWatcher',
request='Next',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Stop(self):
'''
Stop stops the watcher.
Returns -> None
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='EntityWatcher',
request='Stop',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] async def rpc(self, msg):
'''
Patch rpc method to add Id.
'''
if not hasattr(self, 'Id'):
raise RuntimeError('Missing "Id" field')
msg['Id'] = id
from .facade import TypeEncoder
reply = await self.connection.rpc(msg, encoder=TypeEncoder)
return reply
[docs]class FilesystemAttachmentsWatcherFacade(Type):
name = 'FilesystemAttachmentsWatcher'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'MachineStorageId': {'additionalProperties': False,
'properties': {'attachment-tag': {'type': 'string'},
'machine-tag': {'type': 'string'}},
'required': ['machine-tag',
'attachment-tag'],
'type': 'object'},
'MachineStorageIdsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'}},
'properties': {'Next': {'description': 'Next returns when a change has '
'occurred to an entity of the\n'
'collection being watched since the '
'most recent call to Next\n'
'or the Watch call that created the '
'srvMachineStorageIdsWatcher.',
'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}},
'type': 'object'},
'Stop': {'description': 'Stop stops the watcher.',
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(MachineStorageIdsWatchResult)
async def Next(self):
'''
Next returns when a change has occurred to an entity of the
collection being watched since the most recent call to Next
or the Watch call that created the srvMachineStorageIdsWatcher.
Returns -> MachineStorageIdsWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='FilesystemAttachmentsWatcher',
request='Next',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Stop(self):
'''
Stop stops the watcher.
Returns -> None
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='FilesystemAttachmentsWatcher',
request='Stop',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] async def rpc(self, msg):
'''
Patch rpc method to add Id.
'''
if not hasattr(self, 'Id'):
raise RuntimeError('Missing "Id" field')
msg['Id'] = id
from .facade import TypeEncoder
reply = await self.connection.rpc(msg, encoder=TypeEncoder)
return reply
[docs]class HighAvailabilityFacade(Type):
name = 'HighAvailability'
version = 2
schema = {'definitions': {'ControllersChangeResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/ControllersChanges'}},
'required': ['result'],
'type': 'object'},
'ControllersChangeResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ControllersChangeResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ControllersChanges': {'additionalProperties': False,
'properties': {'added': {'items': {'type': 'string'},
'type': 'array'},
'converted': {'items': {'type': 'string'},
'type': 'array'},
'maintained': {'items': {'type': 'string'},
'type': 'array'},
'removed': {'items': {'type': 'string'},
'type': 'array'}},
'type': 'object'},
'ControllersSpec': {'additionalProperties': False,
'properties': {'constraints': {'$ref': '#/definitions/Value'},
'num-controllers': {'type': 'integer'},
'placement': {'items': {'type': 'string'},
'type': 'array'}},
'required': ['num-controllers'],
'type': 'object'},
'ControllersSpecs': {'additionalProperties': False,
'properties': {'specs': {'items': {'$ref': '#/definitions/ControllersSpec'},
'type': 'array'}},
'required': ['specs'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'Value': {'additionalProperties': False,
'properties': {'allocate-public-ip': {'type': 'boolean'},
'arch': {'type': 'string'},
'container': {'type': 'string'},
'cores': {'type': 'integer'},
'cpu-power': {'type': 'integer'},
'image-id': {'type': 'string'},
'instance-role': {'type': 'string'},
'instance-type': {'type': 'string'},
'mem': {'type': 'integer'},
'root-disk': {'type': 'integer'},
'root-disk-source': {'type': 'string'},
'spaces': {'items': {'type': 'string'},
'type': 'array'},
'tags': {'items': {'type': 'string'},
'type': 'array'},
'virt-type': {'type': 'string'},
'zones': {'items': {'type': 'string'},
'type': 'array'}},
'type': 'object'}},
'properties': {'EnableHA': {'description': 'EnableHA adds controller machines '
'as necessary to ensure the\n'
'controller has the number of '
'machines specified.',
'properties': {'Params': {'$ref': '#/definitions/ControllersSpecs'},
'Result': {'$ref': '#/definitions/ControllersChangeResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ControllersChangeResults)
async def EnableHA(self, specs=None):
'''
EnableHA adds controller machines as necessary to ensure the
controller has the number of machines specified.
specs : typing.Sequence[~ControllersSpec]
Returns -> ControllersChangeResults
'''
if specs is not None and not isinstance(specs, (bytes, str, list)):
raise Exception("Expected specs to be a Sequence, received: {}".format(type(specs)))
# map input types to rpc msg
_params = dict()
msg = dict(type='HighAvailability',
request='EnableHA',
version=2,
params=_params)
_params['specs'] = specs
reply = await self.rpc(msg)
return reply
[docs]class LeadershipServiceFacade(Type):
name = 'LeadershipService'
version = 2
schema = {'definitions': {'ApplicationTag': {'additionalProperties': False,
'properties': {'Name': {'type': 'string'}},
'required': ['Name'],
'type': 'object'},
'ClaimLeadershipBulkParams': {'additionalProperties': False,
'properties': {'params': {'items': {'$ref': '#/definitions/ClaimLeadershipParams'},
'type': 'array'}},
'required': ['params'],
'type': 'object'},
'ClaimLeadershipBulkResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ClaimLeadershipParams': {'additionalProperties': False,
'properties': {'application-tag': {'type': 'string'},
'duration': {'type': 'number'},
'unit-tag': {'type': 'string'}},
'required': ['application-tag',
'unit-tag',
'duration'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'}},
'properties': {'BlockUntilLeadershipReleased': {'description': 'BlockUntilLeadershipReleased '
'blocks the '
'caller until '
'leadership '
'is\n'
'released for '
'the given '
'service.',
'properties': {'Params': {'$ref': '#/definitions/ApplicationTag'},
'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'},
'ClaimLeadership': {'description': 'ClaimLeadership makes a '
'leadership claim with the '
'given parameters.',
'properties': {'Params': {'$ref': '#/definitions/ClaimLeadershipBulkParams'},
'Result': {'$ref': '#/definitions/ClaimLeadershipBulkResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResult)
async def BlockUntilLeadershipReleased(self, name=None):
'''
BlockUntilLeadershipReleased blocks the caller until leadership is
released for the given service.
name : str
Returns -> ErrorResult
'''
if name is not None and not isinstance(name, (bytes, str)):
raise Exception("Expected name to be a str, received: {}".format(type(name)))
# map input types to rpc msg
_params = dict()
msg = dict(type='LeadershipService',
request='BlockUntilLeadershipReleased',
version=2,
params=_params)
_params['Name'] = name
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ClaimLeadershipBulkResults)
async def ClaimLeadership(self, params=None):
'''
ClaimLeadership makes a leadership claim with the given parameters.
params : typing.Sequence[~ClaimLeadershipParams]
Returns -> ClaimLeadershipBulkResults
'''
if params is not None and not isinstance(params, (bytes, str, list)):
raise Exception("Expected params to be a Sequence, received: {}".format(type(params)))
# map input types to rpc msg
_params = dict()
msg = dict(type='LeadershipService',
request='ClaimLeadership',
version=2,
params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
[docs]class MeterStatusFacade(Type):
name = 'MeterStatus'
version = 2
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'MeterStatusResult': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'},
'info': {'type': 'string'}},
'required': ['code', 'info'],
'type': 'object'},
'MeterStatusResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/MeterStatusResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'NotifyWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SetUnitStateArg': {'additionalProperties': False,
'properties': {'charm-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'meter-status-state': {'type': 'string'},
'relation-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'secret-state': {'type': 'string'},
'storage-state': {'type': 'string'},
'tag': {'type': 'string'},
'uniter-state': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'SetUnitStateArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/SetUnitStateArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'UnitStateResult': {'additionalProperties': False,
'properties': {'charm-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'error': {'$ref': '#/definitions/Error'},
'meter-status-state': {'type': 'string'},
'relation-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'secret-state': {'type': 'string'},
'storage-state': {'type': 'string'},
'uniter-state': {'type': 'string'}},
'type': 'object'},
'UnitStateResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/UnitStateResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'}},
'properties': {'GetMeterStatus': {'description': 'GetMeterStatus returns '
'meter status information '
'for each unit.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/MeterStatusResults'}},
'type': 'object'},
'SetState': {'description': 'SetState sets the state persisted '
'by the charm running in this '
'unit\n'
'and the state internal to the '
'uniter for this unit.',
'properties': {'Params': {'$ref': '#/definitions/SetUnitStateArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'State': {'description': 'State returns the state persisted by '
'the charm running in this unit\n'
'and the state internal to the uniter '
'for this unit.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/UnitStateResults'}},
'type': 'object'},
'WatchMeterStatus': {'description': 'WatchMeterStatus returns '
'a NotifyWatcher for '
'observing changes\n'
"to each unit's meter "
'status.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(MeterStatusResults)
async def GetMeterStatus(self, entities=None):
'''
GetMeterStatus returns meter status information for each unit.
entities : typing.Sequence[~Entity]
Returns -> MeterStatusResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MeterStatus',
request='GetMeterStatus',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SetState(self, args=None):
'''
SetState sets the state persisted by the charm running in this unit
and the state internal to the uniter for this unit.
args : typing.Sequence[~SetUnitStateArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MeterStatus',
request='SetState',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(UnitStateResults)
async def State(self, entities=None):
'''
State returns the state persisted by the charm running in this unit
and the state internal to the uniter for this unit.
entities : typing.Sequence[~Entity]
Returns -> UnitStateResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MeterStatus',
request='State',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def WatchMeterStatus(self, entities=None):
'''
WatchMeterStatus returns a NotifyWatcher for observing changes
to each unit's meter status.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MeterStatus',
request='WatchMeterStatus',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs]class MetricsAdderFacade(Type):
name = 'MetricsAdder'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'Metric': {'additionalProperties': False,
'properties': {'key': {'type': 'string'},
'labels': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'time': {'format': 'date-time',
'type': 'string'},
'value': {'type': 'string'}},
'required': ['key', 'value', 'time'],
'type': 'object'},
'MetricBatch': {'additionalProperties': False,
'properties': {'charm-url': {'type': 'string'},
'created': {'format': 'date-time',
'type': 'string'},
'metrics': {'items': {'$ref': '#/definitions/Metric'},
'type': 'array'},
'uuid': {'type': 'string'}},
'required': ['uuid',
'charm-url',
'created',
'metrics'],
'type': 'object'},
'MetricBatchParam': {'additionalProperties': False,
'properties': {'batch': {'$ref': '#/definitions/MetricBatch'},
'tag': {'type': 'string'}},
'required': ['tag', 'batch'],
'type': 'object'},
'MetricBatchParams': {'additionalProperties': False,
'properties': {'batches': {'items': {'$ref': '#/definitions/MetricBatchParam'},
'type': 'array'}},
'required': ['batches'],
'type': 'object'}},
'properties': {'AddMetricBatches': {'description': 'AddMetricBatches '
'implements the '
'MetricsAdder interface.',
'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def AddMetricBatches(self, batches=None):
'''
AddMetricBatches implements the MetricsAdder interface.
batches : typing.Sequence[~MetricBatchParam]
Returns -> ErrorResults
'''
if batches is not None and not isinstance(batches, (bytes, str, list)):
raise Exception("Expected batches to be a Sequence, received: {}".format(type(batches)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MetricsAdder',
request='AddMetricBatches',
version=2,
params=_params)
_params['batches'] = batches
reply = await self.rpc(msg)
return reply
[docs]class MetricsDebugFacade(Type):
name = 'MetricsDebug'
version = 2
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'EntityMetrics': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'metrics': {'items': {'$ref': '#/definitions/MetricResult'},
'type': 'array'}},
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'MeterStatusParam': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'type': 'string'},
'tag': {'type': 'string'}},
'required': ['tag', 'code'],
'type': 'object'},
'MeterStatusParams': {'additionalProperties': False,
'properties': {'statues': {'items': {'$ref': '#/definitions/MeterStatusParam'},
'type': 'array'}},
'required': ['statues'],
'type': 'object'},
'MetricResult': {'additionalProperties': False,
'properties': {'key': {'type': 'string'},
'labels': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'time': {'format': 'date-time',
'type': 'string'},
'unit': {'type': 'string'},
'value': {'type': 'string'}},
'required': ['time',
'key',
'value',
'unit',
'labels'],
'type': 'object'},
'MetricResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/EntityMetrics'},
'type': 'array'}},
'required': ['results'],
'type': 'object'}},
'properties': {'GetMetrics': {'description': 'GetMetrics returns all metrics '
'stored by the state server.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/MetricResults'}},
'type': 'object'},
'SetMeterStatus': {'description': 'SetMeterStatus sets meter '
'statuses for entities.',
'properties': {'Params': {'$ref': '#/definitions/MeterStatusParams'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(MetricResults)
async def GetMetrics(self, entities=None):
'''
GetMetrics returns all metrics stored by the state server.
entities : typing.Sequence[~Entity]
Returns -> MetricResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MetricsDebug',
request='GetMetrics',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SetMeterStatus(self, statues=None):
'''
SetMeterStatus sets meter statuses for entities.
statues : typing.Sequence[~MeterStatusParam]
Returns -> ErrorResults
'''
if statues is not None and not isinstance(statues, (bytes, str, list)):
raise Exception("Expected statues to be a Sequence, received: {}".format(type(statues)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MetricsDebug',
request='SetMeterStatus',
version=2,
params=_params)
_params['statues'] = statues
reply = await self.rpc(msg)
return reply
[docs]class MigrationTargetFacade(Type):
name = 'MigrationTarget'
version = 2
schema = {'definitions': {'ActivateModelArgs': {'additionalProperties': False,
'properties': {'controller-alias': {'type': 'string'},
'controller-tag': {'type': 'string'},
'cross-model-uuids': {'items': {'type': 'string'},
'type': 'array'},
'model-tag': {'type': 'string'},
'source-api-addrs': {'items': {'type': 'string'},
'type': 'array'},
'source-ca-cert': {'type': 'string'}},
'required': ['model-tag',
'controller-tag',
'source-api-addrs',
'source-ca-cert',
'cross-model-uuids'],
'type': 'object'},
'AdoptResourcesArgs': {'additionalProperties': False,
'properties': {'model-tag': {'type': 'string'},
'source-controller-version': {'$ref': '#/definitions/Number'}},
'required': ['model-tag',
'source-controller-version'],
'type': 'object'},
'BytesResult': {'additionalProperties': False,
'properties': {'result': {'items': {'type': 'integer'},
'type': 'array'}},
'required': ['result'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'MigrationModelInfo': {'additionalProperties': False,
'properties': {'agent-version': {'$ref': '#/definitions/Number'},
'controller-agent-version': {'$ref': '#/definitions/Number'},
'name': {'type': 'string'},
'owner-tag': {'type': 'string'},
'uuid': {'type': 'string'}},
'required': ['uuid',
'name',
'owner-tag',
'agent-version',
'controller-agent-version'],
'type': 'object'},
'ModelArgs': {'additionalProperties': False,
'properties': {'model-tag': {'type': 'string'}},
'required': ['model-tag'],
'type': 'object'},
'Number': {'additionalProperties': False,
'properties': {'Build': {'type': 'integer'},
'Major': {'type': 'integer'},
'Minor': {'type': 'integer'},
'Patch': {'type': 'integer'},
'Tag': {'type': 'string'}},
'required': ['Major',
'Minor',
'Tag',
'Patch',
'Build'],
'type': 'object'},
'SerializedModel': {'additionalProperties': False,
'properties': {'bytes': {'items': {'type': 'integer'},
'type': 'array'},
'charms': {'items': {'type': 'string'},
'type': 'array'},
'resources': {'items': {'$ref': '#/definitions/SerializedModelResource'},
'type': 'array'},
'tools': {'items': {'$ref': '#/definitions/SerializedModelTools'},
'type': 'array'}},
'required': ['bytes',
'charms',
'tools',
'resources'],
'type': 'object'},
'SerializedModelResource': {'additionalProperties': False,
'properties': {'application': {'type': 'string'},
'application-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
'charmstore-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
'name': {'type': 'string'},
'unit-revisions': {'patternProperties': {'.*': {'$ref': '#/definitions/SerializedModelResourceRevision'}},
'type': 'object'}},
'required': ['application',
'name',
'application-revision',
'charmstore-revision',
'unit-revisions'],
'type': 'object'},
'SerializedModelResourceRevision': {'additionalProperties': False,
'properties': {'description': {'type': 'string'},
'fingerprint': {'type': 'string'},
'origin': {'type': 'string'},
'path': {'type': 'string'},
'revision': {'type': 'integer'},
'size': {'type': 'integer'},
'timestamp': {'format': 'date-time',
'type': 'string'},
'type': {'type': 'string'},
'username': {'type': 'string'}},
'required': ['revision',
'type',
'path',
'description',
'origin',
'fingerprint',
'size',
'timestamp'],
'type': 'object'},
'SerializedModelTools': {'additionalProperties': False,
'properties': {'uri': {'type': 'string'},
'version': {'type': 'string'}},
'required': ['version', 'uri'],
'type': 'object'}},
'properties': {'Abort': {'description': 'Abort removes the specified model '
'from the database. It is an error '
'to\n'
'attempt to Abort a model that has a '
'migration mode other than importing.',
'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}},
'type': 'object'},
'Activate': {'description': 'Activate sets the migration mode '
'of the model to "none", meaning '
'it\n'
'is ready for use. It is an error '
'to attempt to Abort a model that\n'
'has a migration mode other than '
'importing. It also adds any '
'required\n'
'external controller records for '
'those controllers hosting offers '
'used\n'
'by the model.',
'properties': {'Params': {'$ref': '#/definitions/ActivateModelArgs'}},
'type': 'object'},
'AdoptResources': {'description': 'AdoptResources asks the '
'cloud provider to update '
'the controller\n'
"tags for a model's "
'resources. This prevents '
'the resources from\n'
'being destroyed if the '
'source controller is '
'destroyed after the\n'
'model is migrated away.',
'properties': {'Params': {'$ref': '#/definitions/AdoptResourcesArgs'}},
'type': 'object'},
'CACert': {'description': 'CACert returns the certificate used '
'to validate the state connection.',
'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
'type': 'object'},
'CheckMachines': {'description': 'CheckMachines compares the '
'machines in state with the '
'ones reported\n'
'by the provider and reports '
'any discrepancies.',
'properties': {'Params': {'$ref': '#/definitions/ModelArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'Import': {'description': 'Import takes a serialized Juju '
'model, deserializes it, and\n'
'recreates it in the receiving '
'controller.',
'properties': {'Params': {'$ref': '#/definitions/SerializedModel'}},
'type': 'object'},
'LatestLogTime': {'description': 'LatestLogTime returns the '
'time of the most recent log '
'record\n'
'received by the logtransfer '
'endpoint. This can be used '
'as the start\n'
'point for streaming logs '
'from the source if the '
'transfer was\n'
'interrupted.\n'
'\n'
'For performance reasons, not '
'every time is tracked, so if '
'the\n'
'target controller died '
'during the transfer the '
'latest log time\n'
'might be up to 2 minutes '
'earlier. If the transfer was '
'interrupted\n'
'in some other way (like the '
'source controller going away '
'or a\n'
'network partition) the time '
'will be up-to-date.\n'
'\n'
'Log messages are assumed to '
'be sent in time order (which '
'is how\n'
'debug-log emits them). If '
"that isn't the case then "
'this mechanism\n'
"can't be used to avoid "
'duplicates when logtransfer '
'is restarted.\n'
'\n'
'Returns the zero time if no '
'logs have been transferred.',
'properties': {'Params': {'$ref': '#/definitions/ModelArgs'},
'Result': {'format': 'date-time',
'type': 'string'}},
'type': 'object'},
'Prechecks': {'description': 'Prechecks ensure that the target '
'controller is ready to accept a\n'
'model migration.',
'properties': {'Params': {'$ref': '#/definitions/MigrationModelInfo'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(None)
async def Abort(self, model_tag=None):
'''
Abort removes the specified model from the database. It is an error to
attempt to Abort a model that has a migration mode other than importing.
model_tag : str
Returns -> None
'''
if model_tag is not None and not isinstance(model_tag, (bytes, str)):
raise Exception("Expected model_tag to be a str, received: {}".format(type(model_tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='Abort',
version=2,
params=_params)
_params['model-tag'] = model_tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Activate(self, controller_alias=None, controller_tag=None, cross_model_uuids=None, model_tag=None, source_api_addrs=None, source_ca_cert=None):
'''
Activate sets the migration mode of the model to "none", meaning it
is ready for use. It is an error to attempt to Abort a model that
has a migration mode other than importing. It also adds any required
external controller records for those controllers hosting offers used
by the model.
controller_alias : str
controller_tag : str
cross_model_uuids : typing.Sequence[str]
model_tag : str
source_api_addrs : typing.Sequence[str]
source_ca_cert : str
Returns -> None
'''
if controller_alias is not None and not isinstance(controller_alias, (bytes, str)):
raise Exception("Expected controller_alias to be a str, received: {}".format(type(controller_alias)))
if controller_tag is not None and not isinstance(controller_tag, (bytes, str)):
raise Exception("Expected controller_tag to be a str, received: {}".format(type(controller_tag)))
if cross_model_uuids is not None and not isinstance(cross_model_uuids, (bytes, str, list)):
raise Exception("Expected cross_model_uuids to be a Sequence, received: {}".format(type(cross_model_uuids)))
if model_tag is not None and not isinstance(model_tag, (bytes, str)):
raise Exception("Expected model_tag to be a str, received: {}".format(type(model_tag)))
if source_api_addrs is not None and not isinstance(source_api_addrs, (bytes, str, list)):
raise Exception("Expected source_api_addrs to be a Sequence, received: {}".format(type(source_api_addrs)))
if source_ca_cert is not None and not isinstance(source_ca_cert, (bytes, str)):
raise Exception("Expected source_ca_cert to be a str, received: {}".format(type(source_ca_cert)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='Activate',
version=2,
params=_params)
_params['controller-alias'] = controller_alias
_params['controller-tag'] = controller_tag
_params['cross-model-uuids'] = cross_model_uuids
_params['model-tag'] = model_tag
_params['source-api-addrs'] = source_api_addrs
_params['source-ca-cert'] = source_ca_cert
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def AdoptResources(self, model_tag=None, source_controller_version=None):
'''
AdoptResources asks the cloud provider to update the controller
tags for a model's resources. This prevents the resources from
being destroyed if the source controller is destroyed after the
model is migrated away.
model_tag : str
source_controller_version : Number
Returns -> None
'''
if model_tag is not None and not isinstance(model_tag, (bytes, str)):
raise Exception("Expected model_tag to be a str, received: {}".format(type(model_tag)))
if source_controller_version is not None and not isinstance(source_controller_version, (dict, Number)):
raise Exception("Expected source_controller_version to be a Number, received: {}".format(type(source_controller_version)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='AdoptResources',
version=2,
params=_params)
_params['model-tag'] = model_tag
_params['source-controller-version'] = source_controller_version
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(BytesResult)
async def CACert(self):
'''
CACert returns the certificate used to validate the state connection.
Returns -> BytesResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='CACert',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def CheckMachines(self, model_tag=None):
'''
CheckMachines compares the machines in state with the ones reported
by the provider and reports any discrepancies.
model_tag : str
Returns -> ErrorResults
'''
if model_tag is not None and not isinstance(model_tag, (bytes, str)):
raise Exception("Expected model_tag to be a str, received: {}".format(type(model_tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='CheckMachines',
version=2,
params=_params)
_params['model-tag'] = model_tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Import(self, bytes_=None, charms=None, resources=None, tools=None):
'''
Import takes a serialized Juju model, deserializes it, and
recreates it in the receiving controller.
bytes_ : typing.Sequence[int]
charms : typing.Sequence[str]
resources : typing.Sequence[~SerializedModelResource]
tools : typing.Sequence[~SerializedModelTools]
Returns -> None
'''
if bytes_ is not None and not isinstance(bytes_, (bytes, str, list)):
raise Exception("Expected bytes_ to be a Sequence, received: {}".format(type(bytes_)))
if charms is not None and not isinstance(charms, (bytes, str, list)):
raise Exception("Expected charms to be a Sequence, received: {}".format(type(charms)))
if resources is not None and not isinstance(resources, (bytes, str, list)):
raise Exception("Expected resources to be a Sequence, received: {}".format(type(resources)))
if tools is not None and not isinstance(tools, (bytes, str, list)):
raise Exception("Expected tools to be a Sequence, received: {}".format(type(tools)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='Import',
version=2,
params=_params)
_params['bytes'] = bytes_
_params['charms'] = charms
_params['resources'] = resources
_params['tools'] = tools
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(str)
async def LatestLogTime(self, model_tag=None):
'''
LatestLogTime returns the time of the most recent log record
received by the logtransfer endpoint. This can be used as the start
point for streaming logs from the source if the transfer was
interrupted.
For performance reasons, not every time is tracked, so if the
target controller died during the transfer the latest log time
might be up to 2 minutes earlier. If the transfer was interrupted
in some other way (like the source controller going away or a
network partition) the time will be up-to-date.
Log messages are assumed to be sent in time order (which is how
debug-log emits them). If that isn't the case then this mechanism
can't be used to avoid duplicates when logtransfer is restarted.
Returns the zero time if no logs have been transferred.
model_tag : str
Returns -> str
'''
if model_tag is not None and not isinstance(model_tag, (bytes, str)):
raise Exception("Expected model_tag to be a str, received: {}".format(type(model_tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='LatestLogTime',
version=2,
params=_params)
_params['model-tag'] = model_tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Prechecks(self, agent_version=None, controller_agent_version=None, name=None, owner_tag=None, uuid=None):
'''
Prechecks ensure that the target controller is ready to accept a
model migration.
agent_version : Number
controller_agent_version : Number
name : str
owner_tag : str
uuid : str
Returns -> None
'''
if agent_version is not None and not isinstance(agent_version, (dict, Number)):
raise Exception("Expected agent_version to be a Number, received: {}".format(type(agent_version)))
if controller_agent_version is not None and not isinstance(controller_agent_version, (dict, Number)):
raise Exception("Expected controller_agent_version to be a Number, received: {}".format(type(controller_agent_version)))
if name is not None and not isinstance(name, (bytes, str)):
raise Exception("Expected name to be a str, received: {}".format(type(name)))
if owner_tag is not None and not isinstance(owner_tag, (bytes, str)):
raise Exception("Expected owner_tag to be a str, received: {}".format(type(owner_tag)))
if uuid is not None and not isinstance(uuid, (bytes, str)):
raise Exception("Expected uuid to be a str, received: {}".format(type(uuid)))
# map input types to rpc msg
_params = dict()
msg = dict(type='MigrationTarget',
request='Prechecks',
version=2,
params=_params)
_params['agent-version'] = agent_version
_params['controller-agent-version'] = controller_agent_version
_params['name'] = name
_params['owner-tag'] = owner_tag
_params['uuid'] = uuid
reply = await self.rpc(msg)
return reply
[docs]class ProxyUpdaterFacade(Type):
name = 'ProxyUpdater'
version = 2
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'NotifyWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ProxyConfig': {'additionalProperties': False,
'properties': {'ftp': {'type': 'string'},
'http': {'type': 'string'},
'https': {'type': 'string'},
'no-proxy': {'type': 'string'}},
'required': ['http',
'https',
'ftp',
'no-proxy'],
'type': 'object'},
'ProxyConfigResult': {'additionalProperties': False,
'properties': {'apt-mirror': {'type': 'string'},
'apt-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
'error': {'$ref': '#/definitions/Error'},
'juju-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
'legacy-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
'snap-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
'snap-store-assertions': {'type': 'string'},
'snap-store-id': {'type': 'string'},
'snap-store-proxy-url': {'type': 'string'}},
'required': ['legacy-proxy-settings',
'juju-proxy-settings'],
'type': 'object'},
'ProxyConfigResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ProxyConfigResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'}},
'properties': {'ProxyConfig': {'description': 'ProxyConfig returns the proxy '
'settings for the current '
'model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ProxyConfigResults'}},
'type': 'object'},
'WatchForProxyConfigAndAPIHostPortChanges': {'description': 'WatchForProxyConfigAndAPIHostPortChanges '
'watches '
'for '
'changes '
'to '
'the '
'proxy '
'and '
'api '
'host '
'port '
'settings.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ProxyConfigResults)
async def ProxyConfig(self, entities=None):
'''
ProxyConfig returns the proxy settings for the current model.
entities : typing.Sequence[~Entity]
Returns -> ProxyConfigResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='ProxyUpdater',
request='ProxyConfig',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResults)
async def WatchForProxyConfigAndAPIHostPortChanges(self, entities=None):
'''
WatchForProxyConfigAndAPIHostPortChanges watches for changes to the proxy and api host port settings.
entities : typing.Sequence[~Entity]
Returns -> NotifyWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='ProxyUpdater',
request='WatchForProxyConfigAndAPIHostPortChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs]class RaftLeaseFacade(Type):
name = 'RaftLease'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'LeaseOperationCommand': {'additionalProperties': False,
'properties': {'duration': {'type': 'integer'},
'holder': {'type': 'string'},
'lease': {'type': 'string'},
'model-uuid': {'type': 'string'},
'namespace': {'type': 'string'},
'new-time': {'format': 'date-time',
'type': 'string'},
'old-time': {'format': 'date-time',
'type': 'string'},
'operation': {'type': 'string'},
'pin-entity': {'type': 'string'},
'version': {'type': 'integer'}},
'required': ['version', 'operation'],
'type': 'object'},
'LeaseOperationsV2': {'additionalProperties': False,
'properties': {'commands': {'items': {'$ref': '#/definitions/LeaseOperationCommand'},
'type': 'array'}},
'required': ['commands'],
'type': 'object'}},
'properties': {'ApplyLease': {'properties': {'Params': {'$ref': '#/definitions/LeaseOperationsV2'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def ApplyLease(self, commands=None):
'''
commands : typing.Sequence[~LeaseOperationCommand]
Returns -> ErrorResults
'''
if commands is not None and not isinstance(commands, (bytes, str, list)):
raise Exception("Expected commands to be a Sequence, received: {}".format(type(commands)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RaftLease',
request='ApplyLease',
version=2,
params=_params)
_params['commands'] = commands
reply = await self.rpc(msg)
return reply
[docs]class RebootFacade(Type):
name = 'Reboot'
version = 2
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'RebootActionResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'string'}},
'type': 'object'},
'RebootActionResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RebootActionResult'},
'type': 'array'}},
'type': 'object'}},
'properties': {'ClearReboot': {'description': 'ClearReboot will clear the '
'reboot flag on provided '
'machines, if it exists.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'GetRebootAction': {'description': 'GetRebootAction returns '
'the action a machine agent '
'should take.\n'
'If a reboot flag is set on '
'the machine, then that '
'machine is\n'
'expected to reboot '
'(params.ShouldReboot).\n'
'a reboot flag set on the '
'machine parent or '
'grandparent, will\n'
'cause the machine to '
'shutdown '
'(params.ShouldShutdown).\n'
'If no reboot flag is set, '
'the machine should do '
'nothing '
'(params.ShouldDoNothing).',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/RebootActionResults'}},
'type': 'object'},
'RequestReboot': {'description': 'RequestReboot sets the '
'reboot flag on the provided '
'machines',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'WatchForRebootEvent': {'description': 'WatchForRebootEvent '
'starts a watcher to '
'track if there is a '
'new\n'
'reboot request on the '
'machines ID or any of '
'its parents (in case '
'we are a container).',
'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def ClearReboot(self, entities=None):
'''
ClearReboot will clear the reboot flag on provided machines, if it exists.
entities : typing.Sequence[~Entity]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Reboot',
request='ClearReboot',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RebootActionResults)
async def GetRebootAction(self, entities=None):
'''
GetRebootAction returns the action a machine agent should take.
If a reboot flag is set on the machine, then that machine is
expected to reboot (params.ShouldReboot).
a reboot flag set on the machine parent or grandparent, will
cause the machine to shutdown (params.ShouldShutdown).
If no reboot flag is set, the machine should do nothing (params.ShouldDoNothing).
entities : typing.Sequence[~Entity]
Returns -> RebootActionResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Reboot',
request='GetRebootAction',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def RequestReboot(self, entities=None):
'''
RequestReboot sets the reboot flag on the provided machines
entities : typing.Sequence[~Entity]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Reboot',
request='RequestReboot',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchForRebootEvent(self):
'''
WatchForRebootEvent starts a watcher to track if there is a new
reboot request on the machines ID or any of its parents (in case we are a container).
Returns -> NotifyWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='Reboot',
request='WatchForRebootEvent',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class RemoteRelationsFacade(Type):
name = 'RemoteRelations'
version = 2
schema = {'definitions': {'ControllerAPIInfoResult': {'additionalProperties': False,
'properties': {'addresses': {'items': {'type': 'string'},
'type': 'array'},
'cacert': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['addresses',
'cacert'],
'type': 'object'},
'ControllerAPIInfoResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ControllerAPIInfoResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ControllerConfigResult': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'}},
'required': ['config'],
'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'EntityMacaroonArg': {'additionalProperties': False,
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'tag': {'type': 'string'}},
'required': ['macaroon', 'tag'],
'type': 'object'},
'EntityMacaroonArgs': {'additionalProperties': False,
'properties': {'Args': {'items': {'$ref': '#/definitions/EntityMacaroonArg'},
'type': 'array'}},
'required': ['Args'],
'type': 'object'},
'EntityStatusArgs': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'info': {'type': 'string'},
'status': {'type': 'string'},
'tag': {'type': 'string'}},
'required': ['tag',
'status',
'info',
'data'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ExternalControllerInfo': {'additionalProperties': False,
'properties': {'addrs': {'items': {'type': 'string'},
'type': 'array'},
'ca-cert': {'type': 'string'},
'controller-alias': {'type': 'string'},
'controller-tag': {'type': 'string'}},
'required': ['controller-tag',
'controller-alias',
'addrs',
'ca-cert'],
'type': 'object'},
'GetTokenArg': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'GetTokenArgs': {'additionalProperties': False,
'properties': {'Args': {'items': {'$ref': '#/definitions/GetTokenArg'},
'type': 'array'}},
'required': ['Args'],
'type': 'object'},
'LatestSecretRevisionChanges': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/SecretRevisionChange'},
'type': 'array'}},
'required': ['changes'],
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
'RemoteApplication': {'additionalProperties': False,
'properties': {'consume-version': {'type': 'integer'},
'is-consumer-proxy': {'type': 'boolean'},
'life': {'type': 'string'},
'macaroon': {'$ref': '#/definitions/Macaroon'},
'model-uuid': {'type': 'string'},
'name': {'type': 'string'},
'offer-uuid': {'type': 'string'},
'status': {'type': 'string'}},
'required': ['name',
'offer-uuid',
'model-uuid',
'is-consumer-proxy'],
'type': 'object'},
'RemoteApplicationResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/RemoteApplication'}},
'type': 'object'},
'RemoteApplicationResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationResult'},
'type': 'array'}},
'type': 'object'},
'RemoteEndpoint': {'additionalProperties': False,
'properties': {'interface': {'type': 'string'},
'limit': {'type': 'integer'},
'name': {'type': 'string'},
'role': {'type': 'string'}},
'required': ['name',
'role',
'interface',
'limit'],
'type': 'object'},
'RemoteEntityTokenArg': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'},
'token': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'RemoteEntityTokenArgs': {'additionalProperties': False,
'properties': {'Args': {'items': {'$ref': '#/definitions/RemoteEntityTokenArg'},
'type': 'array'}},
'required': ['Args'],
'type': 'object'},
'RemoteRelation': {'additionalProperties': False,
'properties': {'application-name': {'type': 'string'},
'endpoint': {'$ref': '#/definitions/RemoteEndpoint'},
'id': {'type': 'integer'},
'key': {'type': 'string'},
'life': {'type': 'string'},
'remote-application-name': {'type': 'string'},
'remote-endpoint-name': {'type': 'string'},
'source-model-uuid': {'type': 'string'},
'suspended': {'type': 'boolean'},
'unit-count': {'type': 'integer'}},
'required': ['life',
'suspended',
'id',
'key',
'application-name',
'endpoint',
'unit-count',
'remote-application-name',
'remote-endpoint-name',
'source-model-uuid'],
'type': 'object'},
'RemoteRelationChangeEvent': {'additionalProperties': False,
'properties': {'application-settings': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'application-token': {'type': 'string'},
'bakery-version': {'type': 'integer'},
'changed-units': {'items': {'$ref': '#/definitions/RemoteRelationUnitChange'},
'type': 'array'},
'departed-units': {'items': {'type': 'integer'},
'type': 'array'},
'force-cleanup': {'type': 'boolean'},
'life': {'type': 'string'},
'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
'type': 'array'},
'relation-token': {'type': 'string'},
'suspended': {'type': 'boolean'},
'suspended-reason': {'type': 'string'},
'unit-count': {'type': 'integer'}},
'required': ['relation-token',
'application-token',
'life',
'unit-count'],
'type': 'object'},
'RemoteRelationResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'$ref': '#/definitions/RemoteRelation'}},
'type': 'object'},
'RemoteRelationResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RemoteRelationResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'RemoteRelationUnitChange': {'additionalProperties': False,
'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'unit-id': {'type': 'integer'}},
'required': ['unit-id'],
'type': 'object'},
'RemoteRelationWatchResult': {'additionalProperties': False,
'properties': {'changes': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'RemoteRelationWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/RemoteRelationWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'RemoteRelationsChanges': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
'type': 'array'}},
'type': 'object'},
'SecretRevisionChange': {'additionalProperties': False,
'properties': {'revision': {'type': 'integer'},
'uri': {'type': 'string'}},
'required': ['uri', 'revision'],
'type': 'object'},
'SetStatus': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'StringResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'string'}},
'required': ['result'],
'type': 'object'},
'StringResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'StringsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id'],
'type': 'object'},
'StringsWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'TokenResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'token': {'type': 'string'}},
'type': 'object'},
'TokenResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/TokenResult'},
'type': 'array'}},
'type': 'object'},
'UpdateControllerForModel': {'additionalProperties': False,
'properties': {'info': {'$ref': '#/definitions/ExternalControllerInfo'},
'model-tag': {'type': 'string'}},
'required': ['model-tag', 'info'],
'type': 'object'},
'UpdateControllersForModelsParams': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/UpdateControllerForModel'},
'type': 'array'}},
'required': ['changes'],
'type': 'object'}},
'properties': {'ConsumeRemoteRelationChanges': {'description': 'ConsumeRemoteRelationChanges '
'consumes '
'changes to '
'settings '
'originating\n'
'from the '
'remote/offering '
'side of '
'relations.',
'properties': {'Params': {'$ref': '#/definitions/RemoteRelationsChanges'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'ConsumeRemoteSecretChanges': {'description': 'ConsumeRemoteSecretChanges '
'updates the '
'local model '
'with secret '
'revision '
'changes\n'
'originating '
'from the '
'remote/offering '
'model.',
'properties': {'Params': {'$ref': '#/definitions/LatestSecretRevisionChanges'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'ControllerAPIInfoForModels': {'description': 'ControllerAPIInfoForModels '
'returns the '
'controller api '
'connection '
'details for the '
'specified '
'models.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}},
'type': 'object'},
'ControllerConfig': {'description': 'ControllerConfig returns '
"the controller's "
'configuration.',
'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
'type': 'object'},
'ExportEntities': {'description': 'ExportEntities allocates '
'unique, remote entity IDs '
'for the given entities in '
'the local model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/TokenResults'}},
'type': 'object'},
'GetTokens': {'description': 'GetTokens returns the token '
'associated with the entities '
'with the given tags for the '
'given models.',
'properties': {'Params': {'$ref': '#/definitions/GetTokenArgs'},
'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
'ImportRemoteEntities': {'description': 'ImportRemoteEntities '
'adds entities to the '
'remote entities '
'collection with the '
'specified opaque '
'tokens.',
'properties': {'Params': {'$ref': '#/definitions/RemoteEntityTokenArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'Relations': {'description': 'Relations returns information '
'about the cross-model relations '
'with the specified keys\n'
'in the local model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/RemoteRelationResults'}},
'type': 'object'},
'RemoteApplications': {'description': 'RemoteApplications '
'returns the current '
'state of the remote '
'applications with\n'
'the specified names in '
'the local model.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/RemoteApplicationResults'}},
'type': 'object'},
'SaveMacaroons': {'description': 'SaveMacaroons saves the '
'macaroons for the given '
'entities.',
'properties': {'Params': {'$ref': '#/definitions/EntityMacaroonArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'SetRemoteApplicationsStatus': {'description': 'SetRemoteApplicationsStatus '
'sets the '
'status for the '
'specified '
'remote '
'applications.',
'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'UpdateControllersForModels': {'description': 'UpdateControllersForModels '
'changes the '
'external '
'controller '
'records for '
'the\n'
'associated '
'model entities. '
'This is used '
'when the remote '
'relations '
'worker gets\n'
'redirected '
'following '
'migration of an '
'offering model.',
'properties': {'Params': {'$ref': '#/definitions/UpdateControllersForModelsParams'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'WatchLocalRelationChanges': {'description': 'WatchLocalRelationChanges '
'starts a '
'RemoteRelationWatcher '
'for each\n'
'specified '
'relation, '
'returning the '
'watcher IDs and '
'initial values,\n'
'or an error if '
'the remote '
'relations '
"couldn't be "
'watched.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/RemoteRelationWatchResults'}},
'type': 'object'},
'WatchRemoteApplicationRelations': {'description': 'WatchRemoteApplicationRelations '
'starts a '
'StringsWatcher '
'for '
'watching '
'the '
'relations '
'of\n'
'each '
'specified '
'application '
'in the '
'local '
'model, and '
'returns '
'the '
'watcher '
'IDs\n'
'and '
'initial '
'values, or '
'an error '
'if the '
"services' "
'relations '
'could not '
'be\n'
'watched.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/StringsWatchResults'}},
'type': 'object'},
'WatchRemoteApplications': {'description': 'WatchRemoteApplications '
'starts a strings '
'watcher that '
'notifies of the '
'addition,\n'
'removal, and '
'lifecycle changes '
'of remote '
'applications in '
'the model; and\n'
'returns the '
'watcher ID and '
'initial IDs of '
'remote '
'applications, or '
'an error if\n'
'watching failed.',
'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
'type': 'object'},
'WatchRemoteRelations': {'description': 'WatchRemoteRelations '
'starts a strings '
'watcher that notifies '
'of the addition,\n'
'removal, and '
'lifecycle changes of '
'remote relations in '
'the model; and\n'
'returns the watcher '
'ID and initial IDs of '
'remote relations, or '
'an error if\n'
'watching failed.',
'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def ConsumeRemoteRelationChanges(self, changes=None):
'''
ConsumeRemoteRelationChanges consumes changes to settings originating
from the remote/offering side of relations.
changes : typing.Sequence[~RemoteRelationChangeEvent]
Returns -> ErrorResults
'''
if changes is not None and not isinstance(changes, (bytes, str, list)):
raise Exception("Expected changes to be a Sequence, received: {}".format(type(changes)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ConsumeRemoteRelationChanges',
version=2,
params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def ConsumeRemoteSecretChanges(self, changes=None):
'''
ConsumeRemoteSecretChanges updates the local model with secret revision changes
originating from the remote/offering model.
changes : typing.Sequence[~SecretRevisionChange]
Returns -> ErrorResults
'''
if changes is not None and not isinstance(changes, (bytes, str, list)):
raise Exception("Expected changes to be a Sequence, received: {}".format(type(changes)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ConsumeRemoteSecretChanges',
version=2,
params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ControllerAPIInfoResults)
async def ControllerAPIInfoForModels(self, entities=None):
'''
ControllerAPIInfoForModels returns the controller api connection details for the specified models.
entities : typing.Sequence[~Entity]
Returns -> ControllerAPIInfoResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ControllerAPIInfoForModels',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ControllerConfigResult)
async def ControllerConfig(self):
'''
ControllerConfig returns the controller's configuration.
Returns -> ControllerConfigResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ControllerConfig',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(TokenResults)
async def ExportEntities(self, entities=None):
'''
ExportEntities allocates unique, remote entity IDs for the given entities in the local model.
entities : typing.Sequence[~Entity]
Returns -> TokenResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ExportEntities',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringResults)
async def GetTokens(self, args=None):
'''
GetTokens returns the token associated with the entities with the given tags for the given models.
args : typing.Sequence[~GetTokenArg]
Returns -> StringResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='GetTokens',
version=2,
params=_params)
_params['Args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def ImportRemoteEntities(self, args=None):
'''
ImportRemoteEntities adds entities to the remote entities collection with the specified opaque tokens.
args : typing.Sequence[~RemoteEntityTokenArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='ImportRemoteEntities',
version=2,
params=_params)
_params['Args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RemoteRelationResults)
async def Relations(self, entities=None):
'''
Relations returns information about the cross-model relations with the specified keys
in the local model.
entities : typing.Sequence[~Entity]
Returns -> RemoteRelationResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='Relations',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RemoteApplicationResults)
async def RemoteApplications(self, entities=None):
'''
RemoteApplications returns the current state of the remote applications with
the specified names in the local model.
entities : typing.Sequence[~Entity]
Returns -> RemoteApplicationResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='RemoteApplications',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SaveMacaroons(self, args=None):
'''
SaveMacaroons saves the macaroons for the given entities.
args : typing.Sequence[~EntityMacaroonArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='SaveMacaroons',
version=2,
params=_params)
_params['Args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SetRemoteApplicationsStatus(self, entities=None):
'''
SetRemoteApplicationsStatus sets the status for the specified remote applications.
entities : typing.Sequence[~EntityStatusArgs]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='SetRemoteApplicationsStatus',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def UpdateControllersForModels(self, changes=None):
'''
UpdateControllersForModels changes the external controller records for the
associated model entities. This is used when the remote relations worker gets
redirected following migration of an offering model.
changes : typing.Sequence[~UpdateControllerForModel]
Returns -> ErrorResults
'''
if changes is not None and not isinstance(changes, (bytes, str, list)):
raise Exception("Expected changes to be a Sequence, received: {}".format(type(changes)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='UpdateControllersForModels',
version=2,
params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(RemoteRelationWatchResults)
async def WatchLocalRelationChanges(self, entities=None):
'''
WatchLocalRelationChanges starts a RemoteRelationWatcher for each
specified relation, returning the watcher IDs and initial values,
or an error if the remote relations couldn't be watched.
entities : typing.Sequence[~Entity]
Returns -> RemoteRelationWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='WatchLocalRelationChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResults)
async def WatchRemoteApplicationRelations(self, entities=None):
'''
WatchRemoteApplicationRelations starts a StringsWatcher for watching the relations of
each specified application in the local model, and returns the watcher IDs
and initial values, or an error if the services' relations could not be
watched.
entities : typing.Sequence[~Entity]
Returns -> StringsWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='WatchRemoteApplicationRelations',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResult)
async def WatchRemoteApplications(self):
'''
WatchRemoteApplications starts a strings watcher that notifies of the addition,
removal, and lifecycle changes of remote applications in the model; and
returns the watcher ID and initial IDs of remote applications, or an error if
watching failed.
Returns -> StringsWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='WatchRemoteApplications',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResult)
async def WatchRemoteRelations(self):
'''
WatchRemoteRelations starts a strings watcher that notifies of the addition,
removal, and lifecycle changes of remote relations in the model; and
returns the watcher ID and initial IDs of remote relations, or an error if
watching failed.
Returns -> StringsWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='RemoteRelations',
request='WatchRemoteRelations',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class SecretsFacade(Type):
name = 'Secrets'
version = 2
schema = {'definitions': {'CreateSecretArg': {'additionalProperties': False,
'properties': {'UpsertSecretArg': {'$ref': '#/definitions/UpsertSecretArg'},
'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'owner-tag': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'},
'uri': {'type': 'string'}},
'required': ['UpsertSecretArg',
'owner-tag'],
'type': 'object'},
'CreateSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/CreateSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'DeleteSecretArg': {'additionalProperties': False,
'properties': {'label': {'type': 'string'},
'revisions': {'items': {'type': 'integer'},
'type': 'array'},
'uri': {'type': 'string'}},
'required': ['uri', 'label'],
'type': 'object'},
'DeleteSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/DeleteSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'GrantRevokeUserSecretArg': {'additionalProperties': False,
'properties': {'applications': {'items': {'type': 'string'},
'type': 'array'},
'label': {'type': 'string'},
'uri': {'type': 'string'}},
'required': ['uri',
'label',
'applications'],
'type': 'object'},
'ListSecretResult': {'additionalProperties': False,
'properties': {'create-time': {'format': 'date-time',
'type': 'string'},
'description': {'type': 'string'},
'label': {'type': 'string'},
'latest-expire-time': {'format': 'date-time',
'type': 'string'},
'latest-revision': {'type': 'integer'},
'next-rotate-time': {'format': 'date-time',
'type': 'string'},
'owner-tag': {'type': 'string'},
'revisions': {'items': {'$ref': '#/definitions/SecretRevision'},
'type': 'array'},
'rotate-policy': {'type': 'string'},
'update-time': {'format': 'date-time',
'type': 'string'},
'uri': {'type': 'string'},
'value': {'$ref': '#/definitions/SecretValueResult'},
'version': {'type': 'integer'}},
'required': ['uri',
'version',
'owner-tag',
'latest-revision',
'create-time',
'update-time',
'revisions'],
'type': 'object'},
'ListSecretResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ListSecretResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'ListSecretsArgs': {'additionalProperties': False,
'properties': {'filter': {'$ref': '#/definitions/SecretsFilter'},
'show-secrets': {'type': 'boolean'}},
'required': ['show-secrets', 'filter'],
'type': 'object'},
'SecretContentParams': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'value-ref': {'$ref': '#/definitions/SecretValueRef'}},
'type': 'object'},
'SecretRevision': {'additionalProperties': False,
'properties': {'backend-name': {'type': 'string'},
'create-time': {'format': 'date-time',
'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'revision': {'type': 'integer'},
'update-time': {'format': 'date-time',
'type': 'string'},
'value-ref': {'$ref': '#/definitions/SecretValueRef'}},
'required': ['revision'],
'type': 'object'},
'SecretValueRef': {'additionalProperties': False,
'properties': {'backend-id': {'type': 'string'},
'revision-id': {'type': 'string'}},
'required': ['backend-id', 'revision-id'],
'type': 'object'},
'SecretValueResult': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'SecretsFilter': {'additionalProperties': False,
'properties': {'label': {'type': 'string'},
'owner-tag': {'type': 'string'},
'revision': {'type': 'integer'},
'uri': {'type': 'string'}},
'type': 'object'},
'StringResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'string'}},
'required': ['result'],
'type': 'object'},
'StringResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'UpdateUserSecretArg': {'additionalProperties': False,
'properties': {'UpsertSecretArg': {'$ref': '#/definitions/UpsertSecretArg'},
'auto-prune': {'type': 'boolean'},
'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'existing-label': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'},
'uri': {'type': 'string'}},
'required': ['UpsertSecretArg',
'uri',
'existing-label'],
'type': 'object'},
'UpdateUserSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/UpdateUserSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'UpsertSecretArg': {'additionalProperties': False,
'properties': {'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'}},
'type': 'object'}},
'properties': {'CreateSecrets': {'description': 'CreateSecrets creates new '
'secrets.',
'properties': {'Params': {'$ref': '#/definitions/CreateSecretArgs'},
'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
'GrantSecret': {'description': 'GrantSecret grants access to a '
'user secret.',
'properties': {'Params': {'$ref': '#/definitions/GrantRevokeUserSecretArg'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'ListSecrets': {'description': 'ListSecrets lists available '
'secrets.',
'properties': {'Params': {'$ref': '#/definitions/ListSecretsArgs'},
'Result': {'$ref': '#/definitions/ListSecretResults'}},
'type': 'object'},
'RemoveSecrets': {'description': 'RemoveSecrets remove user '
'secret.',
'properties': {'Params': {'$ref': '#/definitions/DeleteSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'RevokeSecret': {'description': 'RevokeSecret revokes access '
'to a user secret.',
'properties': {'Params': {'$ref': '#/definitions/GrantRevokeUserSecretArg'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'UpdateSecrets': {'description': 'UpdateSecrets creates new '
'secrets.',
'properties': {'Params': {'$ref': '#/definitions/UpdateUserSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(StringResults)
async def CreateSecrets(self, args=None):
'''
CreateSecrets creates new secrets.
args : typing.Sequence[~CreateSecretArg]
Returns -> StringResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='CreateSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def GrantSecret(self, applications=None, label=None, uri=None):
'''
GrantSecret grants access to a user secret.
applications : typing.Sequence[str]
label : str
uri : str
Returns -> ErrorResults
'''
if applications is not None and not isinstance(applications, (bytes, str, list)):
raise Exception("Expected applications to be a Sequence, received: {}".format(type(applications)))
if label is not None and not isinstance(label, (bytes, str)):
raise Exception("Expected label to be a str, received: {}".format(type(label)))
if uri is not None and not isinstance(uri, (bytes, str)):
raise Exception("Expected uri to be a str, received: {}".format(type(uri)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='GrantSecret',
version=2,
params=_params)
_params['applications'] = applications
_params['label'] = label
_params['uri'] = uri
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ListSecretResults)
async def ListSecrets(self, filter_=None, show_secrets=None):
'''
ListSecrets lists available secrets.
filter_ : SecretsFilter
show_secrets : bool
Returns -> ListSecretResults
'''
if filter_ is not None and not isinstance(filter_, (dict, SecretsFilter)):
raise Exception("Expected filter_ to be a SecretsFilter, received: {}".format(type(filter_)))
if show_secrets is not None and not isinstance(show_secrets, bool):
raise Exception("Expected show_secrets to be a bool, received: {}".format(type(show_secrets)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='ListSecrets',
version=2,
params=_params)
_params['filter'] = filter_
_params['show-secrets'] = show_secrets
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def RemoveSecrets(self, args=None):
'''
RemoveSecrets remove user secret.
args : typing.Sequence[~DeleteSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='RemoveSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def RevokeSecret(self, applications=None, label=None, uri=None):
'''
RevokeSecret revokes access to a user secret.
applications : typing.Sequence[str]
label : str
uri : str
Returns -> ErrorResults
'''
if applications is not None and not isinstance(applications, (bytes, str, list)):
raise Exception("Expected applications to be a Sequence, received: {}".format(type(applications)))
if label is not None and not isinstance(label, (bytes, str)):
raise Exception("Expected label to be a str, received: {}".format(type(label)))
if uri is not None and not isinstance(uri, (bytes, str)):
raise Exception("Expected uri to be a str, received: {}".format(type(uri)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='RevokeSecret',
version=2,
params=_params)
_params['applications'] = applications
_params['label'] = label
_params['uri'] = uri
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def UpdateSecrets(self, args=None):
'''
UpdateSecrets creates new secrets.
args : typing.Sequence[~UpdateUserSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Secrets',
request='UpdateSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs]class SecretsManagerFacade(Type):
name = 'SecretsManager'
version = 2
schema = {'definitions': {'CreateSecretArg': {'additionalProperties': False,
'properties': {'UpsertSecretArg': {'$ref': '#/definitions/UpsertSecretArg'},
'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'owner-tag': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'},
'uri': {'type': 'string'}},
'required': ['UpsertSecretArg',
'owner-tag'],
'type': 'object'},
'CreateSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/CreateSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'CreateSecretURIsArg': {'additionalProperties': False,
'properties': {'count': {'type': 'integer'}},
'required': ['count'],
'type': 'object'},
'DeleteSecretArg': {'additionalProperties': False,
'properties': {'label': {'type': 'string'},
'revisions': {'items': {'type': 'integer'},
'type': 'array'},
'uri': {'type': 'string'}},
'required': ['uri', 'label'],
'type': 'object'},
'DeleteSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/DeleteSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'GetSecretConsumerInfoArgs': {'additionalProperties': False,
'properties': {'consumer-tag': {'type': 'string'},
'uris': {'items': {'type': 'string'},
'type': 'array'}},
'required': ['consumer-tag',
'uris'],
'type': 'object'},
'GetSecretContentArg': {'additionalProperties': False,
'properties': {'label': {'type': 'string'},
'peek': {'type': 'boolean'},
'refresh': {'type': 'boolean'},
'uri': {'type': 'string'}},
'required': ['uri'],
'type': 'object'},
'GetSecretContentArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/GetSecretContentArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'GrantRevokeSecretArg': {'additionalProperties': False,
'properties': {'role': {'type': 'string'},
'scope-tag': {'type': 'string'},
'subject-tags': {'items': {'type': 'string'},
'type': 'array'},
'uri': {'type': 'string'}},
'required': ['uri',
'scope-tag',
'subject-tags',
'role'],
'type': 'object'},
'GrantRevokeSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/GrantRevokeSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'ListSecretResult': {'additionalProperties': False,
'properties': {'create-time': {'format': 'date-time',
'type': 'string'},
'description': {'type': 'string'},
'label': {'type': 'string'},
'latest-expire-time': {'format': 'date-time',
'type': 'string'},
'latest-revision': {'type': 'integer'},
'next-rotate-time': {'format': 'date-time',
'type': 'string'},
'owner-tag': {'type': 'string'},
'revisions': {'items': {'$ref': '#/definitions/SecretRevision'},
'type': 'array'},
'rotate-policy': {'type': 'string'},
'update-time': {'format': 'date-time',
'type': 'string'},
'uri': {'type': 'string'},
'value': {'$ref': '#/definitions/SecretValueResult'},
'version': {'type': 'integer'}},
'required': ['uri',
'version',
'owner-tag',
'latest-revision',
'create-time',
'update-time',
'revisions'],
'type': 'object'},
'ListSecretResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ListSecretResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SecretBackendArgs': {'additionalProperties': False,
'properties': {'backend-ids': {'items': {'type': 'string'},
'type': 'array'},
'for-drain': {'type': 'boolean'}},
'required': ['for-drain', 'backend-ids'],
'type': 'object'},
'SecretBackendConfig': {'additionalProperties': False,
'properties': {'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'type': {'type': 'string'}},
'required': ['type'],
'type': 'object'},
'SecretBackendConfigResult': {'additionalProperties': False,
'properties': {'config': {'$ref': '#/definitions/SecretBackendConfig'},
'draining': {'type': 'boolean'},
'model-controller': {'type': 'string'},
'model-name': {'type': 'string'},
'model-uuid': {'type': 'string'}},
'required': ['model-controller',
'model-uuid',
'model-name',
'draining'],
'type': 'object'},
'SecretBackendConfigResults': {'additionalProperties': False,
'properties': {'active-id': {'type': 'string'},
'results': {'patternProperties': {'.*': {'$ref': '#/definitions/SecretBackendConfigResult'}},
'type': 'object'}},
'required': ['active-id'],
'type': 'object'},
'SecretConsumerInfoResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'label': {'type': 'string'},
'revision': {'type': 'integer'}},
'required': ['revision', 'label'],
'type': 'object'},
'SecretConsumerInfoResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/SecretConsumerInfoResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SecretContentParams': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'value-ref': {'$ref': '#/definitions/SecretValueRef'}},
'type': 'object'},
'SecretContentResult': {'additionalProperties': False,
'properties': {'backend-config': {'$ref': '#/definitions/SecretBackendConfigResult'},
'content': {'$ref': '#/definitions/SecretContentParams'},
'error': {'$ref': '#/definitions/Error'},
'latest-revision': {'type': 'integer'}},
'required': ['content'],
'type': 'object'},
'SecretContentResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/SecretContentResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SecretRevision': {'additionalProperties': False,
'properties': {'backend-name': {'type': 'string'},
'create-time': {'format': 'date-time',
'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'revision': {'type': 'integer'},
'update-time': {'format': 'date-time',
'type': 'string'},
'value-ref': {'$ref': '#/definitions/SecretValueRef'}},
'required': ['revision'],
'type': 'object'},
'SecretRevisionArg': {'additionalProperties': False,
'properties': {'pending-delete': {'type': 'boolean'},
'revisions': {'items': {'type': 'integer'},
'type': 'array'},
'uri': {'type': 'string'}},
'required': ['uri',
'revisions',
'pending-delete'],
'type': 'object'},
'SecretRotatedArg': {'additionalProperties': False,
'properties': {'original-revision': {'type': 'integer'},
'skip': {'type': 'boolean'},
'uri': {'type': 'string'}},
'required': ['uri',
'original-revision',
'skip'],
'type': 'object'},
'SecretRotatedArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/SecretRotatedArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'SecretTriggerChange': {'additionalProperties': False,
'properties': {'next-trigger-time': {'format': 'date-time',
'type': 'string'},
'revision': {'type': 'integer'},
'uri': {'type': 'string'}},
'required': ['uri',
'next-trigger-time'],
'type': 'object'},
'SecretTriggerWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/SecretTriggerChange'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'},
'SecretValueRef': {'additionalProperties': False,
'properties': {'backend-id': {'type': 'string'},
'revision-id': {'type': 'string'}},
'required': ['backend-id', 'revision-id'],
'type': 'object'},
'SecretValueResult': {'additionalProperties': False,
'properties': {'data': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'StringResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
'result': {'type': 'string'}},
'required': ['result'],
'type': 'object'},
'StringResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'StringsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id'],
'type': 'object'},
'StringsWatchResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'UpdateSecretArg': {'additionalProperties': False,
'properties': {'UpsertSecretArg': {'$ref': '#/definitions/UpsertSecretArg'},
'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'},
'uri': {'type': 'string'}},
'required': ['UpsertSecretArg', 'uri'],
'type': 'object'},
'UpdateSecretArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/UpdateSecretArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'},
'UpsertSecretArg': {'additionalProperties': False,
'properties': {'content': {'$ref': '#/definitions/SecretContentParams'},
'description': {'type': 'string'},
'expire-time': {'format': 'date-time',
'type': 'string'},
'label': {'type': 'string'},
'params': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'rotate-policy': {'type': 'string'}},
'type': 'object'}},
'properties': {'CreateSecretURIs': {'description': 'CreateSecretURIs creates '
'new secret URIs.',
'properties': {'Params': {'$ref': '#/definitions/CreateSecretURIsArg'},
'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
'CreateSecrets': {'description': 'CreateSecrets creates new '
'secrets.',
'properties': {'Params': {'$ref': '#/definitions/CreateSecretArgs'},
'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
'GetConsumerSecretsRevisionInfo': {'description': 'GetConsumerSecretsRevisionInfo '
'returns the '
'latest '
'secret '
'revisions '
'for the '
'specified '
'secrets.\n'
'This facade '
'method is '
'used for '
'remote '
'watcher to '
'get the '
'latest '
'secret '
'revisions '
'and labels '
'for a '
'secret '
'changed '
'hook.',
'properties': {'Params': {'$ref': '#/definitions/GetSecretConsumerInfoArgs'},
'Result': {'$ref': '#/definitions/SecretConsumerInfoResults'}},
'type': 'object'},
'GetSecretBackendConfigs': {'description': 'GetSecretBackendConfigs '
'gets the config '
'needed to create a '
'client to secret '
'backends.',
'properties': {'Params': {'$ref': '#/definitions/SecretBackendArgs'},
'Result': {'$ref': '#/definitions/SecretBackendConfigResults'}},
'type': 'object'},
'GetSecretContentInfo': {'description': 'GetSecretContentInfo '
'returns the secret '
'values for the '
'specified secrets.',
'properties': {'Params': {'$ref': '#/definitions/GetSecretContentArgs'},
'Result': {'$ref': '#/definitions/SecretContentResults'}},
'type': 'object'},
'GetSecretMetadata': {'description': 'GetSecretMetadata '
'returns metadata for the '
"caller's secrets.",
'properties': {'Result': {'$ref': '#/definitions/ListSecretResults'}},
'type': 'object'},
'GetSecretRevisionContentInfo': {'description': 'GetSecretRevisionContentInfo '
'returns the '
'secret values '
'for the '
'specified '
'secret '
'revisions.',
'properties': {'Params': {'$ref': '#/definitions/SecretRevisionArg'},
'Result': {'$ref': '#/definitions/SecretContentResults'}},
'type': 'object'},
'RemoveSecrets': {'description': 'RemoveSecrets removes the '
'specified secrets.',
'properties': {'Params': {'$ref': '#/definitions/DeleteSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'SecretsGrant': {'description': 'SecretsGrant grants access to '
'a secret for the specified '
'subjects.',
'properties': {'Params': {'$ref': '#/definitions/GrantRevokeSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'SecretsRevoke': {'description': 'SecretsRevoke revokes access '
'to a secret for the '
'specified subjects.',
'properties': {'Params': {'$ref': '#/definitions/GrantRevokeSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'SecretsRotated': {'description': 'SecretsRotated records when '
'secrets were last rotated.',
'properties': {'Params': {'$ref': '#/definitions/SecretRotatedArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'UpdateSecrets': {'description': 'UpdateSecrets updates the '
'specified secrets.',
'properties': {'Params': {'$ref': '#/definitions/UpdateSecretArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'WatchConsumedSecretsChanges': {'description': 'WatchConsumedSecretsChanges '
'sets up a '
'watcher to '
'notify of '
'changes to '
'secret '
'revisions for '
'the specified '
'consumers.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/StringsWatchResults'}},
'type': 'object'},
'WatchObsolete': {'description': 'WatchObsolete returns a '
'watcher for notifying when:\n'
' - a secret owned by the '
'entity is deleted\n'
' - a secret revision owed '
'by the entity no longer\n'
' has any consumers\n'
'\n'
'Obsolete revisions results '
'are "uri/revno" and deleted\n'
'secret results are "uri".',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/StringsWatchResult'}},
'type': 'object'},
'WatchSecretRevisionsExpiryChanges': {'description': 'WatchSecretRevisionsExpiryChanges '
'sets up '
'a '
'watcher '
'to '
'notify '
'of '
'changes '
'to '
'secret '
'revision '
'expiry '
'config.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/SecretTriggerWatchResult'}},
'type': 'object'},
'WatchSecretsRotationChanges': {'description': 'WatchSecretsRotationChanges '
'sets up a '
'watcher to '
'notify of '
'changes to '
'secret '
'rotation '
'config.',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/SecretTriggerWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(StringResults)
async def CreateSecretURIs(self, count=None):
'''
CreateSecretURIs creates new secret URIs.
count : int
Returns -> StringResults
'''
if count is not None and not isinstance(count, int):
raise Exception("Expected count to be a int, received: {}".format(type(count)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='CreateSecretURIs',
version=2,
params=_params)
_params['count'] = count
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringResults)
async def CreateSecrets(self, args=None):
'''
CreateSecrets creates new secrets.
args : typing.Sequence[~CreateSecretArg]
Returns -> StringResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='CreateSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretConsumerInfoResults)
async def GetConsumerSecretsRevisionInfo(self, consumer_tag=None, uris=None):
'''
GetConsumerSecretsRevisionInfo returns the latest secret revisions for the specified secrets.
This facade method is used for remote watcher to get the latest secret revisions and labels for a secret changed hook.
consumer_tag : str
uris : typing.Sequence[str]
Returns -> SecretConsumerInfoResults
'''
if consumer_tag is not None and not isinstance(consumer_tag, (bytes, str)):
raise Exception("Expected consumer_tag to be a str, received: {}".format(type(consumer_tag)))
if uris is not None and not isinstance(uris, (bytes, str, list)):
raise Exception("Expected uris to be a Sequence, received: {}".format(type(uris)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='GetConsumerSecretsRevisionInfo',
version=2,
params=_params)
_params['consumer-tag'] = consumer_tag
_params['uris'] = uris
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretBackendConfigResults)
async def GetSecretBackendConfigs(self, backend_ids=None, for_drain=None):
'''
GetSecretBackendConfigs gets the config needed to create a client to secret backends.
backend_ids : typing.Sequence[str]
for_drain : bool
Returns -> SecretBackendConfigResults
'''
if backend_ids is not None and not isinstance(backend_ids, (bytes, str, list)):
raise Exception("Expected backend_ids to be a Sequence, received: {}".format(type(backend_ids)))
if for_drain is not None and not isinstance(for_drain, bool):
raise Exception("Expected for_drain to be a bool, received: {}".format(type(for_drain)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='GetSecretBackendConfigs',
version=2,
params=_params)
_params['backend-ids'] = backend_ids
_params['for-drain'] = for_drain
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretContentResults)
async def GetSecretContentInfo(self, args=None):
'''
GetSecretContentInfo returns the secret values for the specified secrets.
args : typing.Sequence[~GetSecretContentArg]
Returns -> SecretContentResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='GetSecretContentInfo',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ListSecretResults)
async def GetSecretMetadata(self):
'''
GetSecretMetadata returns metadata for the caller's secrets.
Returns -> ListSecretResults
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='GetSecretMetadata',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretContentResults)
async def GetSecretRevisionContentInfo(self, pending_delete=None, revisions=None, uri=None):
'''
GetSecretRevisionContentInfo returns the secret values for the specified secret revisions.
pending_delete : bool
revisions : typing.Sequence[int]
uri : str
Returns -> SecretContentResults
'''
if pending_delete is not None and not isinstance(pending_delete, bool):
raise Exception("Expected pending_delete to be a bool, received: {}".format(type(pending_delete)))
if revisions is not None and not isinstance(revisions, (bytes, str, list)):
raise Exception("Expected revisions to be a Sequence, received: {}".format(type(revisions)))
if uri is not None and not isinstance(uri, (bytes, str)):
raise Exception("Expected uri to be a str, received: {}".format(type(uri)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='GetSecretRevisionContentInfo',
version=2,
params=_params)
_params['pending-delete'] = pending_delete
_params['revisions'] = revisions
_params['uri'] = uri
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def RemoveSecrets(self, args=None):
'''
RemoveSecrets removes the specified secrets.
args : typing.Sequence[~DeleteSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='RemoveSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SecretsGrant(self, args=None):
'''
SecretsGrant grants access to a secret for the specified subjects.
args : typing.Sequence[~GrantRevokeSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='SecretsGrant',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SecretsRevoke(self, args=None):
'''
SecretsRevoke revokes access to a secret for the specified subjects.
args : typing.Sequence[~GrantRevokeSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='SecretsRevoke',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def SecretsRotated(self, args=None):
'''
SecretsRotated records when secrets were last rotated.
args : typing.Sequence[~SecretRotatedArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='SecretsRotated',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def UpdateSecrets(self, args=None):
'''
UpdateSecrets updates the specified secrets.
args : typing.Sequence[~UpdateSecretArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='UpdateSecrets',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResults)
async def WatchConsumedSecretsChanges(self, entities=None):
'''
WatchConsumedSecretsChanges sets up a watcher to notify of changes to secret revisions for the specified consumers.
entities : typing.Sequence[~Entity]
Returns -> StringsWatchResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='WatchConsumedSecretsChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(StringsWatchResult)
async def WatchObsolete(self, entities=None):
'''
WatchObsolete returns a watcher for notifying when:
- a secret owned by the entity is deleted
- a secret revision owed by the entity no longer
has any consumers
Obsolete revisions results are "uri/revno" and deleted
secret results are "uri".
entities : typing.Sequence[~Entity]
Returns -> StringsWatchResult
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='WatchObsolete',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretTriggerWatchResult)
async def WatchSecretRevisionsExpiryChanges(self, entities=None):
'''
WatchSecretRevisionsExpiryChanges sets up a watcher to notify of changes to secret revision expiry config.
entities : typing.Sequence[~Entity]
Returns -> SecretTriggerWatchResult
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='WatchSecretRevisionsExpiryChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(SecretTriggerWatchResult)
async def WatchSecretsRotationChanges(self, entities=None):
'''
WatchSecretsRotationChanges sets up a watcher to notify of changes to secret rotation config.
entities : typing.Sequence[~Entity]
Returns -> SecretTriggerWatchResult
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='SecretsManager',
request='WatchSecretsRotationChanges',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs]class SingularFacade(Type):
name = 'Singular'
version = 2
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SingularClaim': {'additionalProperties': False,
'properties': {'claimant-tag': {'type': 'string'},
'duration': {'type': 'integer'},
'entity-tag': {'type': 'string'}},
'required': ['entity-tag',
'claimant-tag',
'duration'],
'type': 'object'},
'SingularClaims': {'additionalProperties': False,
'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'},
'type': 'array'}},
'required': ['claims'],
'type': 'object'}},
'properties': {'Claim': {'description': 'Claim makes the supplied '
'singular-controller lease requests. '
'(In practice,\n'
'any requests not for the '
"connection's model or controller, or "
'not on behalf\n'
'of the connected ModelManager '
'machine, will be rejected.)',
'properties': {'Params': {'$ref': '#/definitions/SingularClaims'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
'Wait': {'description': 'Wait waits for the '
'singular-controller lease to expire '
'for all supplied\n'
'entities. (In practice, any requests '
'that do not refer to the '
"connection's\n"
'model or controller will be '
'rejected.)',
'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResults)
async def Claim(self, claims=None):
'''
Claim makes the supplied singular-controller lease requests. (In practice,
any requests not for the connection's model or controller, or not on behalf
of the connected ModelManager machine, will be rejected.)
claims : typing.Sequence[~SingularClaim]
Returns -> ErrorResults
'''
if claims is not None and not isinstance(claims, (bytes, str, list)):
raise Exception("Expected claims to be a Sequence, received: {}".format(type(claims)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Singular',
request='Claim',
version=2,
params=_params)
_params['claims'] = claims
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def Wait(self, entities=None):
'''
Wait waits for the singular-controller lease to expire for all supplied
entities. (In practice, any requests that do not refer to the connection's
model or controller will be rejected.)
entities : typing.Sequence[~Entity]
Returns -> ErrorResults
'''
if entities is not None and not isinstance(entities, (bytes, str, list)):
raise Exception("Expected entities to be a Sequence, received: {}".format(type(entities)))
# map input types to rpc msg
_params = dict()
msg = dict(type='Singular',
request='Wait',
version=2,
params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
[docs]class StatusHistoryFacade(Type):
name = 'StatusHistory'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ModelConfigResult': {'additionalProperties': False,
'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'}},
'required': ['config'],
'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'},
'StatusHistoryPruneArgs': {'additionalProperties': False,
'properties': {'max-history-mb': {'type': 'integer'},
'max-history-time': {'type': 'integer'}},
'required': ['max-history-time',
'max-history-mb'],
'type': 'object'}},
'properties': {'ModelConfig': {'description': 'ModelConfig returns the '
"current model's configuration.",
'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
'type': 'object'},
'Prune': {'description': 'Prune endpoint removes status '
'history entries until\n'
'only the ones newer than now - '
'p.MaxHistoryTime remain and\n'
'the history is smaller than '
'p.MaxHistoryMB.',
'properties': {'Params': {'$ref': '#/definitions/StatusHistoryPruneArgs'}},
'type': 'object'},
'WatchForModelConfigChanges': {'description': 'WatchForModelConfigChanges '
'returns a '
'NotifyWatcher '
'that observes\n'
'changes to the '
'model '
'configuration.\n'
'Note that '
'although the '
'NotifyWatchResult '
'contains an '
'Error field,\n'
"it's not used "
'because we are '
'only returning '
'a single '
'watcher,\n'
'so we use the '
'regular error '
'return.',
'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ModelConfigResult)
async def ModelConfig(self):
'''
ModelConfig returns the current model's configuration.
Returns -> ModelConfigResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='StatusHistory',
request='ModelConfig',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Prune(self, max_history_mb=None, max_history_time=None):
'''
Prune endpoint removes status history entries until
only the ones newer than now - p.MaxHistoryTime remain and
the history is smaller than p.MaxHistoryMB.
max_history_mb : int
max_history_time : int
Returns -> None
'''
if max_history_mb is not None and not isinstance(max_history_mb, int):
raise Exception("Expected max_history_mb to be a int, received: {}".format(type(max_history_mb)))
if max_history_time is not None and not isinstance(max_history_time, int):
raise Exception("Expected max_history_time to be a int, received: {}".format(type(max_history_time)))
# map input types to rpc msg
_params = dict()
msg = dict(type='StatusHistory',
request='Prune',
version=2,
params=_params)
_params['max-history-mb'] = max_history_mb
_params['max-history-time'] = max_history_time
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(NotifyWatchResult)
async def WatchForModelConfigChanges(self):
'''
WatchForModelConfigChanges returns a NotifyWatcher that observes
changes to the model configuration.
Note that although the NotifyWatchResult contains an Error field,
it's not used because we are only returning a single watcher,
so we use the regular error return.
Returns -> NotifyWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='StatusHistory',
request='WatchForModelConfigChanges',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs]class UpgradeStepsFacade(Type):
name = 'UpgradeSteps'
version = 2
schema = {'definitions': {'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
'SetUnitStateArg': {'additionalProperties': False,
'properties': {'charm-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'meter-status-state': {'type': 'string'},
'relation-state': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'secret-state': {'type': 'string'},
'storage-state': {'type': 'string'},
'tag': {'type': 'string'},
'uniter-state': {'type': 'string'}},
'required': ['tag'],
'type': 'object'},
'SetUnitStateArgs': {'additionalProperties': False,
'properties': {'args': {'items': {'$ref': '#/definitions/SetUnitStateArg'},
'type': 'array'}},
'required': ['args'],
'type': 'object'}},
'properties': {'ResetKVMMachineModificationStatusIdle': {'description': 'ResetKVMMachineModificationStatusIdle '
'sets '
'the '
'modification '
'status\n'
'of a '
'kvm '
'machine '
'to '
'idle '
'if '
'it '
'is '
'in '
'an '
'error '
'state '
'before '
'upgrade.\n'
'Related '
'to '
'lp:1829393.',
'properties': {'Params': {'$ref': '#/definitions/Entity'},
'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'},
'WriteAgentState': {'description': 'WriteAgentState writes the '
'agent state for the set of '
'units provided. This\n'
'call presently deals with '
'the state for the unit '
'agent.',
'properties': {'Params': {'$ref': '#/definitions/SetUnitStateArgs'},
'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(ErrorResult)
async def ResetKVMMachineModificationStatusIdle(self, tag=None):
'''
ResetKVMMachineModificationStatusIdle sets the modification status
of a kvm machine to idle if it is in an error state before upgrade.
Related to lp:1829393.
tag : str
Returns -> ErrorResult
'''
if tag is not None and not isinstance(tag, (bytes, str)):
raise Exception("Expected tag to be a str, received: {}".format(type(tag)))
# map input types to rpc msg
_params = dict()
msg = dict(type='UpgradeSteps',
request='ResetKVMMachineModificationStatusIdle',
version=2,
params=_params)
_params['tag'] = tag
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(ErrorResults)
async def WriteAgentState(self, args=None):
'''
WriteAgentState writes the agent state for the set of units provided. This
call presently deals with the state for the unit agent.
args : typing.Sequence[~SetUnitStateArg]
Returns -> ErrorResults
'''
if args is not None and not isinstance(args, (bytes, str, list)):
raise Exception("Expected args to be a Sequence, received: {}".format(type(args)))
# map input types to rpc msg
_params = dict()
msg = dict(type='UpgradeSteps',
request='WriteAgentState',
version=2,
params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
[docs]class VolumeAttachmentsWatcherFacade(Type):
name = 'VolumeAttachmentsWatcher'
version = 2
schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
'message': {'type': 'string'}},
'required': ['message', 'code'],
'type': 'object'},
'MachineStorageId': {'additionalProperties': False,
'properties': {'attachment-tag': {'type': 'string'},
'machine-tag': {'type': 'string'}},
'required': ['machine-tag',
'attachment-tag'],
'type': 'object'},
'MachineStorageIdsWatchResult': {'additionalProperties': False,
'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
'type': 'array'},
'error': {'$ref': '#/definitions/Error'},
'watcher-id': {'type': 'string'}},
'required': ['watcher-id',
'changes'],
'type': 'object'}},
'properties': {'Next': {'description': 'Next returns when a change has '
'occurred to an entity of the\n'
'collection being watched since the '
'most recent call to Next\n'
'or the Watch call that created the '
'srvMachineStorageIdsWatcher.',
'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}},
'type': 'object'},
'Stop': {'description': 'Stop stops the watcher.',
'type': 'object'}},
'type': 'object'}
[docs] @ReturnMapping(MachineStorageIdsWatchResult)
async def Next(self):
'''
Next returns when a change has occurred to an entity of the
collection being watched since the most recent call to Next
or the Watch call that created the srvMachineStorageIdsWatcher.
Returns -> MachineStorageIdsWatchResult
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='VolumeAttachmentsWatcher',
request='Next',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] @ReturnMapping(None)
async def Stop(self):
'''
Stop stops the watcher.
Returns -> None
'''
# map input types to rpc msg
_params = dict()
msg = dict(type='VolumeAttachmentsWatcher',
request='Stop',
version=2,
params=_params)
reply = await self.rpc(msg)
return reply
[docs] async def rpc(self, msg):
'''
Patch rpc method to add Id.
'''
if not hasattr(self, 'Id'):
raise RuntimeError('Missing "Id" field')
msg['Id'] = id
from .facade import TypeEncoder
reply = await self.connection.rpc(msg, encoder=TypeEncoder)
return reply