From: Adam Israel Date: Wed, 27 Mar 2019 23:07:43 +0000 (-0400) Subject: Merge upstream libjuju X-Git-Tag: v6.0.0~14 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=caf6efba68120623038efc361cf46e1f60de452b;p=osm%2FN2VC.git Merge upstream libjuju Merge upstream libjuju (bug fixes) Change-Id: Ia28b8a0ea2168a4df74823e8493c650491afb695 Signed-off-by: Adam Israel --- caf6efba68120623038efc361cf46e1f60de452b diff --cc modules/libjuju/.gitignore index 7614b47,0000000..6d00fec mode 100644,000000..100644 --- a/modules/libjuju/.gitignore +++ b/modules/libjuju/.gitignore @@@ -1,14 -1,0 +1,15 @@@ +*.sw[mnop] +.venv/ +*.pyc +*.py~ +docs/_build/ +__pycache__/ +.tox/ +*.egg-info/ +.cache/ +.\#* +dist/ +dev/ +.pytest_cache +pytestdebug.log ++.vscode/ diff --cc modules/libjuju/.travis.yml index 4389c8e,0000000..5edfef5 mode 100644,000000..100644 --- a/modules/libjuju/.travis.yml +++ b/modules/libjuju/.travis.yml @@@ -1,50 -1,0 +1,48 @@@ +dist: xenial +sudo: required +language: python +cache: pip +before_install: + - if [[ $TRAVIS_PYTHON_VERSION == '3.6' ]]; then sudo add-apt-repository -y ppa:jonathonf/python-3.6; fi + - if [[ $TRAVIS_PYTHON_VERSION == '3.7-dev' ]]; then sudo add-apt-repository -y ppa:deadsnakes/ppa; fi + - sudo apt-get update -q + - sudo apt-get remove -qy lxd lxd-client + - sudo apt-get install snapd libsodium-dev -y +install: + - sudo snap install lxd || true # ignore failures so that unit tests will still run, at least + - sudo sh -c 'echo PATH=/snap/bin:$PATH >> /etc/environment'; + - sudo snap install jq || true + - sudo snap install juju --classic --$JUJU_CHANNEL || true + - sudo snap install juju-wait --classic || true + - pip install tox-travis +env: + global: > + TEST_AGENTS='{"agents":[{"url":"https://api.staging.jujucharms.com/identity","username":"libjuju-ci@yellow"}],"key":{"private":"88OOCxIHQNguRG7zFg2y2Hx5Ob0SeVKKBRnjyehverc=","public":"fDn20+5FGyN2hYO7z0rFUyoHGUnfrleslUNtoYsjNSs="}}' - LXD_PASSWORD="password" + PATH="/snap/bin:$PATH" + +matrix: + include: + - python: 3.6 + env: JUJU_CHANNEL=edge + - python: 3.6 + env: JUJU_CHANNEL=stable + - python: 3.7-dev + env: JUJU_CHANNEL=stable + - python: 3.7-dev + env: JUJU_CHANNEL=edge +before_script: - - sudo lxd waitready --timeout 30 - - sudo lxc storage create default dir - - sudo lxd init --auto --trust-password="${LXD_PASSWORD}" --network-address='[::]' --network-port=8443 ++ # Run lint before performing more expensive operations (fail fast/early) ++ - tox -e lint + - # I suspect these could be integrated into the lxd init call - - sudo sudo mkdir /var/snap/lxd/common/lxd/storage-pools/juju-zfs - - sudo lxc storage create juju-zfs dir source=/var/snap/lxd/common/lxd/storage-pools/juju-zfs # Horrible workaround to LP Bug #1738614 ++ # init lxd for tests ++ - sudo lxd waitready --timeout 30 ++ - sudo chmod 666 /var/snap/lxd/common/lxd/unix.socket ++ - lxd init --auto --network-address='[::]' --network-port=8443 --storage-backend=dir + - - sudo addgroup lxd || true - - sudo usermod -a -G lxd $USER || true - # Trigger generation of the client certificates - - sg lxd -c "echo y|lxc remote add "$USER" https://0.0.0.0:8443 --accept-certificate --password='${LXD_PASSWORD}'" ++ # Horrible workaround to LP Bug #1738614 ++ - sudo mkdir /var/snap/lxd/common/lxd/storage-pools/juju-zfs ++ - lxc storage create juju-zfs dir source=/var/snap/lxd/common/lxd/storage-pools/juju-zfs + +script: - - sudo -E sudo -u $USER -E juju bootstrap localhost test --config 'identity-url=https://api.staging.jujucharms.com/identity' --config 'allow-model-access=true' ++ - juju bootstrap localhost test --config 'identity-url=https://api.staging.jujucharms.com/identity' --config 'allow-model-access=true' + - tox -e py3,integration,serial diff --cc modules/libjuju/Makefile index bd59a97,0000000..38dcc11 mode 100644,000000..100644 --- a/modules/libjuju/Makefile +++ b/modules/libjuju/Makefile @@@ -1,40 -1,0 +1,46 @@@ +BIN := .tox/py3/bin +PY := $(BIN)/python +PIP := $(BIN)/pip +SCHEMAGEN := $(shell which schemagen) +VERSION=$(shell cat VERSION) + +clean: + find . -name __pycache__ -type d -exec rm -r {} + + find . -name *.pyc -delete + rm -rf .tox + rm -rf docs/_build/ + +.tox: + tox -r --notest + - client: ++client: .tox +ifndef SCHEMAGEN + $(error "schemagen is not available, please install from https://github.com/juju/schemagen") +endif + $(PY) -m juju.client.facade -s "juju/client/schemas*" -o juju/client/ + +test: + tox + ++.PHONY: lint ++lint: ++ tox -e lint --notest ++ +docs: .tox + $(PIP) install -r docs/requirements.txt + rm -rf docs/_build/ + $(BIN)/sphinx-build -b html docs/ docs/_build/ + cd docs/_build/ && zip -r docs.zip * + +release: + git fetch --tags - $(PY) setup.py sdist upload ++ rm dist/*.tar.gz ++ $(PY) setup.py sdist ++ $(BIN)/twine upload --repository-url https://upload.pypi.org/legacy/ dist/* + git tag ${VERSION} + git push --tags + +upload: release + + +.PHONY: clean client test docs upload release diff --cc modules/libjuju/VERSION index 2cc4a7a,0000000..1a96df1 mode 100644,000000..100644 --- a/modules/libjuju/VERSION +++ b/modules/libjuju/VERSION @@@ -1,5 -1,0 +1,1 @@@ - <<<<<<< HEAD - 0.7.3 - ======= - 0.9.1 - >>>>>>> 8a2d5bc35a302a970244b3c307a4f47deac0af63 ++0.11.3 diff --cc modules/libjuju/docs/changelog.rst index a4a4222,0000000..d5e13ba mode 100644,000000..100644 --- a/modules/libjuju/docs/changelog.rst +++ b/modules/libjuju/docs/changelog.rst @@@ -1,247 -1,0 +1,290 @@@ +Changelog +--------- + - <<<<<<< HEAD - ======= ++0.11.3 ++^^^^^^ ++Wednesday March 13 2019 ++ ++* k8s bundles no longer have application placement (#293) ++* Add retry for connection if all endpoints fail (#288) ++* Support generation of registration string for model sharing. (#279) ++* Add Twine for dist upload on release (#284) ++ ++ ++0.11.2 ++^^^^^^ ++Wednesday January 16 2019 ++ ++* update facade methods for Juju 2.5-rc2 (#281) ++* Add test case for redirect during connect (#275) ++* Implement App.get_resources and pinned resources in bundles (#278) ++ ++ ++0.11.1 ++^^^^^^ ++Thursday December 13 2018 ++ ++* Fix bundles with subordinates for Juju <2.5 (#277) ++ ++ ++0.11.0 ++^^^^^^ ++Tuesday December 11 2018 ++ ++* Updates for new Juju version (#274) ++* Fix wrong variable name in revoke_model function (#271) ++ ++ ++0.10.2 ++^^^^^^ ++Tuesday September 18 2018 ++ ++* set include_stats to false to reduce request time (#266) ++ ++ ++0.10.1 ++^^^^^^ ++Monday September 17 2018 ++ ++* Retry ssh in manual provision test (#265) ++* Clean up lint and add lint coverage to travis config (#263) ++* Increase the timeout for charmstore connections (#262) ++* Fix log level of `Driver connected to juju` message (#258) ++ ++ ++0.10.0 ++^^^^^^ ++Thursday August 16 2018 ++ ++* Fix error due to scp extra opts order (#260) ++* Implement set/get model constraints (#253) ++ ++ ++>>>>>>> b8a8281b1785358bd5632a119c016f21811172c6 +0.9.1 +^^^^^ +Monday July 16 2018 + +* Update websockets to 6.0 to fix OS X support due to Brew update to Py3.7 (#254) + + +0.9.0 +^^^^^ +Friday June 29 2018 + +* python3.7 compatibility updates (#251) +* Handle juju not installed in is_bootstrapped for tests (#250) +* Add app.reset_config(list). (#249) +* Implement model.get_action_status (#248) +* Fix `make client` in Python 3.6 (#247) + + +0.8.0 +^^^^^ +Thursday June 14 2018 + +* Add support for adding a manual (ssh) machine (#240) +* Backwards compatibility fixes (#213) +* Implement model.get_action_output (#242) +* Fix JSON serialization error for bundle with lxd to unit placement (#243) +* Fix reference in docs to connect_current (#239) +* Wrap machine agent status workaround in version check (#238) +* Convert seconds to nanoseconds for juju.unit.run (#237) +* Fix spurious intermittent failure in test_machines.py::test_status (#236) +* Define an unused juju-zfs lxd storage pool for Travis (#235) +* Add support for Application get_actions (#234) + + +0.7.5 +^^^^^ +Friday May 18 2018 + +* Surface errors from bundle plan (#233) +* Always send auth-tag even with macaroon auth (#217) +* Inline jsonfile credential when sending to controller (#231) + +0.7.4 +^^^^^ +Tuesday Apr 24 2018 + +* Always parse tags and spaces constraints to lists (#228) +* Doc index improvements (#211) +* Add doc req to force newer pymacaroons to fix RTD builds +* Fix dependency conflict for building docs + - >>>>>>> 8a2d5bc35a302a970244b3c307a4f47deac0af63 +0.7.3 +^^^^^ +Tuesday Feb 20 2018 + +* Full macaroon bakery support (#206) +* Fix regression with deploying local charm, add test case (#209) +* Expose a machines series (#208) +* Automated test runner fixes (#205) + +0.7.2 +^^^^^ +Friday Feb 9 2018 + +* Support deploying bundle YAML file directly (rather than just directory) (#202) + +0.7.1 +^^^^^ +Monday Dec 18 2017 + +* Fix missed renames of model_uuids (#197) + +0.7.0 +^^^^^ +Fri Dec 15 2017 + +* Fix race condition in adding relations (#192) +* Fix race condition in connection monitor test (#183) +* Fix example in README (#178) +* Fix rare hang during Unit.run (#177) +* Fix licensing quirks (#176) +* Refactor model handling (#171) +* Refactor users handling, add get_users (#170) +* Upload credential to controller when adding model (#168) +* Support 'applications' key in bundles (#165) +* Improve handling of thread error handling for loop.run() (#169) +* Fix encoding when using to_json() (#166) +* Fix intermittent test failures (#167) + +0.6.1 +^^^^^ +Fri Sept 29 2017 + +* Fix failure when controller supports newer facade version (#145) +* Fix test failures (#163) +* Fix SSH key handling when adding a new model (#161) +* Make Application.upgrade_charm upgrade resources (#158) +* Expand integration tests to use stable/edge versions of juju (#155) +* Move docs to ReadTheDocs (https://pythonlibjuju.readthedocs.io/en/latest/) - <<<<<<< HEAD - - 0.6.1 - ^^^^^ - Fri Sept 29 2017 - - * Fix failure when controller supports newer facade version (#145) - * Fix test failures (#163) - * Fix SSH key handling when adding a new model (#161) - * Make Application.upgrade_charm upgrade resources (#158) - * Expand integration tests to use stable/edge versions of juju (#155) - * Move docs to ReadTheDocs (https://pythonlibjuju.readthedocs.io/en/latest/) - ======= - >>>>>>> 8a2d5bc35a302a970244b3c307a4f47deac0af63 + +0.6.0 +^^^^^ +Thu June 29 2017 + +* Implement scp functionality (#149) +* Add Unit.public_address property (#153) +* Adds support for getting/setting config on a model (#152) + +0.5.3 +^^^^^ +Thu June 22 2017 + +* Improve handling of closed connections (#148) +* Configurable and larger max message size (#146) + +0.5.2 +^^^^^ +Wed June 14 2017 + +* Fix deploying non-stable channels and explicit revs (#144) + +0.5.1 +^^^^^ +Tue June 13 2017 + +* Update schema for Juju 2.3 alpha1 (#142) +* Improve API doc navigation and coverage (#141) +* Add type info to Model.add_machine docs (#138) + +0.5.0 +^^^^^ +Thu June 8 2017 + +* Add machine status properties (#133) +* Add model context manager (#128) +* Implement Application.upgrade_charm method (#132) + +0.4.3 +^^^^^ +Thu June 1 2017 + +* Accept new / unknown API fields gracefully (#131) +* Add support for new agent-version field in ModelInfo (#131) +* Replace pip with pip3 in install instructions (#129) +* Strip local:-prefix from local charm urls (#121) + +0.4.2 +^^^^^ +Wed May 10 2017 + +* Support (and prefer) per-controller macaroon files (#125) + +0.4.1 +^^^^^ +Wed Apr 27 2017 + +* Remove VERSION_MAP and rely on facade list from controller (#118) +* Refactor connection task management to avoid cancels (#117) +* Refactored login code to better handle redirects (#116) + +0.4.0 +^^^^^ +Wed Apr 19 2017 + +* Feature/api version support (#109) +* Expanding controller.py with basic user functions, get_models and + destroy (#89) +* Added Monitor class to Connection. (#105) +* Support placement lists (#103) +* Include resources from store when deploying (#102) +* Allow underscore to dash translation when accessing model + attributes (#101) +* Added controller to ssh fix. (#100) +* Regen schema to pick up missing APIs +* Improve error handling +* Fix issue where we do not check to make sure that we are receiving the + correct response. +* Retry calls to charmstore and increase timeout to 5s +* Make connect_model and deploy a bit more friendly +* Fix model name not including user +* Implement Model.get_status +* Add integration tests. + +0.3.0 +^^^^^ +Mon Feb 27 2017 + +* Fix docstrings for placement directives. +* Implement Model.add_machine() +* Bug fix - "to" parameter to Model.deploy() was broken +* Add docs and examples for adding machines and containers and deploying + charms to them. +* Make Machine.destroy() block the current coroutine, returning only after + the machine is actually removed from the remote model. This is more + consistent with the way the other apis work (e.g. Model.deploy(), + Application.add_unit(), etc). +* Raise NotImplementedError in all unimplemented method stubs instead of + silently passing. + +0.2.0 +^^^^^ +Thu Feb 16 2017 + +* Add default ssh key to newly created model. +* Add loop helpers and simplify examples/deploy.py +* Add support for deploying local charms, and bundles containing local charm paths. +* Add ability to get cloud name for controller. +* Bug fix - fix wrong api used in Model.destroy_unit() +* Add error detection in bundle deploy. + +0.1.2 +^^^^^ +Thu Dec 22 2016 + +* Bug fix - Include docs in package + +0.1.1 +^^^^^ +Thu Dec 22 2016 + +* Bug fix - Include VERSION file in package + +0.1.0 +^^^^^ +Wed Dec 21 2016 + +* Initial Release diff --cc modules/libjuju/juju/application.py index 84afebe,0000000..3f7f02e mode 100644,000000..100644 --- a/modules/libjuju/juju/application.py +++ b/modules/libjuju/juju/application.py @@@ -1,497 -1,0 +1,533 @@@ +# Copyright 2016 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import asyncio +import logging + +from . import model +from .client import client +from .errors import JujuError +from .placement import parse as parse_placement + +log = logging.getLogger(__name__) + + +class Application(model.ModelEntity): + @property + def _unit_match_pattern(self): + return r'^{}.*$'.format(self.entity_id) + + def on_unit_add(self, callable_): + """Add a "unit added" observer to this entity, which will be called + whenever a unit is added to this application. + + """ + self.model.add_observer( + callable_, 'unit', 'add', self._unit_match_pattern) + + def on_unit_remove(self, callable_): + """Add a "unit removed" observer to this entity, which will be called + whenever a unit is removed from this application. + + """ + self.model.add_observer( + callable_, 'unit', 'remove', self._unit_match_pattern) + + @property + def units(self): + return [ + unit for unit in self.model.units.values() + if unit.application == self.name + ] + + @property + def relations(self): + return [rel for rel in self.model.relations if rel.matches(self.name)] + + def related_applications(self, endpoint_name=None): + apps = {} + for rel in self.relations: + if rel.is_peer: + local_ep, remote_ep = rel.endpoints[0] + else: + def is_us(ep): + return ep.application.name == self.name + local_ep, remote_ep = sorted(rel.endpoints, key=is_us) + if endpoint_name is not None and endpoint_name != local_ep.name: + continue + apps[remote_ep.application.name] = remote_ep.application + return apps + + @property + def status(self): + """Get the application status, as set by the charm's leader. + + """ + return self.safe_data['status']['current'] + + @property + def status_message(self): + """Get the application status message, as set by the charm's leader. + + """ + return self.safe_data['status']['message'] + + @property + def tag(self): + return 'application-%s' % self.name + + async def add_relation(self, local_relation, remote_relation): + """Add a relation to another application. + + :param str local_relation: Name of relation on this application + :param str remote_relation: Name of relation on the other + application in the form '[:]' + + """ + if ':' not in local_relation: + local_relation = '{}:{}'.format(self.name, local_relation) + + return await self.model.add_relation(local_relation, remote_relation) + + async def add_unit(self, count=1, to=None): + """Add one or more units to this application. + + :param int count: Number of units to add + :param str to: Placement directive, e.g.:: + '23' - machine 23 + 'lxc:7' - new lxc container on machine 7 + '24/lxc/3' - lxc container 3 or machine 24 + + If None, a new machine is provisioned. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Adding %s unit%s to %s', + count, '' if count == 1 else 's', self.name) + + result = await app_facade.AddUnits( + application=self.name, + placement=parse_placement(to) if to else None, + num_units=count, + ) + + return await asyncio.gather(*[ + asyncio.ensure_future(self.model._wait_for_new('unit', unit_id)) + for unit_id in result.units + ]) + + add_units = add_unit + ++ async def scale(self, scale=None, scale_change=None): ++ """ ++ Set or adjust the scale of this (K8s) application. ++ ++ One or the other of scale or scale_change must be provided. ++ ++ :param int scale: Scale to which to set this application. ++ :param int scale_change: Amount by which to adjust the scale of this ++ application (can be positive or negative). ++ """ ++ app_facade = client.ApplicationFacade.from_connection(self.connection) ++ ++ if (scale, scale_change) == (None, None): ++ raise ValueError('Must provide either scale or scale_change') ++ ++ log.debug( ++ 'Scaling application %s %s %s', ++ self.name, 'to' if scale else 'by', scale or scale_change) ++ ++ await app_facade.ScaleApplications([ ++ client.ScaleApplicationParam(application_tag=self.tag, ++ scale=scale, ++ scale_change=scale_change) ++ ]) ++ + def allocate(self, budget, value): + """Allocate budget to this application. + + :param str budget: Name of budget + :param int value: Budget limit + + """ + raise NotImplementedError() + + def attach(self, resource_name, file_path): + """Upload a file as a resource for this application. + + :param str resource: Name of the resource + :param str file_path: Path to the file to upload + + """ + raise NotImplementedError() + + def collect_metrics(self): + """Collect metrics on this application. + + """ + raise NotImplementedError() + + async def destroy_relation(self, local_relation, remote_relation): + """Remove a relation to another application. + + :param str local_relation: Name of relation on this application + :param str remote_relation: Name of relation on the other + application in the form '[:]' + + """ + if ':' not in local_relation: + local_relation = '{}:{}'.format(self.name, local_relation) + + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Destroying relation %s <-> %s', local_relation, remote_relation) + + return await app_facade.DestroyRelation([ + local_relation, remote_relation]) + remove_relation = destroy_relation + + async def destroy_unit(self, *unit_names): + """Destroy units by name. + + """ + return await self.model.destroy_units(*unit_names) + destroy_units = destroy_unit + + async def destroy(self): + """Remove this application from the model. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Destroying %s', self.name) + + return await app_facade.Destroy(self.name) + remove = destroy + + async def expose(self): + """Make this application publicly available over the network. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Exposing %s', self.name) + + return await app_facade.Expose(self.name) + + async def get_config(self): + """Return the configuration settings dict for this application. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Getting config for %s', self.name) + + return (await app_facade.Get(self.name)).config + + async def get_constraints(self): + """Return the machine constraints dict for this application. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Getting constraints for %s', self.name) + + result = (await app_facade.Get(self.name)).constraints + return vars(result) if result else result + + async def get_actions(self, schema=False): + """Get actions defined for this application. + + :param bool schema: Return the full action schema + :return dict: The charms actions, empty dict if none are defined. + """ + actions = {} + entity = [{"tag": self.tag}] + action_facade = client.ActionFacade.from_connection(self.connection) + results = ( + await action_facade.ApplicationsCharmsActions(entity)).results + for result in results: + if result.application_tag == self.tag and result.actions: + actions = result.actions + break + if not schema: + actions = {k: v['description'] for k, v in actions.items()} + return actions + - def get_resources(self, details=False): ++ async def get_resources(self): + """Return resources for this application. + - :param bool details: Include detailed info about resources used by each - unit - ++ Returns a dict mapping resource name to ++ :class:`~juju._definitions.CharmResource` instances. + """ - raise NotImplementedError() ++ facade = client.ResourcesFacade.from_connection(self.connection) ++ response = await facade.ListResources([client.Entity(self.tag)]) ++ ++ resources = dict() ++ for result in response.results: ++ for resource in result.charm_store_resources or []: ++ resources[resource.name] = resource ++ for resource in result.resources or []: ++ if resource.charmresource: ++ resource = resource.charmresource ++ resources[resource.name] = resource ++ return resources + + async def run(self, command, timeout=None): + """Run command on all units for this application. + + :param str command: The command to run + :param int timeout: Time to wait before command is considered failed + + """ + action = client.ActionFacade.from_connection(self.connection) + + log.debug( + 'Running `%s` on all units of %s', command, self.name) + + # TODO this should return a list of Actions + return await action.Run( + [self.name], + command, + [], + timeout, + [], + ) + + async def set_annotations(self, annotations): + """Set annotations on this application. + + :param annotations map[string]string: the annotations as key/value + pairs. + + """ + log.debug('Updating annotations on application %s', self.name) + + self.ann_facade = client.AnnotationsFacade.from_connection( + self.connection) + + ann = client.EntityAnnotations( + entity=self.tag, + annotations=annotations, + ) + return await self.ann_facade.Set([ann]) + + async def set_config(self, config): + """Set configuration options for this application. + + :param config: Dict of configuration to set + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Setting config for %s: %s', self.name, config) + + return await app_facade.Set(self.name, config) + + async def reset_config(self, to_default): + """ + Restore application config to default values. + - :param list to_default: A list of config options to be reset to their default value. ++ :param list to_default: A list of config options to be reset to their ++ default value. + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Restoring default config for %s: %s', self.name, to_default) + + return await app_facade.Unset(self.name, to_default) + + async def set_constraints(self, constraints): + """Set machine constraints for this application. + + :param dict constraints: Dict of machine constraints + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Setting constraints for %s: %s', self.name, constraints) + + return await app_facade.SetConstraints(self.name, constraints) + + def set_meter_status(self, status, info=None): + """Set the meter status on this status. + + :param str status: Meter status, e.g. 'RED', 'AMBER' + :param str info: Extra info message + + """ + raise NotImplementedError() + + def set_plan(self, plan_name): + """Set the plan for this application, effective immediately. + + :param str plan_name: Name of plan + + """ + raise NotImplementedError() + + async def unexpose(self): + """Remove public availability over the network for this application. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Unexposing %s', self.name) + + return await app_facade.Unexpose(self.name) + + def update_allocation(self, allocation): + """Update existing allocation for this application. + + :param int allocation: The allocation to set + + """ + raise NotImplementedError() + + async def upgrade_charm( + self, channel=None, force_series=False, force_units=False, + path=None, resources=None, revision=None, switch=None): + """Upgrade the charm for this application. + + :param str channel: Channel to use when getting the charm from the + charm store, e.g. 'development' + :param bool force_series: Upgrade even if series of deployed + application is not supported by the new charm + :param bool force_units: Upgrade all units immediately, even if in + error state + :param str path: Uprade to a charm located at path + :param dict resources: Dictionary of resource name/filepath pairs + :param int revision: Explicit upgrade revision + :param str switch: Crossgrade charm url + + """ + # TODO: Support local upgrades + if path is not None: + raise NotImplementedError("path option is not implemented") + if resources is not None: + raise NotImplementedError("resources option is not implemented") + + if switch is not None and revision is not None: + raise ValueError("switch and revision are mutually exclusive") + + client_facade = client.ClientFacade.from_connection(self.connection) + resources_facade = client.ResourcesFacade.from_connection( + self.connection) + app_facade = client.ApplicationFacade.from_connection(self.connection) + + charmstore = self.model.charmstore + charmstore_entity = None + + if switch is not None: + charm_url = switch + if not charm_url.startswith('cs:'): + charm_url = 'cs:' + charm_url + else: + charm_url = self.data['charm-url'] + charm_url = charm_url.rpartition('-')[0] + if revision is not None: + charm_url = "%s-%d" % (charm_url, revision) + else: + charmstore_entity = await charmstore.entity(charm_url, + channel=channel) + charm_url = charmstore_entity['Id'] + + if charm_url == self.data['charm-url']: + raise JujuError('already running charm "%s"' % charm_url) + + # Update charm + await client_facade.AddCharm( + url=charm_url, + channel=channel + ) + + # Update resources + if not charmstore_entity: + charmstore_entity = await charmstore.entity(charm_url, + channel=channel) + store_resources = charmstore_entity['Meta']['resources'] + + request_data = [client.Entity(self.tag)] + response = await resources_facade.ListResources(request_data) + existing_resources = { + resource.name: resource + for resource in response.results[0].resources + } + + resources_to_update = [ + resource for resource in store_resources + if resource['Name'] not in existing_resources or + existing_resources[resource['Name']].origin != 'upload' + ] + + if resources_to_update: + request_data = [ + client.CharmResource( + description=resource.get('Description'), + fingerprint=resource['Fingerprint'], + name=resource['Name'], + path=resource['Path'], + revision=resource['Revision'], + size=resource['Size'], + type_=resource['Type'], + origin='store', + ) for resource in resources_to_update + ] + response = await resources_facade.AddPendingResources( + self.tag, + charm_url, + request_data + ) + pending_ids = response.pending_ids + resource_ids = { + resource['Name']: id + for resource, id in zip(resources_to_update, pending_ids) + } + else: + resource_ids = None + + # Update application + await app_facade.SetCharm( + application=self.entity_id, + channel=channel, + charm_url=charm_url, + config_settings=None, + config_settings_yaml=None, + force_series=force_series, + force_units=force_units, + resource_ids=resource_ids, + storage_constraints=None + ) + + await self.model.block_until( + lambda: self.data['charm-url'] == charm_url + ) + + async def get_metrics(self): + """Get metrics for this application's units. + + :return: Dictionary of unit_name:metrics + + """ + return await self.model.get_metrics(self.tag) diff --cc modules/libjuju/juju/client/_client.py index d959a56,0000000..bfa9e6f mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client.py +++ b/modules/libjuju/juju/client/_client.py @@@ -1,368 -1,0 +1,454 @@@ +# 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 import _client1, _client2, _client3, _client4, _client5 - from juju.client._definitions import * # noqa ++from juju.client._definitions import * ++ ++from juju.client import _client2, _client1, _client3, _client4, _client5, _client8, _client7, _client9 ++ + +CLIENTS = { - "1": _client1, + "2": _client2, ++ "1": _client1, + "3": _client3, + "4": _client4, - "5": _client5 ++ "5": _client5, ++ "8": _client8, ++ "7": _client7, ++ "9": _client9 +} + + +def lookup_facade(name, version): - """ - Given a facade name and version, attempt to pull that facade out - of the correct client.py file. - - """ - for _version in range(int(version), 0, -1): - try: - facade = getattr(CLIENTS[str(_version)], name) - return facade - except (KeyError, AttributeError): - continue - else: - raise ImportError("No supported version for facade: " - "{}".format(name)) ++ """ ++ Given a facade name and version, attempt to pull that facade out ++ of the correct client.py file. ++ ++ """ ++ for _version in range(int(version), 0, -1): ++ try: ++ facade = getattr(CLIENTS[str(_version)], name) ++ return facade ++ except (KeyError, AttributeError): ++ continue ++ else: ++ raise ImportError("No supported version for facade: " ++ "{}".format(name)) + + +class TypeFactory: + @classmethod + def from_connection(cls, connection): + """ + Given a connected Connection object, return an initialized and + connected instance of an API Interface matching the name of + this class. + + @param connection: initialized Connection object. + + """ + facade_name = cls.__name__ + if not facade_name.endswith('Facade'): + raise TypeError('Unexpected class name: {}'.format(facade_name)) + facade_name = facade_name[:-len('Facade')] + version = connection.facades.get(facade_name) + if version is None: - raise Exception('No facade {} in facades {}'.format(facade_name, connection.facades)) ++ raise Exception('No facade {} in facades {}'.format(facade_name, ++ connection.facades)) + + c = lookup_facade(cls.__name__, version) + c = c() + c.connect(connection) + + return c + + +class ActionFacade(TypeFactory): + pass + + ++class ActionPrunerFacade(TypeFactory): ++ pass ++ ++ +class AgentFacade(TypeFactory): + pass + + +class AgentToolsFacade(TypeFactory): + pass + + +class AllModelWatcherFacade(TypeFactory): + pass + + +class AllWatcherFacade(TypeFactory): + pass + + +class AnnotationsFacade(TypeFactory): + pass + + +class ApplicationFacade(TypeFactory): + pass + + ++class ApplicationOffersFacade(TypeFactory): ++ pass ++ ++ +class ApplicationRelationsWatcherFacade(TypeFactory): + pass + + +class ApplicationScalerFacade(TypeFactory): + pass + + +class BackupsFacade(TypeFactory): + pass + + +class BlockFacade(TypeFactory): + pass + + +class BundleFacade(TypeFactory): + pass + + ++class CAASAgentFacade(TypeFactory): ++ pass ++ ++ ++class CAASFirewallerFacade(TypeFactory): ++ pass ++ ++ ++class CAASOperatorFacade(TypeFactory): ++ pass ++ ++ ++class CAASOperatorProvisionerFacade(TypeFactory): ++ pass ++ ++ ++class CAASUnitProvisionerFacade(TypeFactory): ++ pass ++ ++ +class CharmRevisionUpdaterFacade(TypeFactory): + pass + + +class CharmsFacade(TypeFactory): + pass + + +class CleanerFacade(TypeFactory): + pass + + +class ClientFacade(TypeFactory): + pass + + +class CloudFacade(TypeFactory): + pass + + +class ControllerFacade(TypeFactory): + pass + + ++class CredentialManagerFacade(TypeFactory): ++ pass ++ ++ ++class CredentialValidatorFacade(TypeFactory): ++ pass ++ ++ ++class CrossControllerFacade(TypeFactory): ++ pass ++ ++ ++class CrossModelRelationsFacade(TypeFactory): ++ pass ++ ++ +class DeployerFacade(TypeFactory): + pass + + +class DiscoverSpacesFacade(TypeFactory): + pass + + +class DiskManagerFacade(TypeFactory): + pass + + +class EntityWatcherFacade(TypeFactory): + pass + + ++class ExternalControllerUpdaterFacade(TypeFactory): ++ pass ++ ++ ++class FanConfigurerFacade(TypeFactory): ++ pass ++ ++ +class FilesystemAttachmentsWatcherFacade(TypeFactory): + pass + + ++class FirewallRulesFacade(TypeFactory): ++ pass ++ ++ +class FirewallerFacade(TypeFactory): + pass + + +class HighAvailabilityFacade(TypeFactory): + pass + + +class HostKeyReporterFacade(TypeFactory): + pass + + +class ImageManagerFacade(TypeFactory): + pass + + +class ImageMetadataFacade(TypeFactory): + pass + + +class InstancePollerFacade(TypeFactory): + pass + + +class KeyManagerFacade(TypeFactory): + pass + + +class KeyUpdaterFacade(TypeFactory): + pass + + +class LeadershipServiceFacade(TypeFactory): + pass + + +class LifeFlagFacade(TypeFactory): + pass + + +class LogForwardingFacade(TypeFactory): + pass + + +class LoggerFacade(TypeFactory): + pass + + +class MachineActionsFacade(TypeFactory): + pass + + +class MachineManagerFacade(TypeFactory): + pass + + +class MachineUndertakerFacade(TypeFactory): + pass + + +class MachinerFacade(TypeFactory): + pass + + +class MeterStatusFacade(TypeFactory): + pass + + +class MetricsAdderFacade(TypeFactory): + pass + + +class MetricsDebugFacade(TypeFactory): + pass + + +class MetricsManagerFacade(TypeFactory): + pass + + +class MigrationFlagFacade(TypeFactory): + pass + + +class MigrationMasterFacade(TypeFactory): + pass + + +class MigrationMinionFacade(TypeFactory): + pass + + +class MigrationStatusWatcherFacade(TypeFactory): + pass + + +class MigrationTargetFacade(TypeFactory): + pass + + +class ModelConfigFacade(TypeFactory): + pass + + +class ModelManagerFacade(TypeFactory): + pass + + ++class ModelUpgraderFacade(TypeFactory): ++ pass ++ ++ +class NotifyWatcherFacade(TypeFactory): + pass + + ++class OfferStatusWatcherFacade(TypeFactory): ++ pass ++ ++ +class PayloadsFacade(TypeFactory): + pass + + +class PayloadsHookContextFacade(TypeFactory): + pass + + +class PingerFacade(TypeFactory): + pass + + +class ProvisionerFacade(TypeFactory): + pass + + +class ProxyUpdaterFacade(TypeFactory): + pass + + +class RebootFacade(TypeFactory): + pass + + ++class RelationStatusWatcherFacade(TypeFactory): ++ pass ++ ++ +class RelationUnitsWatcherFacade(TypeFactory): + pass + + +class RemoteApplicationWatcherFacade(TypeFactory): + pass + + ++class RemoteRelationsFacade(TypeFactory): ++ pass ++ ++ +class RemoteRelationsWatcherFacade(TypeFactory): + pass + + +class ResourcesFacade(TypeFactory): + pass + + +class ResourcesHookContextFacade(TypeFactory): + pass + + +class ResumerFacade(TypeFactory): + pass + + +class RetryStrategyFacade(TypeFactory): + pass + + +class SSHClientFacade(TypeFactory): + pass + + +class SingularFacade(TypeFactory): + pass + + +class SpacesFacade(TypeFactory): + pass + + +class StatusHistoryFacade(TypeFactory): + pass + + +class StorageFacade(TypeFactory): + pass + + +class StorageProvisionerFacade(TypeFactory): + pass + + +class StringsWatcherFacade(TypeFactory): + pass + + +class SubnetsFacade(TypeFactory): + pass + + +class UndertakerFacade(TypeFactory): + pass + + +class UnitAssignerFacade(TypeFactory): + pass + + +class UniterFacade(TypeFactory): + pass + + ++class UpgradeSeriesFacade(TypeFactory): ++ pass ++ ++ +class UpgraderFacade(TypeFactory): + pass + + +class UserManagerFacade(TypeFactory): + pass + + ++class VolumeAttachmentPlansWatcherFacade(TypeFactory): ++ pass ++ ++ +class VolumeAttachmentsWatcherFacade(TypeFactory): + pass diff --cc modules/libjuju/juju/client/_client1.py index e161973,0000000..83437bc mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client1.py +++ b/modules/libjuju/juju/client/_client1.py @@@ -1,6643 -1,0 +1,11068 @@@ +# 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._definitions import * +from juju.client.facade import ReturnMapping, Type + + ++class ActionPrunerFacade(Type): ++ name = 'ActionPruner' ++ version = 1 ++ schema = {'definitions': {'ActionPruneArgs': {'additionalProperties': False, ++ 'properties': {'max-history-mb': {'type': 'integer'}, ++ 'max-history-time': {'type': 'integer'}}, ++ 'required': ['max-history-time', ++ 'max-history-mb'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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'}}, ++ 'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'Prune': {'properties': {'Params': {'$ref': '#/definitions/ActionPruneArgs'}}, ++ 'type': 'object'}, ++ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ActionPruner', ++ request='ModelConfig', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Prune(self, max_history_mb, max_history_time): ++ ''' ++ max_history_mb : int ++ max_history_time : int ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ActionPruner', ++ request='Prune', ++ version=1, ++ params=_params) ++ _params['max-history-mb'] = max_history_mb ++ _params['max-history-time'] = max_history_time ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForModelConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ActionPruner', ++ request='WatchForModelConfigChanges', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class AgentToolsFacade(Type): + name = 'AgentTools' + version = 1 + schema = {'properties': {'UpdateToolsAvailable': {'type': 'object'}}, 'type': 'object'} - ++ + + @ReturnMapping(None) + async def UpdateToolsAvailable(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='AgentTools', request='UpdateToolsAvailable', version=1, params=_params) ++ msg = dict(type='AgentTools', ++ request='UpdateToolsAvailable', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class AllWatcherFacade(Type): + name = 'AllWatcher' + version = 1 + schema = {'definitions': {'AllWatcherNextResults': {'additionalProperties': False, + 'properties': {'deltas': {'items': {'$ref': '#/definitions/Delta'}, + 'type': 'array'}}, + 'required': ['deltas'], + 'type': 'object'}, + 'Delta': {'additionalProperties': False, + 'properties': {'entity': {'additionalProperties': True, + 'type': 'object'}, + 'removed': {'type': 'boolean'}}, + 'required': ['removed', 'entity'], + 'type': 'object'}}, + 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherNextResults'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(AllWatcherNextResults) + async def Next(self): + ''' + - Returns -> typing.Sequence<+T_co>[~Delta]<~Delta> ++ Returns -> typing.Sequence[~Delta] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='AllWatcher', request='Next', version=1, params=_params) ++ msg = dict(type='AllWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='AllWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='AllWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class ApplicationRelationsWatcherFacade(Type): + name = 'ApplicationRelationsWatcher' + version = 1 + schema = {'definitions': {'ApplicationRelationsChange': {'additionalProperties': False, + 'properties': {'changed': {'items': {'$ref': '#/definitions/RelationChange'}, + 'type': 'array'}, + 'removed': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ApplicationRelationsWatchResult': {'additionalProperties': False, + 'properties': {'ApplicationRelationsWatcherId': {'type': 'string'}, + 'changes': {'$ref': '#/definitions/ApplicationRelationsChange'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['ApplicationRelationsWatcherId'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'RelationChange': {'additionalProperties': False, + 'properties': {'changedunits': {'patternProperties': {'.*': {'$ref': '#/definitions/RelationUnitChange'}}, + 'type': 'object'}, + 'departedunits': {'items': {'type': 'string'}, + 'type': 'array'}, + 'id': {'type': 'integer'}, + 'life': {'type': 'string'}}, + 'required': ['id', 'life'], + 'type': 'object'}, + 'RelationUnitChange': {'additionalProperties': False, + 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'type': 'object'}}, + 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/ApplicationRelationsWatchResult'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(ApplicationRelationsWatchResult) + async def Next(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('ApplicationRelationsChange'), _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ApplicationRelationsWatcher', request='Next', version=1, params=_params) ++ msg = dict(type='ApplicationRelationsWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ApplicationRelationsWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='ApplicationRelationsWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class ApplicationScalerFacade(Type): + name = 'ApplicationScaler' + version = 1 + 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, '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'}}, + 'properties': {'Rescale': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Watch': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(ErrorResults) + async def Rescale(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ApplicationScaler', request='Rescale', version=1, params=_params) ++ msg = dict(type='ApplicationScaler', ++ request='Rescale', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResult) + async def Watch(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ApplicationScaler', request='Watch', version=1, params=_params) ++ msg = dict(type='ApplicationScaler', ++ request='Watch', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class BackupsFacade(Type): + name = 'Backups' + version = 1 + schema = {'definitions': {'BackupsCreateArgs': {'additionalProperties': False, + 'properties': {'notes': {'type': 'string'}}, + 'required': ['notes'], + 'type': 'object'}, + 'BackupsInfoArgs': {'additionalProperties': False, + 'properties': {'id': {'type': 'string'}}, + 'required': ['id'], + 'type': 'object'}, + 'BackupsListArgs': {'additionalProperties': False, + 'type': 'object'}, + 'BackupsListResult': {'additionalProperties': False, + 'properties': {'list': {'items': {'$ref': '#/definitions/BackupsMetadataResult'}, + 'type': 'array'}}, + 'required': ['list'], + 'type': 'object'}, + 'BackupsMetadataResult': {'additionalProperties': False, + 'properties': {'ca-cert': {'type': 'string'}, + 'ca-private-key': {'type': 'string'}, + 'checksum': {'type': 'string'}, + 'checksum-format': {'type': 'string'}, + 'finished': {'format': 'date-time', + 'type': 'string'}, + 'hostname': {'type': 'string'}, + 'id': {'type': 'string'}, + 'machine': {'type': 'string'}, + 'model': {'type': 'string'}, + 'notes': {'type': 'string'}, + 'series': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'started': {'format': 'date-time', + 'type': 'string'}, + 'stored': {'format': 'date-time', + 'type': 'string'}, + 'version': {'$ref': '#/definitions/Number'}}, + 'required': ['id', + 'checksum', + 'checksum-format', + 'size', + 'stored', + 'started', + 'finished', + 'notes', + 'model', + 'machine', + 'hostname', + 'version', + 'series', + 'ca-cert', + 'ca-private-key'], + 'type': 'object'}, + 'BackupsRemoveArgs': {'additionalProperties': False, + 'properties': {'id': {'type': 'string'}}, + 'required': ['id'], + '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'}, + 'RestoreArgs': {'additionalProperties': False, + 'properties': {'backup-id': {'type': 'string'}}, + 'required': ['backup-id'], + 'type': 'object'}}, + 'properties': {'Create': {'properties': {'Params': {'$ref': '#/definitions/BackupsCreateArgs'}, + 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}}, + 'type': 'object'}, + 'FinishRestore': {'type': 'object'}, + 'Info': {'properties': {'Params': {'$ref': '#/definitions/BackupsInfoArgs'}, + 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}}, + 'type': 'object'}, + 'List': {'properties': {'Params': {'$ref': '#/definitions/BackupsListArgs'}, + 'Result': {'$ref': '#/definitions/BackupsListResult'}}, + 'type': 'object'}, + 'PrepareRestore': {'type': 'object'}, + 'Remove': {'properties': {'Params': {'$ref': '#/definitions/BackupsRemoveArgs'}}, + 'type': 'object'}, + 'Restore': {'properties': {'Params': {'$ref': '#/definitions/RestoreArgs'}}, + 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(BackupsMetadataResult) + async def Create(self, notes): + ''' + notes : str + Returns -> typing.Union[str, int, _ForwardRef('Number')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='Create', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='Create', ++ version=1, ++ params=_params) + _params['notes'] = notes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def FinishRestore(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='FinishRestore', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='FinishRestore', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BackupsMetadataResult) + async def Info(self, id_): + ''' + id_ : str + Returns -> typing.Union[str, int, _ForwardRef('Number')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='Info', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='Info', ++ version=1, ++ params=_params) + _params['id'] = id_ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BackupsListResult) + async def List(self): + ''' + - Returns -> typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult> ++ Returns -> typing.Sequence[~BackupsMetadataResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='List', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='List', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def PrepareRestore(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='PrepareRestore', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='PrepareRestore', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Remove(self, id_): + ''' + id_ : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='Remove', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='Remove', ++ version=1, ++ params=_params) + _params['id'] = id_ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Restore(self, backup_id): + ''' + backup_id : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Backups', request='Restore', version=1, params=_params) ++ msg = dict(type='Backups', ++ request='Restore', ++ version=1, ++ params=_params) + _params['backup-id'] = backup_id + reply = await self.rpc(msg) + return reply + + + +class BundleFacade(Type): + name = 'Bundle' + version = 1 + schema = {'definitions': {'BundleChange': {'additionalProperties': False, + 'properties': {'args': {'items': {'additionalProperties': True, + 'type': 'object'}, + 'type': 'array'}, + 'id': {'type': 'string'}, + 'method': {'type': 'string'}, + 'requires': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['id', + 'method', + 'args', + 'requires'], + 'type': 'object'}, + 'BundleChangesParams': {'additionalProperties': False, + 'properties': {'yaml': {'type': 'string'}}, + 'required': ['yaml'], + 'type': 'object'}, + 'BundleChangesResults': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'}, + 'type': 'array'}, + 'errors': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}}, + 'properties': {'GetChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'}, + 'Result': {'$ref': '#/definitions/BundleChangesResults'}}, + 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(BundleChangesResults) + async def GetChanges(self, yaml): + ''' + yaml : str - Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange> ++ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Bundle', request='GetChanges', version=1, params=_params) ++ msg = dict(type='Bundle', ++ request='GetChanges', ++ version=1, ++ params=_params) + _params['yaml'] = yaml + reply = await self.rpc(msg) + return reply + + + - class ClientFacade(Type): - name = 'Client' ++class CAASAgentFacade(Type): ++ name = 'CAASAgent' + version = 1 - schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, - 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, - 'type': 'array'}, - 'type': 'array'}}, - 'required': ['servers'], - 'type': 'object'}, - 'AddCharm': {'additionalProperties': False, - 'properties': {'channel': {'type': 'string'}, - 'url': {'type': 'string'}}, - 'required': ['url', 'channel'], - 'type': 'object'}, - 'AddCharmWithAuthorization': {'additionalProperties': False, - 'properties': {'channel': {'type': 'string'}, - 'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'url': {'type': 'string'}}, - 'required': ['url', - 'channel', - 'macaroon'], - 'type': 'object'}, - 'AddMachineParams': {'additionalProperties': False, - 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, - 'type': 'array'}, - 'constraints': {'$ref': '#/definitions/Value'}, - 'container-type': {'type': 'string'}, - 'disks': {'items': {'$ref': '#/definitions/Constraints'}, - 'type': 'array'}, - 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, - 'instance-id': {'type': 'string'}, - 'jobs': {'items': {'type': 'string'}, - 'type': 'array'}, - 'nonce': {'type': 'string'}, - 'parent-id': {'type': 'string'}, - 'placement': {'$ref': '#/definitions/Placement'}, - 'series': {'type': 'string'}}, - 'required': ['series', - 'constraints', - 'jobs', - 'parent-id', - 'container-type', - 'instance-id', - 'nonce', - 'hardware-characteristics', - 'addresses'], - 'type': 'object'}, - 'AddMachines': {'additionalProperties': False, - 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, - 'type': 'array'}}, - 'required': ['params'], - 'type': 'object'}, - 'AddMachinesResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'machine': {'type': 'string'}}, - 'required': ['machine'], - 'type': 'object'}, - 'AddMachinesResults': {'additionalProperties': False, - 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, - 'type': 'array'}}, - 'required': ['machines'], - 'type': 'object'}, - 'Address': {'additionalProperties': False, - 'properties': {'scope': {'type': 'string'}, - 'space-name': {'type': 'string'}, - 'type': {'type': 'string'}, - 'value': {'type': 'string'}}, - 'required': ['value', 'type', 'scope'], - 'type': 'object'}, - 'AgentVersionResult': {'additionalProperties': False, - 'properties': {'version': {'$ref': '#/definitions/Number'}}, - 'required': ['version'], - 'type': 'object'}, - 'AllWatcherId': {'additionalProperties': False, - 'properties': {'watcher-id': {'type': 'string'}}, - 'required': ['watcher-id'], - 'type': 'object'}, - 'ApplicationStatus': {'additionalProperties': False, - 'properties': {'can-upgrade-to': {'type': 'string'}, - 'charm': {'type': 'string'}, - 'err': {'additionalProperties': True, ++ schema = {'definitions': {'CloudCredential': {'additionalProperties': False, ++ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, - 'exposed': {'type': 'boolean'}, - 'life': {'type': 'string'}, - 'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}}, - 'type': 'object'}, - 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'series': {'type': 'string'}, - 'status': {'$ref': '#/definitions/DetailedStatus'}, - 'subordinate-to': {'items': {'type': 'string'}, - 'type': 'array'}, - 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, - 'type': 'object'}, - 'workload-version': {'type': 'string'}}, - 'required': ['charm', - 'series', - 'exposed', - 'life', - 'relations', - 'can-upgrade-to', - 'subordinate-to', - 'units', - 'meter-statuses', - 'status', - 'workload-version'], - 'type': 'object'}, - 'Binary': {'additionalProperties': False, - 'properties': {'Arch': {'type': 'string'}, - 'Number': {'$ref': '#/definitions/Number'}, - 'Series': {'type': 'string'}}, - 'required': ['Number', 'Series', 'Arch'], ++ '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'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ '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'}, ++ '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'}, - 'BundleChange': {'additionalProperties': False, - 'properties': {'args': {'items': {'additionalProperties': True, - 'type': 'object'}, - 'type': 'array'}, - 'id': {'type': 'string'}, - 'method': {'type': 'string'}, - 'requires': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['id', - 'method', - 'args', - 'requires'], - 'type': 'object'}, - 'BundleChangesParams': {'additionalProperties': False, - 'properties': {'yaml': {'type': 'string'}}, - 'required': ['yaml'], - 'type': 'object'}, - 'BundleChangesResults': {'additionalProperties': False, - 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'}, - 'type': 'array'}, - 'errors': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'BytesResult': {'additionalProperties': False, - 'properties': {'result': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['result'], ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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'}}, ++ 'properties': {'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, ++ 'type': 'object'}, ++ 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, + 'type': 'object'}, - 'ConfigValue': {'additionalProperties': False, - 'properties': {'source': {'type': 'string'}, - 'value': {'additionalProperties': True, - 'type': 'object'}}, - 'required': ['value', 'source'], - 'type': 'object'}, - 'Constraints': {'additionalProperties': False, - 'properties': {'Count': {'type': 'integer'}, - 'Pool': {'type': 'string'}, - 'Size': {'type': 'integer'}}, - 'required': ['Pool', 'Size', 'Count'], ++ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(CloudSpecResults) ++ async def CloudSpec(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASAgent', ++ request='CloudSpec', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResult) ++ async def GetCloudSpec(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASAgent', ++ request='GetCloudSpec', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASAgent', ++ request='ModelConfig', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForModelConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASAgent', ++ request='WatchForModelConfigChanges', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CAASFirewallerFacade(Type): ++ name = 'CAASFirewaller' ++ version = 1 ++ schema = {'definitions': {'ApplicationGetConfigResults': {'additionalProperties': False, ++ 'properties': {'Results': {'items': {'$ref': '#/definitions/ConfigResult'}, ++ 'type': 'array'}}, ++ 'required': ['Results'], ++ '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'}, - 'DestroyMachines': {'additionalProperties': False, - 'properties': {'force': {'type': 'boolean'}, - 'machine-names': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['machine-names', 'force'], - 'type': 'object'}, - 'DetailedStatus': {'additionalProperties': False, - 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'ConfigResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, - 'err': {'additionalProperties': True, - 'type': 'object'}, - 'info': {'type': 'string'}, - 'kind': {'type': 'string'}, - 'life': {'type': 'string'}, - 'since': {'format': 'date-time', - 'type': 'string'}, - 'status': {'type': 'string'}, - 'version': {'type': 'string'}}, - 'required': ['status', - 'info', - 'data', - 'since', - 'kind', - 'version', - 'life'], - 'type': 'object'}, - 'EndpointStatus': {'additionalProperties': False, - 'properties': {'application': {'type': 'string'}, - 'name': {'type': 'string'}, - 'role': {'type': 'string'}, - 'subordinate': {'type': 'boolean'}}, - 'required': ['application', - 'name', - 'role', - 'subordinate'], - 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ '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'}, - '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, - 'FindToolsParams': {'additionalProperties': False, - 'properties': {'arch': {'type': 'string'}, - 'major': {'type': 'integer'}, - 'minor': {'type': 'integer'}, - 'number': {'$ref': '#/definitions/Number'}, - 'series': {'type': 'string'}}, - 'required': ['number', - 'major', - 'minor', - 'arch', - 'series'], - 'type': 'object'}, - 'FindToolsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'list': {'items': {'$ref': '#/definitions/Tools'}, - 'type': 'array'}}, - 'required': ['list'], - 'type': 'object'}, - 'FullStatus': {'additionalProperties': False, - 'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}}, - 'type': 'object'}, - 'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, - 'type': 'object'}, - 'model': {'$ref': '#/definitions/ModelStatusInfo'}, - 'relations': {'items': {'$ref': '#/definitions/RelationStatus'}, - 'type': 'array'}, - 'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}}, - 'type': 'object'}}, - 'required': ['model', - 'machines', - 'applications', - 'remote-applications', - 'relations'], ++ 'LifeResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['life'], + 'type': 'object'}, - 'GetConstraintsResults': {'additionalProperties': False, - 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, - 'required': ['constraints'], - 'type': 'object'}, - 'HardwareCharacteristics': {'additionalProperties': False, - 'properties': {'arch': {'type': 'string'}, - 'availability-zone': {'type': 'string'}, - 'cpu-cores': {'type': 'integer'}, - 'cpu-power': {'type': 'integer'}, - 'mem': {'type': 'integer'}, - 'root-disk': {'type': 'integer'}, - 'tags': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'History': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'}, - 'type': 'array'}}, - 'required': ['statuses'], - 'type': 'object'}, - 'HostPort': {'additionalProperties': False, - 'properties': {'Address': {'$ref': '#/definitions/Address'}, - 'port': {'type': 'integer'}}, - 'required': ['Address', 'port'], - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'MachineHardware': {'additionalProperties': False, - 'properties': {'arch': {'type': 'string'}, - 'availability-zone': {'type': 'string'}, - 'cores': {'type': 'integer'}, - 'cpu-power': {'type': 'integer'}, - 'mem': {'type': 'integer'}, - 'root-disk': {'type': 'integer'}, - 'tags': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'MachineStatus': {'additionalProperties': False, - 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'}, - 'constraints': {'type': 'string'}, - 'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, - 'type': 'object'}, - 'dns-name': {'type': 'string'}, - 'hardware': {'type': 'string'}, - 'has-vote': {'type': 'boolean'}, - 'id': {'type': 'string'}, - 'instance-id': {'type': 'string'}, - 'instance-status': {'$ref': '#/definitions/DetailedStatus'}, - 'ip-addresses': {'items': {'type': 'string'}, - 'type': 'array'}, - 'jobs': {'items': {'type': 'string'}, - 'type': 'array'}, - 'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}}, - 'type': 'object'}, - 'series': {'type': 'string'}, - 'wants-vote': {'type': 'boolean'}}, - 'required': ['agent-status', - 'instance-status', - 'dns-name', - 'instance-id', - 'series', - 'id', - 'containers', - 'constraints', - 'hardware', - 'jobs', - 'has-vote', - 'wants-vote'], - 'type': 'object'}, - 'MeterStatus': {'additionalProperties': False, - 'properties': {'color': {'type': 'string'}, - 'message': {'type': 'string'}}, - 'required': ['color', 'message'], ++ 'LifeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], + 'type': 'object'}, - 'ModelConfigResults': {'additionalProperties': False, - 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, - 'type': 'object'}}, - 'required': ['config'], ++ 'Macaroon': {'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'}, - 'ModelInfo': {'additionalProperties': False, - 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, - 'cloud-credential-tag': {'type': 'string'}, - 'cloud-region': {'type': 'string'}, - 'cloud-tag': {'type': 'string'}, - 'controller-uuid': {'type': 'string'}, - 'default-series': {'type': 'string'}, - 'life': {'type': 'string'}, - 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, - 'type': 'array'}, - 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, - 'name': {'type': 'string'}, - 'owner-tag': {'type': 'string'}, - 'provider-type': {'type': 'string'}, - 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, - 'status': {'$ref': '#/definitions/EntityStatus'}, - 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, - 'type': 'array'}, - 'uuid': {'type': 'string'}}, - 'required': ['name', - 'uuid', - 'controller-uuid', - 'cloud-tag', - 'owner-tag', - 'life', - 'users', - 'machines', - 'sla', - 'agent-version'], - 'type': 'object'}, - 'ModelMachineInfo': {'additionalProperties': False, - 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, - 'has-vote': {'type': 'boolean'}, - 'id': {'type': 'string'}, - 'instance-id': {'type': 'string'}, - 'status': {'type': 'string'}, - 'wants-vote': {'type': 'boolean'}}, - 'required': ['id'], ++ 'StringsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id'], ++ 'type': 'object'}}, ++ 'properties': {'ApplicationsConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetConfigResults'}}, ++ 'type': 'object'}, ++ 'IsExposed': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/BoolResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ApplicationGetConfigResults) ++ async def ApplicationsConfig(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASFirewaller', ++ request='ApplicationsConfig', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BoolResults) ++ async def IsExposed(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASFirewaller', ++ request='IsExposed', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASFirewaller', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASFirewaller', ++ request='Watch', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchApplications(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASFirewaller', ++ request='WatchApplications', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CAASOperatorFacade(Type): ++ name = 'CAASOperator' ++ version = 1 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'ApplicationCharm': {'additionalProperties': False, ++ 'properties': {'charm-modified-version': {'type': 'integer'}, ++ 'force-upgrade': {'type': 'boolean'}, ++ 'sha256': {'type': 'string'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', ++ 'sha256', ++ 'charm-modified-version'], + 'type': 'object'}, - 'ModelMigrationStatus': {'additionalProperties': False, - 'properties': {'end': {'format': 'date-time', - 'type': 'string'}, - 'start': {'format': 'date-time', - 'type': 'string'}, - 'status': {'type': 'string'}}, - 'required': ['status', 'start'], - 'type': 'object'}, - 'ModelSLA': {'additionalProperties': False, - 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, - 'creds': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['ModelSLAInfo', 'creds'], ++ 'ApplicationCharmResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ApplicationCharm'}}, ++ 'type': 'object'}, ++ 'ApplicationCharmResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationCharmResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Binary': {'additionalProperties': False, ++ 'properties': {'Arch': {'type': 'string'}, ++ 'Number': {'$ref': '#/definitions/Number'}, ++ 'Series': {'type': 'string'}}, ++ 'required': ['Number', 'Series', 'Arch'], ++ 'type': 'object'}, ++ 'Entities': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], + 'type': 'object'}, - 'ModelSLAInfo': {'additionalProperties': False, - 'properties': {'level': {'type': 'string'}, - 'owner': {'type': 'string'}}, - 'required': ['level', 'owner'], ++ 'EntitiesVersion': {'additionalProperties': False, ++ 'properties': {'agent-tools': {'items': {'$ref': '#/definitions/EntityVersion'}, ++ 'type': 'array'}}, ++ 'required': ['agent-tools'], ++ 'type': 'object'}, ++ 'Entity': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ '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'}, ++ 'EntityString': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['tag', 'value'], + 'type': 'object'}, - 'ModelSet': {'additionalProperties': False, - 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}}, - 'required': ['config'], ++ 'EntityVersion': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}, ++ 'tools': {'$ref': '#/definitions/Version'}}, ++ 'required': ['tag', 'tools'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], + 'type': 'object'}, - 'ModelStatusInfo': {'additionalProperties': False, - 'properties': {'available-version': {'type': 'string'}, - 'cloud-tag': {'type': 'string'}, - 'meter-status': {'$ref': '#/definitions/MeterStatus'}, - 'model-status': {'$ref': '#/definitions/DetailedStatus'}, - 'name': {'type': 'string'}, - 'region': {'type': 'string'}, - 'sla': {'type': 'string'}, - 'version': {'type': 'string'}}, - 'required': ['name', - 'cloud-tag', - 'version', - 'available-version', - 'model-status', - 'meter-status', - 'sla'], - 'type': 'object'}, - 'ModelUnset': {'additionalProperties': False, - 'properties': {'keys': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['keys'], ++ 'LifeResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['life'], + 'type': 'object'}, - 'ModelUserInfo': {'additionalProperties': False, - 'properties': {'access': {'type': 'string'}, - 'display-name': {'type': 'string'}, - 'last-connection': {'format': 'date-time', - 'type': 'string'}, - 'user': {'type': 'string'}}, - 'required': ['user', - 'display-name', - 'last-connection', - 'access'], - 'type': 'object'}, - 'ModelUserInfoResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'$ref': '#/definitions/ModelUserInfo'}}, - 'type': 'object'}, - 'ModelUserInfoResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ModelUserInfoResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'NetworkInterface': {'additionalProperties': False, - 'properties': {'dns-nameservers': {'items': {'type': 'string'}, - 'type': 'array'}, - 'gateway': {'type': 'string'}, - 'ip-addresses': {'items': {'type': 'string'}, - 'type': 'array'}, - 'is-up': {'type': 'boolean'}, - 'mac-address': {'type': 'string'}, - 'space': {'type': 'string'}}, - 'required': ['ip-addresses', - 'mac-address', - 'is-up'], - 'type': 'object'}, ++ 'LifeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', 'uuid', 'type'], ++ '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'}, + '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'}, - 'Placement': {'additionalProperties': False, - 'properties': {'directive': {'type': 'string'}, - 'scope': {'type': 'string'}}, - 'required': ['scope', 'directive'], ++ 'SetPodSpecParams': {'additionalProperties': False, ++ 'properties': {'specs': {'items': {'$ref': '#/definitions/EntityString'}, ++ 'type': 'array'}}, ++ 'required': ['specs'], ++ 'type': 'object'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], + 'type': 'object'}, - 'PrivateAddress': {'additionalProperties': False, - 'properties': {'target': {'type': 'string'}}, - 'required': ['target'], - 'type': 'object'}, - 'PrivateAddressResults': {'additionalProperties': False, - 'properties': {'private-address': {'type': 'string'}}, - 'required': ['private-address'], - 'type': 'object'}, - 'ProvisioningScriptParams': {'additionalProperties': False, - 'properties': {'data-dir': {'type': 'string'}, - 'disable-package-commands': {'type': 'boolean'}, - 'machine-id': {'type': 'string'}, - 'nonce': {'type': 'string'}}, - 'required': ['machine-id', - 'nonce', - 'data-dir', - 'disable-package-commands'], - 'type': 'object'}, - 'ProvisioningScriptResult': {'additionalProperties': False, - 'properties': {'script': {'type': 'string'}}, - 'required': ['script'], - 'type': 'object'}, - 'PublicAddress': {'additionalProperties': False, - 'properties': {'target': {'type': 'string'}}, - 'required': ['target'], ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, + 'type': 'object'}, - 'PublicAddressResults': {'additionalProperties': False, - 'properties': {'public-address': {'type': 'string'}}, - 'required': ['public-address'], - 'type': 'object'}, - 'RelationStatus': {'additionalProperties': False, - 'properties': {'endpoints': {'items': {'$ref': '#/definitions/EndpointStatus'}, - 'type': 'array'}, - 'id': {'type': 'integer'}, - 'interface': {'type': 'string'}, - 'key': {'type': 'string'}, - 'scope': {'type': 'string'}}, - 'required': ['id', - 'key', - 'interface', - 'scope', - 'endpoints'], - 'type': 'object'}, - 'RemoteApplicationStatus': {'additionalProperties': False, - 'properties': {'application-name': {'type': 'string'}, - 'application-url': {'type': 'string'}, - 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, - 'type': 'array'}, - 'err': {'additionalProperties': True, - 'type': 'object'}, - 'life': {'type': 'string'}, - 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'status': {'$ref': '#/definitions/DetailedStatus'}}, - 'required': ['application-url', - 'application-name', - 'endpoints', - 'life', - 'relations', - 'status'], - 'type': 'object'}, - 'RemoteEndpoint': {'additionalProperties': False, - 'properties': {'interface': {'type': 'string'}, - 'limit': {'type': 'integer'}, - 'name': {'type': 'string'}, - 'role': {'type': 'string'}, - 'scope': {'type': 'string'}}, - 'required': ['name', - 'role', - 'interface', - 'limit', - 'scope'], - 'type': 'object'}, - 'ResolveCharmResult': {'additionalProperties': False, - 'properties': {'error': {'type': 'string'}, - 'url': {'type': 'string'}}, ++ 'StringsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id'], + 'type': 'object'}, - 'ResolveCharmResults': {'additionalProperties': False, - 'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'}, - 'type': 'array'}}, - 'required': ['urls'], ++ 'StringsWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], + 'type': 'object'}, - 'ResolveCharms': {'additionalProperties': False, - 'properties': {'references': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['references'], - 'type': 'object'}, - 'Resolved': {'additionalProperties': False, - 'properties': {'retry': {'type': 'boolean'}, - 'unit-name': {'type': 'string'}}, - 'required': ['unit-name', 'retry'], ++ 'Version': {'additionalProperties': False, ++ 'properties': {'version': {'$ref': '#/definitions/Binary'}}, ++ 'required': ['version'], ++ 'type': 'object'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'Charm': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationCharmResults'}}, ++ 'type': 'object'}, ++ 'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, - 'SetConstraints': {'additionalProperties': False, - 'properties': {'application': {'type': 'string'}, - 'constraints': {'$ref': '#/definitions/Value'}}, - 'required': ['application', 'constraints'], - 'type': 'object'}, - 'SetModelAgentVersion': {'additionalProperties': False, - 'properties': {'version': {'$ref': '#/definitions/Number'}}, - 'required': ['version'], - 'type': 'object'}, - 'StatusHistoryFilter': {'additionalProperties': False, - 'properties': {'date': {'format': 'date-time', - 'type': 'string'}, - 'delta': {'type': 'integer'}, - 'exclude': {'items': {'type': 'string'}, - 'type': 'array'}, - 'size': {'type': 'integer'}}, - 'required': ['size', - 'date', - 'delta', - 'exclude'], - 'type': 'object'}, - 'StatusHistoryRequest': {'additionalProperties': False, - 'properties': {'filter': {'$ref': '#/definitions/StatusHistoryFilter'}, - 'historyKind': {'type': 'string'}, - 'size': {'type': 'integer'}, - 'tag': {'type': 'string'}}, - 'required': ['historyKind', - 'size', - 'filter', - 'tag'], - 'type': 'object'}, - 'StatusHistoryRequests': {'additionalProperties': False, - 'properties': {'requests': {'items': {'$ref': '#/definitions/StatusHistoryRequest'}, - 'type': 'array'}}, - 'required': ['requests'], ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetPodSpec': {'properties': {'Params': {'$ref': '#/definitions/SetPodSpecParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetTools': {'properties': {'Params': {'$ref': '#/definitions/EntitiesVersion'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='APIAddresses', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='APIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationCharmResults) ++ async def Charm(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationCharmResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='Charm', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelResult) ++ async def CurrentModel(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='CurrentModel', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='ModelUUID', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='Remove', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetPodSpec(self, specs): ++ ''' ++ specs : typing.Sequence[~EntityString] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='SetPodSpec', ++ version=1, ++ params=_params) ++ _params['specs'] = specs ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='SetStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetTools(self, agent_tools): ++ ''' ++ agent_tools : typing.Sequence[~EntityVersion] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='SetTools', ++ version=1, ++ params=_params) ++ _params['agent-tools'] = agent_tools ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='Watch', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='WatchAPIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnits(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperator', ++ request='WatchUnits', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CAASOperatorProvisionerFacade(Type): ++ name = 'CAASOperatorProvisioner' ++ version = 1 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ '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'}, ++ 'EntityPassword': {'additionalProperties': False, ++ 'properties': {'password': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'password'], ++ 'type': 'object'}, ++ 'EntityPasswords': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ 'type': 'object'}, ++ 'KubernetesFilesystemAttachmentParams': {'additionalProperties': False, ++ 'properties': {'mount-point': {'type': 'string'}, ++ 'provider': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'required': ['provider'], ++ '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'}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ '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'}, ++ 'OperatorProvisioningInfo': {'additionalProperties': False, ++ 'properties': {'api-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'charm-storage': {'$ref': '#/definitions/KubernetesFilesystemParams'}, ++ 'image-path': {'type': 'string'}, ++ 'tags': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['image-path', ++ 'version', ++ 'api-addresses', ++ 'charm-storage'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ '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'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'OperatorProvisioningInfo': {'properties': {'Result': {'$ref': '#/definitions/OperatorProvisioningInfo'}}, ++ 'type': 'object'}, ++ 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='APIAddresses', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='APIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='ModelUUID', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(OperatorProvisioningInfo) ++ async def OperatorProvisioningInfo(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('KubernetesFilesystemParams'), str, typing.Mapping[str, str], _ForwardRef('Number')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='OperatorProvisioningInfo', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetPasswords(self, changes): ++ ''' ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='SetPasswords', ++ version=1, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='WatchAPIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchApplications(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASOperatorProvisioner', ++ request='WatchApplications', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CAASUnitProvisionerFacade(Type): ++ name = 'CAASUnitProvisioner' ++ version = 1 ++ schema = {'definitions': {'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'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'}, ++ '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'}, ++ 'status': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['provider-id', ++ 'unit-tag', ++ 'address', ++ 'ports', ++ 'status', ++ 'info'], ++ 'type': 'object'}, ++ 'ConfigResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ '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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ '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'}, ++ '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': {'constraints': {'$ref': '#/definitions/Value'}, ++ 'devices': {'items': {'$ref': '#/definitions/KubernetesDeviceParams'}, ++ 'type': 'array'}, ++ 'filesystems': {'items': {'$ref': '#/definitions/KubernetesFilesystemParams'}, ++ 'type': 'array'}, ++ 'placement': {'type': 'string'}, ++ 'pod-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'}, ++ 'Macaroon': {'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'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ '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'}, ++ 'UpdateApplicationServiceArg': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, ++ 'type': 'array'}, ++ 'application-tag': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}}, ++ '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'}, ++ 'UpdateApplicationUnits': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}, ++ 'units': {'items': {'$ref': '#/definitions/ApplicationUnitParams'}, ++ 'type': 'array'}}, ++ 'required': ['application-tag', ++ 'units'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ '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': {'ApplicationsConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetConfigResults'}}, ++ 'type': 'object'}, ++ 'ApplicationsScale': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/IntResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'ProvisioningInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/KubernetesProvisioningInfoResults'}}, ++ 'type': 'object'}, ++ 'SetOperatorStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateApplicationsService': {'properties': {'Params': {'$ref': '#/definitions/UpdateApplicationServiceArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateApplicationsUnits': {'properties': {'Params': {'$ref': '#/definitions/UpdateApplicationUnitArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchApplicationsScale': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchPodSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ApplicationGetConfigResults) ++ async def ApplicationsConfig(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='ApplicationsConfig', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(IntResults) ++ async def ApplicationsScale(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='ApplicationsScale', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(KubernetesProvisioningInfoResults) ++ async def ProvisioningInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~KubernetesProvisioningInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='ProvisioningInfo', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetOperatorStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='SetOperatorStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateApplicationsService(self, args): ++ ''' ++ args : typing.Sequence[~UpdateApplicationServiceArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='UpdateApplicationsService', ++ version=1, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateApplicationsUnits(self, args): ++ ''' ++ args : typing.Sequence[~UpdateApplicationUnits] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='UpdateApplicationsUnits', ++ version=1, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchApplications(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='WatchApplications', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchApplicationsScale(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='WatchApplicationsScale', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchPodSpec(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CAASUnitProvisioner', ++ request='WatchPodSpec', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class ClientFacade(Type): ++ name = 'Client' ++ version = 1 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'AddCharm': {'additionalProperties': False, ++ 'properties': {'channel': {'type': 'string'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', 'channel'], ++ 'type': 'object'}, ++ 'AddCharmWithAuthorization': {'additionalProperties': False, ++ 'properties': {'channel': {'type': 'string'}, ++ 'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', ++ 'channel', ++ 'macaroon'], ++ 'type': 'object'}, ++ 'AddMachineParams': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, ++ 'type': 'array'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'container-type': {'type': 'string'}, ++ 'disks': {'items': {'$ref': '#/definitions/Constraints'}, ++ 'type': 'array'}, ++ 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, ++ 'instance-id': {'type': 'string'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'nonce': {'type': 'string'}, ++ 'parent-id': {'type': 'string'}, ++ 'placement': {'$ref': '#/definitions/Placement'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['series', ++ 'constraints', ++ 'jobs', ++ 'parent-id', ++ 'container-type', ++ 'instance-id', ++ 'nonce', ++ 'hardware-characteristics', ++ 'addresses'], ++ 'type': 'object'}, ++ 'AddMachines': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'AddMachinesResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'machine': {'type': 'string'}}, ++ 'required': ['machine'], ++ 'type': 'object'}, ++ 'AddMachinesResults': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, ++ 'type': 'array'}}, ++ 'required': ['machines'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'AgentVersionResult': {'additionalProperties': False, ++ 'properties': {'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['version'], ++ 'type': 'object'}, ++ 'AllWatcherId': {'additionalProperties': False, ++ 'properties': {'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id'], ++ 'type': 'object'}, ++ 'ApplicationStatus': {'additionalProperties': False, ++ 'properties': {'can-upgrade-to': {'type': 'string'}, ++ 'charm': {'type': 'string'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'exposed': {'type': 'boolean'}, ++ 'life': {'type': 'string'}, ++ 'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}}, ++ 'type': 'object'}, ++ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'series': {'type': 'string'}, ++ 'status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'subordinate-to': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, ++ 'type': 'object'}, ++ 'workload-version': {'type': 'string'}}, ++ 'required': ['charm', ++ 'series', ++ 'exposed', ++ 'life', ++ 'relations', ++ 'can-upgrade-to', ++ 'subordinate-to', ++ 'units', ++ 'meter-statuses', ++ 'status', ++ 'workload-version'], ++ 'type': 'object'}, ++ 'Binary': {'additionalProperties': False, ++ 'properties': {'Arch': {'type': 'string'}, ++ 'Number': {'$ref': '#/definitions/Number'}, ++ 'Series': {'type': 'string'}}, ++ 'required': ['Number', 'Series', 'Arch'], ++ 'type': 'object'}, ++ 'BundleChange': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'type': 'array'}, ++ 'id': {'type': 'string'}, ++ 'method': {'type': 'string'}, ++ 'requires': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['id', ++ 'method', ++ 'args', ++ 'requires'], ++ 'type': 'object'}, ++ 'BundleChangesParams': {'additionalProperties': False, ++ 'properties': {'yaml': {'type': 'string'}}, ++ 'required': ['yaml'], ++ 'type': 'object'}, ++ 'BundleChangesResults': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'}, ++ 'type': 'array'}, ++ 'errors': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'BytesResult': {'additionalProperties': False, ++ 'properties': {'result': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'ConfigValue': {'additionalProperties': False, ++ 'properties': {'source': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['value', 'source'], ++ 'type': 'object'}, ++ 'Constraints': {'additionalProperties': False, ++ 'properties': {'Count': {'type': 'integer'}, ++ 'Pool': {'type': 'string'}, ++ 'Size': {'type': 'integer'}}, ++ 'required': ['Pool', 'Size', 'Count'], ++ 'type': 'object'}, ++ 'DestroyMachines': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'machine-names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['machine-names', 'force'], ++ 'type': 'object'}, ++ 'DetailedStatus': {'additionalProperties': False, ++ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'info': {'type': 'string'}, ++ 'kind': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'since': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'version': {'type': 'string'}}, ++ 'required': ['status', ++ 'info', ++ 'data', ++ 'since', ++ 'kind', ++ 'version', ++ 'life'], ++ 'type': 'object'}, ++ 'EndpointStatus': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'role': {'type': 'string'}, ++ 'subordinate': {'type': 'boolean'}}, ++ 'required': ['application', ++ 'name', ++ 'role', ++ 'subordinate'], ++ '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'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'FindToolsParams': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'major': {'type': 'integer'}, ++ 'minor': {'type': 'integer'}, ++ 'number': {'$ref': '#/definitions/Number'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['number', ++ 'major', ++ 'minor', ++ 'arch', ++ 'series'], ++ 'type': 'object'}, ++ 'FindToolsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'list': {'items': {'$ref': '#/definitions/Tools'}, ++ 'type': 'array'}}, ++ 'required': ['list'], ++ 'type': 'object'}, ++ 'FullStatus': {'additionalProperties': False, ++ 'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}}, ++ 'type': 'object'}, ++ 'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, ++ 'type': 'object'}, ++ 'model': {'$ref': '#/definitions/ModelStatusInfo'}, ++ 'relations': {'items': {'$ref': '#/definitions/RelationStatus'}, ++ 'type': 'array'}, ++ 'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}}, ++ 'type': 'object'}}, ++ 'required': ['model', ++ 'machines', ++ 'applications', ++ 'remote-applications', ++ 'relations'], ++ 'type': 'object'}, ++ 'GetConstraintsResults': {'additionalProperties': False, ++ 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'HardwareCharacteristics': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'History': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'}, ++ 'type': 'array'}}, ++ 'required': ['statuses'], ++ 'type': 'object'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineHardware': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'MachineStatus': {'additionalProperties': False, ++ 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'constraints': {'type': 'string'}, ++ 'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, ++ 'type': 'object'}, ++ 'dns-name': {'type': 'string'}, ++ 'hardware': {'type': 'string'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'instance-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'ip-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}}, ++ 'type': 'object'}, ++ 'series': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['agent-status', ++ 'instance-status', ++ 'dns-name', ++ 'instance-id', ++ 'series', ++ 'id', ++ 'containers', ++ 'constraints', ++ 'hardware', ++ 'jobs', ++ 'has-vote', ++ 'wants-vote'], ++ 'type': 'object'}, ++ 'MeterStatus': {'additionalProperties': False, ++ 'properties': {'color': {'type': 'string'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['color', 'message'], ++ 'type': 'object'}, ++ 'ModelConfigResults': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelInfo': {'additionalProperties': False, ++ 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, ++ 'cloud-credential-tag': {'type': 'string'}, ++ 'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'controller-uuid': {'type': 'string'}, ++ 'default-series': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, ++ 'type': 'array'}, ++ 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'provider-type': {'type': 'string'}, ++ 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, ++ 'type': 'array'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', ++ 'uuid', ++ 'controller-uuid', ++ 'cloud-tag', ++ 'owner-tag', ++ 'life', ++ 'users', ++ 'machines', ++ 'sla', ++ 'agent-version'], ++ 'type': 'object'}, ++ 'ModelMachineInfo': {'additionalProperties': False, ++ 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelMigrationStatus': {'additionalProperties': False, ++ 'properties': {'end': {'format': 'date-time', ++ 'type': 'string'}, ++ 'start': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['status', 'start'], ++ 'type': 'object'}, ++ 'ModelSLA': {'additionalProperties': False, ++ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'creds': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['ModelSLAInfo', 'creds'], ++ 'type': 'object'}, ++ 'ModelSLAInfo': {'additionalProperties': False, ++ 'properties': {'level': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['level', 'owner'], ++ 'type': 'object'}, ++ 'ModelSet': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelStatusInfo': {'additionalProperties': False, ++ 'properties': {'available-version': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'meter-status': {'$ref': '#/definitions/MeterStatus'}, ++ 'model-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ 'sla': {'type': 'string'}, ++ 'version': {'type': 'string'}}, ++ 'required': ['name', ++ 'cloud-tag', ++ 'version', ++ 'available-version', ++ 'model-status', ++ 'meter-status', ++ 'sla'], ++ 'type': 'object'}, ++ 'ModelUnset': {'additionalProperties': False, ++ 'properties': {'keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'ModelUserInfo': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'last-connection', ++ 'access'], ++ 'type': 'object'}, ++ 'ModelUserInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ModelUserInfo'}}, ++ 'type': 'object'}, ++ 'ModelUserInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ModelUserInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'NetworkInterface': {'additionalProperties': False, ++ 'properties': {'dns-nameservers': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'gateway': {'type': 'string'}, ++ 'ip-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'is-up': {'type': 'boolean'}, ++ 'mac-address': {'type': 'string'}, ++ 'space': {'type': 'string'}}, ++ 'required': ['ip-addresses', ++ 'mac-address', ++ 'is-up'], ++ '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'}, ++ 'Placement': {'additionalProperties': False, ++ 'properties': {'directive': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['scope', 'directive'], ++ 'type': 'object'}, ++ 'PrivateAddress': {'additionalProperties': False, ++ 'properties': {'target': {'type': 'string'}}, ++ 'required': ['target'], ++ 'type': 'object'}, ++ 'PrivateAddressResults': {'additionalProperties': False, ++ 'properties': {'private-address': {'type': 'string'}}, ++ 'required': ['private-address'], ++ 'type': 'object'}, ++ 'ProvisioningScriptParams': {'additionalProperties': False, ++ 'properties': {'data-dir': {'type': 'string'}, ++ 'disable-package-commands': {'type': 'boolean'}, ++ 'machine-id': {'type': 'string'}, ++ 'nonce': {'type': 'string'}}, ++ 'required': ['machine-id', ++ 'nonce', ++ 'data-dir', ++ 'disable-package-commands'], ++ 'type': 'object'}, ++ 'ProvisioningScriptResult': {'additionalProperties': False, ++ 'properties': {'script': {'type': 'string'}}, ++ 'required': ['script'], ++ 'type': 'object'}, ++ 'PublicAddress': {'additionalProperties': False, ++ 'properties': {'target': {'type': 'string'}}, ++ 'required': ['target'], ++ 'type': 'object'}, ++ 'PublicAddressResults': {'additionalProperties': False, ++ 'properties': {'public-address': {'type': 'string'}}, ++ 'required': ['public-address'], ++ 'type': 'object'}, ++ 'RelationStatus': {'additionalProperties': False, ++ 'properties': {'endpoints': {'items': {'$ref': '#/definitions/EndpointStatus'}, ++ 'type': 'array'}, ++ 'id': {'type': 'integer'}, ++ 'interface': {'type': 'string'}, ++ 'key': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['id', ++ 'key', ++ 'interface', ++ 'scope', ++ 'endpoints'], ++ 'type': 'object'}, ++ 'RemoteApplicationStatus': {'additionalProperties': False, ++ 'properties': {'application-name': {'type': 'string'}, ++ 'application-url': {'type': 'string'}, ++ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, ++ 'type': 'array'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'life': {'type': 'string'}, ++ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'status': {'$ref': '#/definitions/DetailedStatus'}}, ++ 'required': ['application-url', ++ 'application-name', ++ 'endpoints', ++ 'life', ++ 'relations', ++ 'status'], ++ 'type': 'object'}, ++ 'RemoteEndpoint': {'additionalProperties': False, ++ 'properties': {'interface': {'type': 'string'}, ++ 'limit': {'type': 'integer'}, ++ 'name': {'type': 'string'}, ++ 'role': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['name', ++ 'role', ++ 'interface', ++ 'limit', ++ 'scope'], ++ 'type': 'object'}, ++ 'ResolveCharmResult': {'additionalProperties': False, ++ 'properties': {'error': {'type': 'string'}, ++ 'url': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ResolveCharmResults': {'additionalProperties': False, ++ 'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'}, ++ 'type': 'array'}}, ++ 'required': ['urls'], ++ 'type': 'object'}, ++ 'ResolveCharms': {'additionalProperties': False, ++ 'properties': {'references': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['references'], ++ 'type': 'object'}, ++ 'Resolved': {'additionalProperties': False, ++ 'properties': {'retry': {'type': 'boolean'}, ++ 'unit-name': {'type': 'string'}}, ++ 'required': ['unit-name', 'retry'], ++ 'type': 'object'}, ++ 'SetConstraints': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}}, ++ 'required': ['application', 'constraints'], ++ 'type': 'object'}, ++ 'SetModelAgentVersion': {'additionalProperties': False, ++ 'properties': {'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['version'], ++ 'type': 'object'}, ++ 'StatusHistoryFilter': {'additionalProperties': False, ++ 'properties': {'date': {'format': 'date-time', ++ 'type': 'string'}, ++ 'delta': {'type': 'integer'}, ++ 'exclude': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'size': {'type': 'integer'}}, ++ 'required': ['size', ++ 'date', ++ 'delta', ++ 'exclude'], ++ 'type': 'object'}, ++ 'StatusHistoryRequest': {'additionalProperties': False, ++ 'properties': {'filter': {'$ref': '#/definitions/StatusHistoryFilter'}, ++ 'historyKind': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['historyKind', ++ 'size', ++ 'filter', ++ 'tag'], ++ 'type': 'object'}, ++ 'StatusHistoryRequests': {'additionalProperties': False, ++ 'properties': {'requests': {'items': {'$ref': '#/definitions/StatusHistoryRequest'}, ++ 'type': 'array'}}, ++ 'required': ['requests'], ++ 'type': 'object'}, ++ 'StatusHistoryResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'history': {'$ref': '#/definitions/History'}}, ++ 'required': ['history'], ++ 'type': 'object'}, ++ 'StatusHistoryResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'StatusParams': {'additionalProperties': False, ++ 'properties': {'patterns': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['patterns'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'Tools': {'additionalProperties': False, ++ 'properties': {'sha256': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'url': {'type': 'string'}, ++ 'version': {'$ref': '#/definitions/Binary'}}, ++ 'required': ['version', 'url', 'size'], ++ 'type': 'object'}, ++ 'UnitStatus': {'additionalProperties': False, ++ 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'charm': {'type': 'string'}, ++ 'leader': {'type': 'boolean'}, ++ 'machine': {'type': 'string'}, ++ 'opened-ports': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'public-address': {'type': 'string'}, ++ 'subordinates': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, ++ 'type': 'object'}, ++ 'workload-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'workload-version': {'type': 'string'}}, ++ 'required': ['agent-status', ++ 'workload-status', ++ 'workload-version', ++ 'machine', ++ 'opened-ports', ++ 'public-address', ++ 'charm', ++ 'subordinates'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'spaces': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'virt-type': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'properties': {'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'AbortCurrentUpgrade': {'type': 'object'}, ++ 'AddCharm': {'properties': {'Params': {'$ref': '#/definitions/AddCharm'}}, ++ 'type': 'object'}, ++ 'AddCharmWithAuthorization': {'properties': {'Params': {'$ref': '#/definitions/AddCharmWithAuthorization'}}, ++ 'type': 'object'}, ++ 'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'AddMachinesV2': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'AgentVersion': {'properties': {'Result': {'$ref': '#/definitions/AgentVersionResult'}}, ++ 'type': 'object'}, ++ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'type': 'object'}, ++ 'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}}, ++ 'type': 'object'}, ++ 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'}, ++ 'Result': {'$ref': '#/definitions/FindToolsResult'}}, ++ 'type': 'object'}, ++ 'FullStatus': {'properties': {'Params': {'$ref': '#/definitions/StatusParams'}, ++ 'Result': {'$ref': '#/definitions/FullStatus'}}, ++ 'type': 'object'}, ++ 'GetBundleChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'}, ++ 'Result': {'$ref': '#/definitions/BundleChangesResults'}}, ++ 'type': 'object'}, ++ 'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, ++ 'type': 'object'}, ++ 'InjectMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, ++ 'type': 'object'}, ++ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelInfo'}}, ++ 'type': 'object'}, ++ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, ++ 'type': 'object'}, ++ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, ++ 'type': 'object'}, ++ 'ModelUserInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelUserInfoResults'}}, ++ 'type': 'object'}, ++ 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/PrivateAddress'}, ++ 'Result': {'$ref': '#/definitions/PrivateAddressResults'}}, ++ 'type': 'object'}, ++ 'ProvisioningScript': {'properties': {'Params': {'$ref': '#/definitions/ProvisioningScriptParams'}, ++ 'Result': {'$ref': '#/definitions/ProvisioningScriptResult'}}, ++ 'type': 'object'}, ++ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/PublicAddress'}, ++ 'Result': {'$ref': '#/definitions/PublicAddressResults'}}, ++ 'type': 'object'}, ++ 'ResolveCharms': {'properties': {'Params': {'$ref': '#/definitions/ResolveCharms'}, ++ 'Result': {'$ref': '#/definitions/ResolveCharmResults'}}, ++ 'type': 'object'}, ++ 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Resolved'}}, ++ 'type': 'object'}, ++ 'RetryProvisioning': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'SetModelAgentVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelAgentVersion'}}, ++ 'type': 'object'}, ++ 'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, ++ 'type': 'object'}, ++ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, ++ 'type': 'object'}, ++ 'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'}, ++ 'Result': {'$ref': '#/definitions/StatusHistoryResults'}}, ++ 'type': 'object'}, ++ 'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='APIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AbortCurrentUpgrade(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AbortCurrentUpgrade', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AddCharm(self, channel, url): ++ ''' ++ channel : str ++ url : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddCharm', ++ version=1, ++ params=_params) ++ _params['channel'] = channel ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AddCharmWithAuthorization(self, channel, macaroon, url): ++ ''' ++ channel : str ++ macaroon : Macaroon ++ url : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddCharmWithAuthorization', ++ version=1, ++ params=_params) ++ _params['channel'] = channel ++ _params['macaroon'] = macaroon ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def AddMachines(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddMachines', ++ version=1, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def AddMachinesV2(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddMachinesV2', ++ version=1, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AgentVersionResult) ++ async def AgentVersion(self): ++ ''' ++ ++ Returns -> Number ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AgentVersion', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BytesResult) ++ async def CACert(self): ++ ''' ++ ++ Returns -> typing.Sequence[int] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='CACert', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyMachines(self, force, machine_names): ++ ''' ++ force : bool ++ machine_names : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='DestroyMachines', ++ version=1, ++ params=_params) ++ _params['force'] = force ++ _params['machine-names'] = machine_names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FindToolsResult) ++ async def FindTools(self, arch, major, minor, number, series): ++ ''' ++ arch : str ++ major : int ++ minor : int ++ number : Number ++ series : str ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='FindTools', ++ version=1, ++ params=_params) ++ _params['arch'] = arch ++ _params['major'] = major ++ _params['minor'] = minor ++ _params['number'] = number ++ _params['series'] = series ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FullStatus) ++ async def FullStatus(self, patterns): ++ ''' ++ patterns : typing.Sequence[str] ++ Returns -> typing.Union[typing.Mapping[str, ~ApplicationStatus], str, typing.Mapping[str, ~MachineStatus], _ForwardRef('ModelStatusInfo'), typing.Mapping[str, ~ApplicationOfferStatus], typing.Sequence[~RelationStatus], typing.Mapping[str, ~RemoteApplicationStatus]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='FullStatus', ++ version=1, ++ params=_params) ++ _params['patterns'] = patterns ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BundleChangesResults) ++ async def GetBundleChanges(self, yaml): ++ ''' ++ yaml : str ++ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='GetBundleChanges', ++ version=1, ++ params=_params) ++ _params['yaml'] = yaml ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(GetConstraintsResults) ++ async def GetModelConstraints(self): ++ ''' ++ ++ Returns -> Value ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='GetModelConstraints', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def InjectMachines(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='InjectMachines', ++ version=1, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResults) ++ async def ModelGet(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, ~ConfigValue] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelGet', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelInfo) ++ async def ModelInfo(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelInfo', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelSet(self, config): ++ ''' ++ config : typing.Mapping[str, typing.Any] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelSet', ++ version=1, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelUnset(self, keys): ++ ''' ++ keys : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelUnset', ++ version=1, ++ params=_params) ++ _params['keys'] = keys ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelUserInfoResults) ++ async def ModelUserInfo(self): ++ ''' ++ ++ Returns -> typing.Sequence[~ModelUserInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelUserInfo', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(PrivateAddressResults) ++ async def PrivateAddress(self, target): ++ ''' ++ target : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='PrivateAddress', ++ version=1, ++ params=_params) ++ _params['target'] = target ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ProvisioningScriptResult) ++ async def ProvisioningScript(self, data_dir, disable_package_commands, machine_id, nonce): ++ ''' ++ data_dir : str ++ disable_package_commands : bool ++ machine_id : str ++ nonce : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ProvisioningScript', ++ version=1, ++ params=_params) ++ _params['data-dir'] = data_dir ++ _params['disable-package-commands'] = disable_package_commands ++ _params['machine-id'] = machine_id ++ _params['nonce'] = nonce ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(PublicAddressResults) ++ async def PublicAddress(self, target): ++ ''' ++ target : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='PublicAddress', ++ version=1, ++ params=_params) ++ _params['target'] = target ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ResolveCharmResults) ++ async def ResolveCharms(self, references): ++ ''' ++ references : typing.Sequence[str] ++ Returns -> typing.Sequence[~ResolveCharmResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ResolveCharms', ++ version=1, ++ params=_params) ++ _params['references'] = references ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Resolved(self, retry, unit_name): ++ ''' ++ retry : bool ++ unit_name : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='Resolved', ++ version=1, ++ params=_params) ++ _params['retry'] = retry ++ _params['unit-name'] = unit_name ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RetryProvisioning(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='RetryProvisioning', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def SLALevel(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SLALevel', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetModelAgentVersion(self, version): ++ ''' ++ version : Number ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SetModelAgentVersion', ++ version=1, ++ params=_params) ++ _params['version'] = version ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetModelConstraints(self, application, constraints): ++ ''' ++ application : str ++ constraints : Value ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SetModelConstraints', ++ version=1, ++ params=_params) ++ _params['application'] = application ++ _params['constraints'] = constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetSLALevel(self, creds, level): ++ ''' ++ creds : typing.Sequence[int] ++ level : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SetSLALevel', ++ version=1, ++ params=_params) ++ _params['creds'] = creds ++ _params['level'] = level ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusHistoryResults) ++ async def StatusHistory(self, requests): ++ ''' ++ requests : typing.Sequence[~StatusHistoryRequest] ++ Returns -> typing.Sequence[~StatusHistoryResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='StatusHistory', ++ version=1, ++ params=_params) ++ _params['requests'] = requests ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AllWatcherId) ++ async def WatchAll(self): ++ ''' ++ ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='WatchAll', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CloudFacade(Type): ++ name = 'Cloud' ++ version = 1 ++ schema = {'definitions': {'Cloud': {'additionalProperties': False, ++ 'properties': {'auth-types': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'endpoint': {'type': 'string'}, ++ 'identity-endpoint': {'type': 'string'}, ++ 'regions': {'items': {'$ref': '#/definitions/CloudRegion'}, ++ 'type': 'array'}, ++ 'storage-endpoint': {'type': 'string'}, ++ 'type': {'type': 'string'}}, ++ 'required': ['type'], ++ 'type': 'object'}, ++ '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'}, ++ 'CloudCredentialResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/CloudCredential'}}, + 'type': 'object'}, - 'StatusHistoryResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'history': {'$ref': '#/definitions/History'}}, - 'required': ['history'], ++ 'CloudCredentialResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudCredentialResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'CloudInstanceTypesConstraint': {'additionalProperties': False, ++ 'properties': {'cloud-tag': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'region': {'type': 'string'}}, ++ 'required': ['cloud-tag', ++ 'region'], ++ 'type': 'object'}, ++ 'CloudInstanceTypesConstraints': {'additionalProperties': False, ++ 'properties': {'constraints': {'items': {'$ref': '#/definitions/CloudInstanceTypesConstraint'}, ++ 'type': 'array'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'CloudRegion': {'additionalProperties': False, ++ 'properties': {'endpoint': {'type': 'string'}, ++ 'identity-endpoint': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'storage-endpoint': {'type': 'string'}}, ++ 'required': ['name'], ++ 'type': 'object'}, ++ 'CloudResult': {'additionalProperties': False, ++ 'properties': {'cloud': {'$ref': '#/definitions/Cloud'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'CloudResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'CloudsResult': {'additionalProperties': False, ++ 'properties': {'clouds': {'patternProperties': {'.*': {'$ref': '#/definitions/Cloud'}}, ++ 'type': 'object'}}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'InstanceType': {'additionalProperties': False, ++ 'properties': {'arches': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'cost': {'type': 'integer'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'deprecated': {'type': 'boolean'}, ++ 'memory': {'type': 'integer'}, ++ 'name': {'type': 'string'}, ++ 'root-disk': {'type': 'integer'}, ++ 'virt-type': {'type': 'string'}}, ++ 'required': ['arches', 'cpu-cores', 'memory'], ++ 'type': 'object'}, ++ 'InstanceTypesResult': {'additionalProperties': False, ++ 'properties': {'cost-currency': {'type': 'string'}, ++ 'cost-divisor': {'type': 'integer'}, ++ 'cost-unit': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, ++ 'type': 'array'}}, + 'type': 'object'}, - 'StatusHistoryResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'}, ++ 'InstanceTypesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, - 'StatusParams': {'additionalProperties': False, - 'properties': {'patterns': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['patterns'], - 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'StringResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'type': 'string'}}, + 'required': ['result'], + 'type': 'object'}, - 'Tools': {'additionalProperties': False, - 'properties': {'sha256': {'type': 'string'}, - 'size': {'type': 'integer'}, - 'url': {'type': 'string'}, - 'version': {'$ref': '#/definitions/Binary'}}, - 'required': ['version', 'url', 'size'], - 'type': 'object'}, - 'UnitStatus': {'additionalProperties': False, - 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'}, - 'charm': {'type': 'string'}, - 'leader': {'type': 'boolean'}, - 'machine': {'type': 'string'}, - 'opened-ports': {'items': {'type': 'string'}, - 'type': 'array'}, - 'public-address': {'type': 'string'}, - 'subordinates': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, - 'type': 'object'}, - 'workload-status': {'$ref': '#/definitions/DetailedStatus'}, - 'workload-version': {'type': 'string'}}, - 'required': ['agent-status', - 'workload-status', - 'workload-version', - 'machine', - 'opened-ports', - 'public-address', - 'charm', - 'subordinates'], ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'UpdateCloudCredential': {'additionalProperties': False, ++ 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'credential'], ++ 'type': 'object'}, ++ 'UpdateCloudCredentials': {'additionalProperties': False, ++ 'properties': {'credentials': {'items': {'$ref': '#/definitions/UpdateCloudCredential'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'UserCloud': {'additionalProperties': False, ++ 'properties': {'cloud-tag': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', 'cloud-tag'], ++ 'type': 'object'}, ++ 'UserClouds': {'additionalProperties': False, ++ 'properties': {'user-clouds': {'items': {'$ref': '#/definitions/UserCloud'}, ++ 'type': 'array'}}, + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, - 'properties': {'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, - 'type': 'object'}, - 'AbortCurrentUpgrade': {'type': 'object'}, - 'AddCharm': {'properties': {'Params': {'$ref': '#/definitions/AddCharm'}}, - 'type': 'object'}, - 'AddCharmWithAuthorization': {'properties': {'Params': {'$ref': '#/definitions/AddCharmWithAuthorization'}}, - 'type': 'object'}, - 'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, - 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, - 'type': 'object'}, - 'AddMachinesV2': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, - 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, - 'type': 'object'}, - 'AgentVersion': {'properties': {'Result': {'$ref': '#/definitions/AgentVersionResult'}}, - 'type': 'object'}, - 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'properties': {'Cloud': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudResults'}}, ++ 'type': 'object'}, ++ 'Clouds': {'properties': {'Result': {'$ref': '#/definitions/CloudsResult'}}, + 'type': 'object'}, - 'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}}, - 'type': 'object'}, - 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'}, - 'Result': {'$ref': '#/definitions/FindToolsResult'}}, - 'type': 'object'}, - 'FullStatus': {'properties': {'Params': {'$ref': '#/definitions/StatusParams'}, - 'Result': {'$ref': '#/definitions/FullStatus'}}, - 'type': 'object'}, - 'GetBundleChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'}, - 'Result': {'$ref': '#/definitions/BundleChangesResults'}}, - 'type': 'object'}, - 'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, - 'type': 'object'}, - 'InjectMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, - 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, - 'type': 'object'}, - 'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, - 'type': 'object'}, - 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelInfo'}}, - 'type': 'object'}, - 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, - 'type': 'object'}, - 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, ++ 'Credential': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudCredentialResults'}}, + 'type': 'object'}, - 'ModelUserInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelUserInfoResults'}}, - 'type': 'object'}, - 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/PrivateAddress'}, - 'Result': {'$ref': '#/definitions/PrivateAddressResults'}}, - 'type': 'object'}, - 'ProvisioningScript': {'properties': {'Params': {'$ref': '#/definitions/ProvisioningScriptParams'}, - 'Result': {'$ref': '#/definitions/ProvisioningScriptResult'}}, - 'type': 'object'}, - 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/PublicAddress'}, - 'Result': {'$ref': '#/definitions/PublicAddressResults'}}, - 'type': 'object'}, - 'ResolveCharms': {'properties': {'Params': {'$ref': '#/definitions/ResolveCharms'}, - 'Result': {'$ref': '#/definitions/ResolveCharmResults'}}, - 'type': 'object'}, - 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Resolved'}}, - 'type': 'object'}, - 'RetryProvisioning': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'DefaultCloud': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/CloudInstanceTypesConstraints'}, ++ 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, ++ 'type': 'object'}, ++ 'RevokeCredentials': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, - 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'SetModelAgentVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelAgentVersion'}}, - 'type': 'object'}, - 'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, - 'type': 'object'}, - 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, - 'type': 'object'}, - 'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'}, - 'Result': {'$ref': '#/definitions/StatusHistoryResults'}}, - 'type': 'object'}, - 'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}}, - 'type': 'object'}}, ++ 'UpdateCredentials': {'properties': {'Params': {'$ref': '#/definitions/UpdateCloudCredentials'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UserCredentials': {'properties': {'Params': {'$ref': '#/definitions/UserClouds'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(APIHostPortsResult) - async def APIHostPorts(self): ++ ++ @ReturnMapping(CloudResults) ++ async def Cloud(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Cloud', ++ request='Cloud', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudsResult) ++ async def Clouds(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ Returns -> typing.Mapping[str, ~Cloud] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='APIHostPorts', version=1, params=_params) ++ msg = dict(type='Cloud', ++ request='Clouds', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def AbortCurrentUpgrade(self): ++ @ReturnMapping(CloudCredentialResults) ++ async def Credential(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudCredentialResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Cloud', ++ request='Credential', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def DefaultCloud(self): + ''' + - Returns -> None ++ Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AbortCurrentUpgrade', version=1, params=_params) ++ msg = dict(type='Cloud', ++ request='DefaultCloud', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def AddCharm(self, channel, url): ++ @ReturnMapping(InstanceTypesResults) ++ async def InstanceTypes(self, constraints): + ''' - channel : str - url : str - Returns -> None ++ constraints : typing.Sequence[~CloudInstanceTypesConstraint] ++ Returns -> typing.Sequence[~InstanceTypesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AddCharm', version=1, params=_params) - _params['channel'] = channel - _params['url'] = url ++ msg = dict(type='Cloud', ++ request='InstanceTypes', ++ version=1, ++ params=_params) ++ _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def AddCharmWithAuthorization(self, channel, macaroon, url): ++ @ReturnMapping(ErrorResults) ++ async def RevokeCredentials(self, entities): + ''' - channel : str - macaroon : Macaroon - url : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AddCharmWithAuthorization', version=1, params=_params) - _params['channel'] = channel - _params['macaroon'] = macaroon - _params['url'] = url ++ msg = dict(type='Cloud', ++ request='RevokeCredentials', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AddMachinesResults) - async def AddMachines(self, params): ++ @ReturnMapping(ErrorResults) ++ async def UpdateCredentials(self, credentials): + ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> - Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> ++ credentials : typing.Sequence[~UpdateCloudCredential] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AddMachines', version=1, params=_params) - _params['params'] = params ++ msg = dict(type='Cloud', ++ request='UpdateCredentials', ++ version=1, ++ params=_params) ++ _params['credentials'] = credentials ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsResults) ++ async def UserCredentials(self, user_clouds): ++ ''' ++ user_clouds : typing.Sequence[~UserCloud] ++ Returns -> typing.Sequence[~StringsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Cloud', ++ request='UserCredentials', ++ version=1, ++ params=_params) ++ _params['user-clouds'] = user_clouds ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CredentialManagerFacade(Type): ++ name = 'CredentialManager' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'InvalidateCredentialArg': {'additionalProperties': False, ++ 'properties': {'reason': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'InvalidateModelCredential': {'properties': {'Params': {'$ref': '#/definitions/InvalidateCredentialArg'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def InvalidateModelCredential(self, reason): ++ ''' ++ reason : str ++ Returns -> Error ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CredentialManager', ++ request='InvalidateModelCredential', ++ version=1, ++ params=_params) ++ _params['reason'] = reason ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CrossControllerFacade(Type): ++ name = 'CrossController' ++ version = 1 ++ 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'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'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': {'ControllerInfo': {'properties': {'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, ++ 'WatchControllerInfo': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerInfo(self): ++ ''' ++ ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CrossController', ++ request='ControllerInfo', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchControllerInfo(self): ++ ''' ++ ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='CrossController', ++ request='WatchControllerInfo', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AddMachinesResults) - async def AddMachinesV2(self, params): ++class CrossModelRelationsFacade(Type): ++ name = 'CrossModelRelations' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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': {'application-token': {'type': 'string'}, ++ 'ingress-required': {'type': 'boolean'}, ++ 'macaroons': {'items': {'$ref': '#/definitions/Macaroon'}, ++ 'type': 'array'}, ++ 'networks': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'relation-token': {'type': 'string'}}, ++ 'required': ['relation-token', ++ 'application-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': {'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'}, ++ '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'}, ++ 'RelationUnitsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, ++ 'type': 'object'}, ++ 'departed': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['changed'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id', ++ 'changes'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'}, ++ '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': {'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-token': {'type': 'string'}, ++ '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'}}, ++ 'required': ['relation-token', ++ 'application-token', ++ 'life'], ++ 'type': 'object'}, ++ 'RemoteRelationDetails': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'relation-token': {'type': 'string'}}, ++ 'required': ['relation-token'], ++ 'type': 'object'}, ++ 'RemoteRelationUnit': {'additionalProperties': False, ++ 'properties': {'macaroons': {'items': {'$ref': '#/definitions/Macaroon'}, ++ 'type': 'array'}, ++ 'relation-token': {'type': 'string'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['relation-token', 'unit'], ++ 'type': 'object'}, ++ 'RemoteRelationUnitChange': {'additionalProperties': False, ++ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'unit-id': {'type': 'integer'}}, ++ 'required': ['unit-id'], ++ 'type': 'object'}, ++ 'RemoteRelationUnits': {'additionalProperties': False, ++ 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RemoteRelationUnit'}, ++ 'type': 'array'}}, ++ 'required': ['relation-units'], ++ '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'}, ++ 'SettingsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['settings'], ++ 'type': 'object'}, ++ 'SettingsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'}, ++ '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'}, ++ 'UnitSettings': {'additionalProperties': False, ++ 'properties': {'version': {'type': 'integer'}}, ++ 'required': ['version'], ++ 'type': 'object'}}, ++ 'properties': {'PublishIngressNetworkChanges': {'properties': {'Params': {'$ref': '#/definitions/IngressNetworksChanges'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'PublishRelationChanges': {'properties': {'Params': {'$ref': '#/definitions/RemoteRelationsChanges'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RegisterRemoteRelations': {'properties': {'Params': {'$ref': '#/definitions/RegisterRemoteRelationArgs'}, ++ 'Result': {'$ref': '#/definitions/RegisterRemoteRelationResults'}}, ++ 'type': 'object'}, ++ 'RelationUnitSettings': {'properties': {'Params': {'$ref': '#/definitions/RemoteRelationUnits'}, ++ 'Result': {'$ref': '#/definitions/SettingsResults'}}, ++ 'type': 'object'}, ++ 'WatchEgressAddressesForRelations': {'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchOfferStatus': {'properties': {'Params': {'$ref': '#/definitions/OfferArgs'}, ++ 'Result': {'$ref': '#/definitions/OfferStatusWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'}, ++ 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchRelationsSuspendedStatus': {'properties': {'Params': {'$ref': '#/definitions/RemoteEntityArgs'}, ++ 'Result': {'$ref': '#/definitions/RelationStatusWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def PublishIngressNetworkChanges(self, changes): + ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> - Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> ++ changes : typing.Sequence[~IngressNetworksChangeEvent] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AddMachinesV2', version=1, params=_params) - _params['params'] = params ++ msg = dict(type='CrossModelRelations', ++ request='PublishIngressNetworkChanges', ++ version=1, ++ params=_params) ++ _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AgentVersionResult) - async def AgentVersion(self): ++ @ReturnMapping(ErrorResults) ++ async def PublishRelationChanges(self, changes): + ''' - - Returns -> Number ++ changes : typing.Sequence[~RemoteRelationChangeEvent] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='AgentVersion', version=1, params=_params) - ++ msg = dict(type='CrossModelRelations', ++ request='PublishRelationChanges', ++ version=1, ++ params=_params) ++ _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(BytesResult) - async def CACert(self): ++ @ReturnMapping(RegisterRemoteRelationResults) ++ async def RegisterRemoteRelations(self, relations): + ''' - - Returns -> typing.Sequence<+T_co>[int] ++ relations : typing.Sequence[~RegisterRemoteRelationArg] ++ Returns -> typing.Sequence[~RegisterRemoteRelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='CACert', version=1, params=_params) - ++ msg = dict(type='CrossModelRelations', ++ request='RegisterRemoteRelations', ++ version=1, ++ params=_params) ++ _params['relations'] = relations + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def DestroyMachines(self, force, machine_names): ++ @ReturnMapping(SettingsResults) ++ async def RelationUnitSettings(self, relation_units): + ''' - force : bool - machine_names : typing.Sequence<+T_co>[str] - Returns -> None ++ relation_units : typing.Sequence[~RemoteRelationUnit] ++ Returns -> typing.Sequence[~SettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='DestroyMachines', version=1, params=_params) - _params['force'] = force - _params['machine-names'] = machine_names ++ msg = dict(type='CrossModelRelations', ++ request='RelationUnitSettings', ++ version=1, ++ params=_params) ++ _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(FindToolsResult) - async def FindTools(self, arch, major, minor, number, series): ++ @ReturnMapping(StringsWatchResults) ++ async def WatchEgressAddressesForRelations(self, args): + ''' - arch : str - major : int - minor : int - number : Number - series : str - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>] ++ args : typing.Sequence[~RemoteEntityArg] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='FindTools', version=1, params=_params) - _params['arch'] = arch - _params['major'] = major - _params['minor'] = minor - _params['number'] = number - _params['series'] = series ++ msg = dict(type='CrossModelRelations', ++ request='WatchEgressAddressesForRelations', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(FullStatus) - async def FullStatus(self, patterns): ++ @ReturnMapping(OfferStatusWatchResults) ++ async def WatchOfferStatus(self, args): + ''' - patterns : typing.Sequence<+T_co>[str] - Returns -> typing.Union[_ForwardRef('ModelStatusInfo'), typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus>, typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~RemoteApplicationStatus>] ++ args : typing.Sequence[~OfferArg] ++ Returns -> typing.Sequence[~OfferStatusWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='FullStatus', version=1, params=_params) - _params['patterns'] = patterns ++ msg = dict(type='CrossModelRelations', ++ request='WatchOfferStatus', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(BundleChangesResults) - async def GetBundleChanges(self, yaml): ++ @ReturnMapping(RelationUnitsWatchResults) ++ async def WatchRelationUnits(self, args): + ''' - yaml : str - Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange> ++ args : typing.Sequence[~RemoteEntityArg] ++ Returns -> typing.Sequence[~RelationUnitsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='GetBundleChanges', version=1, params=_params) - _params['yaml'] = yaml ++ msg = dict(type='CrossModelRelations', ++ request='WatchRelationUnits', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(GetConstraintsResults) - async def GetModelConstraints(self): ++ @ReturnMapping(RelationStatusWatchResults) ++ async def WatchRelationsSuspendedStatus(self, args): + ''' - - Returns -> Value ++ args : typing.Sequence[~RemoteEntityArg] ++ Returns -> typing.Sequence[~RelationLifeSuspendedStatusWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='GetModelConstraints', version=1, params=_params) - ++ msg = dict(type='CrossModelRelations', ++ request='WatchRelationsSuspendedStatus', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AddMachinesResults) - async def InjectMachines(self, params): - ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> - Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Client', request='InjectMachines', version=1, params=_params) - _params['params'] = params - reply = await self.rpc(msg) - return reply - ++class DeployerFacade(Type): ++ name = 'Deployer' ++ version = 1 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'DeployerConnectionValues': {'additionalProperties': False, ++ 'properties': {'api-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['api-addresses'], ++ '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'}, ++ 'EntityPassword': {'additionalProperties': False, ++ 'properties': {'password': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'password'], ++ 'type': 'object'}, ++ 'EntityPasswords': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ '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'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ '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'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'ConnectionInfo': {'properties': {'Result': {'$ref': '#/definitions/DeployerConnectionValues'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + + - @ReturnMapping(ModelConfigResults) - async def ModelGet(self): ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue> ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='ModelGet', version=1, params=_params) ++ msg = dict(type='Deployer', ++ request='APIAddresses', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ModelInfo) - async def ModelInfo(self): - ''' - - Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>] ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): + ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Client', request='ModelInfo', version=1, params=_params) - - reply = await self.rpc(msg) - return reply + - - - @ReturnMapping(None) - async def ModelSet(self, config): - ''' - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] - Returns -> None ++ Returns -> typing.Sequence[~HostPort] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='ModelSet', version=1, params=_params) - _params['config'] = config - reply = await self.rpc(msg) - return reply - ++ msg = dict(type='Deployer', ++ request='APIHostPorts', ++ version=1, ++ params=_params) + - - @ReturnMapping(None) - async def ModelUnset(self, keys): - ''' - keys : typing.Sequence<+T_co>[str] - Returns -> None - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Client', request='ModelUnset', version=1, params=_params) - _params['keys'] = keys + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ModelUserInfoResults) - async def ModelUserInfo(self): ++ @ReturnMapping(DeployerConnectionValues) ++ async def ConnectionInfo(self): + ''' + - Returns -> typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult> ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='ModelUserInfo', version=1, params=_params) ++ msg = dict(type='Deployer', ++ request='ConnectionInfo', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PrivateAddressResults) - async def PrivateAddress(self, target): ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): + ''' - target : str - Returns -> str ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='PrivateAddress', version=1, params=_params) - _params['target'] = target ++ msg = dict(type='Deployer', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ProvisioningScriptResult) - async def ProvisioningScript(self, data_dir, disable_package_commands, machine_id, nonce): ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): + ''' - data_dir : str - disable_package_commands : bool - machine_id : str - nonce : str - Returns -> str ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='ProvisioningScript', version=1, params=_params) - _params['data-dir'] = data_dir - _params['disable-package-commands'] = disable_package_commands - _params['machine-id'] = machine_id - _params['nonce'] = nonce ++ msg = dict(type='Deployer', ++ request='ModelUUID', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PublicAddressResults) - async def PublicAddress(self, target): ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, entities): + ''' - target : str - Returns -> str ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='PublicAddress', version=1, params=_params) - _params['target'] = target ++ msg = dict(type='Deployer', ++ request='Remove', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ResolveCharmResults) - async def ResolveCharms(self, references): ++ @ReturnMapping(ErrorResults) ++ async def SetPasswords(self, changes): + ''' - references : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult> ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='ResolveCharms', version=1, params=_params) - _params['references'] = references ++ msg = dict(type='Deployer', ++ request='SetPasswords', ++ version=1, ++ params=_params) ++ _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Resolved(self, retry, unit_name): ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): + ''' - retry : bool - unit_name : str - Returns -> None ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='Resolved', version=1, params=_params) - _params['retry'] = retry - _params['unit-name'] = unit_name ++ msg = dict(type='Deployer', ++ request='SetStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def RetryProvisioning(self, entities): ++ async def UpdateStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='RetryProvisioning', version=1, params=_params) ++ msg = dict(type='Deployer', ++ request='UpdateStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringResult) - async def SLALevel(self): ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), str] ++ Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='SLALevel', version=1, params=_params) ++ msg = dict(type='Deployer', ++ request='WatchAPIHostPorts', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetModelAgentVersion(self, version): ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnits(self, entities): + ''' - version : Number - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='SetModelAgentVersion', version=1, params=_params) - _params['version'] = version ++ msg = dict(type='Deployer', ++ request='WatchUnits', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetModelConstraints(self, application, constraints): - ''' - application : str - constraints : Value - Returns -> None - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Client', request='SetModelConstraints', version=1, params=_params) - _params['application'] = application - _params['constraints'] = constraints - reply = await self.rpc(msg) - return reply - ++class ExternalControllerUpdaterFacade(Type): ++ name = 'ExternalControllerUpdater' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'ExternalControllerInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ExternalControllerInfo'}}, ++ 'required': ['result', ++ 'error'], ++ 'type': 'object'}, ++ 'ExternalControllerInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ExternalControllerInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'SetExternalControllerInfoParams': {'additionalProperties': False, ++ 'properties': {'info': {'$ref': '#/definitions/ExternalControllerInfo'}}, ++ 'required': ['info'], ++ 'type': 'object'}, ++ 'SetExternalControllersInfoParams': {'additionalProperties': False, ++ 'properties': {'controllers': {'items': {'$ref': '#/definitions/SetExternalControllerInfoParams'}, ++ 'type': 'array'}}, ++ 'required': ['controllers'], ++ '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'}}, ++ 'properties': {'ExternalControllerInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ExternalControllerInfoResults'}}, ++ 'type': 'object'}, ++ 'SetExternalControllerInfo': {'properties': {'Params': {'$ref': '#/definitions/SetExternalControllersInfoParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchExternalControllers': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + + - @ReturnMapping(None) - async def SetSLALevel(self, creds, level): ++ @ReturnMapping(ExternalControllerInfoResults) ++ async def ExternalControllerInfo(self, entities): + ''' - creds : typing.Sequence<+T_co>[int] - level : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ExternalControllerInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='SetSLALevel', version=1, params=_params) - _params['creds'] = creds - _params['level'] = level ++ msg = dict(type='ExternalControllerUpdater', ++ request='ExternalControllerInfo', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StatusHistoryResults) - async def StatusHistory(self, requests): ++ @ReturnMapping(ErrorResults) ++ async def SetExternalControllerInfo(self, controllers): + ''' - requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest> - Returns -> typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult> ++ controllers : typing.Sequence[~SetExternalControllerInfoParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='StatusHistory', version=1, params=_params) - _params['requests'] = requests ++ msg = dict(type='ExternalControllerUpdater', ++ request='SetExternalControllerInfo', ++ version=1, ++ params=_params) ++ _params['controllers'] = controllers + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AllWatcherId) - async def WatchAll(self): ++ @ReturnMapping(StringsWatchResults) ++ async def WatchExternalControllers(self): + ''' + - Returns -> str ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Client', request='WatchAll', version=1, params=_params) ++ msg = dict(type='ExternalControllerUpdater', ++ request='WatchExternalControllers', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class CloudFacade(Type): - name = 'Cloud' ++class FanConfigurerFacade(Type): ++ name = 'FanConfigurer' + version = 1 - schema = {'definitions': {'Cloud': {'additionalProperties': False, - 'properties': {'auth-types': {'items': {'type': 'string'}, - 'type': 'array'}, - 'endpoint': {'type': 'string'}, - 'identity-endpoint': {'type': 'string'}, - 'regions': {'items': {'$ref': '#/definitions/CloudRegion'}, - 'type': 'array'}, - 'storage-endpoint': {'type': 'string'}, - 'type': {'type': 'string'}}, - 'required': ['type'], - 'type': 'object'}, - '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'}, - 'CloudCredentialResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'$ref': '#/definitions/CloudCredential'}}, - 'type': 'object'}, - 'CloudCredentialResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/CloudCredentialResult'}, - 'type': 'array'}}, - 'type': 'object'}, - 'CloudInstanceTypesConstraint': {'additionalProperties': False, - 'properties': {'cloud-tag': {'type': 'string'}, - 'constraints': {'$ref': '#/definitions/Value'}, - 'region': {'type': 'string'}}, - 'required': ['cloud-tag', - 'region'], - 'type': 'object'}, - 'CloudInstanceTypesConstraints': {'additionalProperties': False, - 'properties': {'constraints': {'items': {'$ref': '#/definitions/CloudInstanceTypesConstraint'}, - 'type': 'array'}}, - 'required': ['constraints'], - 'type': 'object'}, - 'CloudRegion': {'additionalProperties': False, - 'properties': {'endpoint': {'type': 'string'}, - 'identity-endpoint': {'type': 'string'}, - 'name': {'type': 'string'}, - 'storage-endpoint': {'type': 'string'}}, - 'required': ['name'], - 'type': 'object'}, - 'CloudResult': {'additionalProperties': False, - 'properties': {'cloud': {'$ref': '#/definitions/Cloud'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'type': 'object'}, - 'CloudResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/CloudResult'}, - 'type': 'array'}}, - 'type': 'object'}, - 'CloudsResult': {'additionalProperties': False, - 'properties': {'clouds': {'patternProperties': {'.*': {'$ref': '#/definitions/Cloud'}}, - 'type': 'object'}}, - 'type': 'object'}, - 'Entities': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, - 'type': 'array'}}, - 'required': ['entities'], ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'FanConfigEntry': {'additionalProperties': False, ++ 'properties': {'overlay': {'type': 'string'}, ++ 'underlay': {'type': 'string'}}, ++ 'required': ['underlay', 'overlay'], ++ 'type': 'object'}, ++ 'FanConfigResult': {'additionalProperties': False, ++ 'properties': {'fans': {'items': {'$ref': '#/definitions/FanConfigEntry'}, ++ 'type': 'array'}}, ++ 'required': ['fans'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ 'type': 'object'}}, ++ 'properties': {'FanConfig': {'properties': {'Result': {'$ref': '#/definitions/FanConfigResult'}}, + 'type': 'object'}, - 'Entity': {'additionalProperties': False, - 'properties': {'tag': {'type': 'string'}}, - 'required': ['tag'], - 'type': 'object'}, - 'Error': {'additionalProperties': False, ++ 'WatchForFanConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(FanConfigResult) ++ async def FanConfig(self): ++ ''' ++ ++ Returns -> typing.Sequence[~FanConfigEntry] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='FanConfigurer', ++ request='FanConfig', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForFanConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='FanConfigurer', ++ request='WatchForFanConfigChanges', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class FirewallRulesFacade(Type): ++ name = 'FirewallRules' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, - 'InstanceType': {'additionalProperties': False, - 'properties': {'arches': {'items': {'type': 'string'}, - 'type': 'array'}, - 'cost': {'type': 'integer'}, - 'cpu-cores': {'type': 'integer'}, - 'deprecated': {'type': 'boolean'}, - 'memory': {'type': 'integer'}, - 'name': {'type': 'string'}, - 'root-disk': {'type': 'integer'}, - 'virt-type': {'type': 'string'}}, - 'required': ['arches', 'cpu-cores', 'memory'], - 'type': 'object'}, - 'InstanceTypesResult': {'additionalProperties': False, - 'properties': {'cost-currency': {'type': 'string'}, - 'cost-divisor': {'type': 'integer'}, - 'cost-unit': {'type': 'string'}, - 'error': {'$ref': '#/definitions/Error'}, - 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, - 'type': 'array'}}, - 'type': 'object'}, - 'InstanceTypesResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, ++ 'FirewallRule': {'additionalProperties': False, ++ 'properties': {'known-service': {'type': 'string'}, ++ 'whitelist-cidrs': {'items': {'type': 'string'}, + 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'StringResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'type': 'string'}}, - 'required': ['result'], - 'type': 'object'}, - 'StringsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'StringsResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'UpdateCloudCredential': {'additionalProperties': False, - 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'credential'], - 'type': 'object'}, - 'UpdateCloudCredentials': {'additionalProperties': False, - 'properties': {'credentials': {'items': {'$ref': '#/definitions/UpdateCloudCredential'}, - 'type': 'array'}}, - 'type': 'object'}, - 'UserCloud': {'additionalProperties': False, - 'properties': {'cloud-tag': {'type': 'string'}, - 'user-tag': {'type': 'string'}}, - 'required': ['user-tag', 'cloud-tag'], - 'type': 'object'}, - 'UserClouds': {'additionalProperties': False, - 'properties': {'user-clouds': {'items': {'$ref': '#/definitions/UserCloud'}, - 'type': 'array'}}, - 'type': 'object'}, - 'Value': {'additionalProperties': False, - 'properties': {'arch': {'type': 'string'}, - 'container': {'type': 'string'}, - 'cores': {'type': 'integer'}, - 'cpu-power': {'type': 'integer'}, - 'instance-type': {'type': 'string'}, - 'mem': {'type': 'integer'}, - 'root-disk': {'type': 'integer'}, - 'spaces': {'items': {'type': 'string'}, - 'type': 'array'}, - 'tags': {'items': {'type': 'string'}, - 'type': 'array'}, - 'virt-type': {'type': 'string'}}, - 'type': 'object'}}, - 'properties': {'Cloud': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/CloudResults'}}, - 'type': 'object'}, - 'Clouds': {'properties': {'Result': {'$ref': '#/definitions/CloudsResult'}}, - 'type': 'object'}, - 'Credential': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/CloudCredentialResults'}}, - 'type': 'object'}, - 'DefaultCloud': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/CloudInstanceTypesConstraints'}, - 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, ++ 'required': ['known-service'], + 'type': 'object'}, - 'RevokeCredentials': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'FirewallRuleArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/FirewallRule'}, ++ 'type': 'array'}}, ++ 'required': ['args'], + 'type': 'object'}, - 'UpdateCredentials': {'properties': {'Params': {'$ref': '#/definitions/UpdateCloudCredentials'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'ListFirewallRulesResults': {'additionalProperties': False, ++ 'properties': {'Rules': {'items': {'$ref': '#/definitions/FirewallRule'}, ++ 'type': 'array'}}, ++ 'required': ['Rules'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'ListFirewallRules': {'properties': {'Result': {'$ref': '#/definitions/ListFirewallRulesResults'}}, + 'type': 'object'}, - 'UserCredentials': {'properties': {'Params': {'$ref': '#/definitions/UserClouds'}, - 'Result': {'$ref': '#/definitions/StringsResults'}}, - 'type': 'object'}}, ++ 'SetFirewallRules': {'properties': {'Params': {'$ref': '#/definitions/FirewallRuleArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - - - @ReturnMapping(CloudResults) - async def Cloud(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~CloudResult]<~CloudResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Cloud', request='Cloud', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - + + - @ReturnMapping(CloudsResult) - async def Clouds(self): ++ @ReturnMapping(ListFirewallRulesResults) ++ async def ListFirewallRules(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud> ++ Returns -> typing.Sequence[~FirewallRule] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='Clouds', version=1, params=_params) ++ msg = dict(type='FirewallRules', ++ request='ListFirewallRules', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(CloudCredentialResults) - async def Credential(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def SetFirewallRules(self, args): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult> ++ args : typing.Sequence[~FirewallRule] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='Credential', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='FirewallRules', ++ request='SetFirewallRules', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringResult) - async def DefaultCloud(self): - ''' ++class HostKeyReporterFacade(Type): ++ name = 'HostKeyReporter' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'SSHHostKeySet': {'additionalProperties': False, ++ 'properties': {'entity-keys': {'items': {'$ref': '#/definitions/SSHHostKeys'}, ++ 'type': 'array'}}, ++ 'required': ['entity-keys'], ++ 'type': 'object'}, ++ 'SSHHostKeys': {'additionalProperties': False, ++ 'properties': {'public-keys': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'public-keys'], ++ 'type': 'object'}}, ++ 'properties': {'ReportKeys': {'properties': {'Params': {'$ref': '#/definitions/SSHHostKeySet'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + - Returns -> typing.Union[_ForwardRef('Error'), str] ++ ++ @ReturnMapping(ErrorResults) ++ async def ReportKeys(self, entity_keys): ++ ''' ++ entity_keys : typing.Sequence[~SSHHostKeys] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='DefaultCloud', version=1, params=_params) - ++ msg = dict(type='HostKeyReporter', ++ request='ReportKeys', ++ version=1, ++ params=_params) ++ _params['entity-keys'] = entity_keys + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(InstanceTypesResults) - async def InstanceTypes(self, constraints): ++class KeyManagerFacade(Type): ++ name = 'KeyManager' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'ListSSHKeys': {'additionalProperties': False, ++ 'properties': {'entities': {'$ref': '#/definitions/Entities'}, ++ 'mode': {'type': 'boolean'}}, ++ 'required': ['entities', 'mode'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModifyUserSSHKeys': {'additionalProperties': False, ++ 'properties': {'ssh-keys': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', 'ssh-keys'], ++ 'type': 'object'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'AddKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'DeleteKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ImportKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ListKeys': {'properties': {'Params': {'$ref': '#/definitions/ListSSHKeys'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def AddKeys(self, ssh_keys, user): + ''' - constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint> - Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult> ++ ssh_keys : typing.Sequence[str] ++ user : str ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='InstanceTypes', version=1, params=_params) - _params['constraints'] = constraints ++ msg = dict(type='KeyManager', ++ request='AddKeys', ++ version=1, ++ params=_params) ++ _params['ssh-keys'] = ssh_keys ++ _params['user'] = user + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def RevokeCredentials(self, entities): ++ async def DeleteKeys(self, ssh_keys, user): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ssh_keys : typing.Sequence[str] ++ user : str ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='RevokeCredentials', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='KeyManager', ++ request='DeleteKeys', ++ version=1, ++ params=_params) ++ _params['ssh-keys'] = ssh_keys ++ _params['user'] = user + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def UpdateCredentials(self, credentials): ++ async def ImportKeys(self, ssh_keys, user): + ''' - credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ssh_keys : typing.Sequence[str] ++ user : str ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='UpdateCredentials', version=1, params=_params) - _params['credentials'] = credentials ++ msg = dict(type='KeyManager', ++ request='ImportKeys', ++ version=1, ++ params=_params) ++ _params['ssh-keys'] = ssh_keys ++ _params['user'] = user + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsResults) - async def UserCredentials(self, user_clouds): ++ async def ListKeys(self, entities, mode): + ''' - user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud> - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : Entities ++ mode : bool ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cloud', request='UserCredentials', version=1, params=_params) - _params['user-clouds'] = user_clouds ++ msg = dict(type='KeyManager', ++ request='ListKeys', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ _params['mode'] = mode + reply = await self.rpc(msg) + return reply + + + - class DeployerFacade(Type): - name = 'Deployer' ++class KeyUpdaterFacade(Type): ++ name = 'KeyUpdater' + version = 1 - schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, - 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, - 'type': 'array'}, - 'type': 'array'}}, - 'required': ['servers'], - 'type': 'object'}, - 'Address': {'additionalProperties': False, - 'properties': {'scope': {'type': 'string'}, - 'space-name': {'type': 'string'}, - 'type': {'type': 'string'}, - 'value': {'type': 'string'}}, - 'required': ['value', 'type', 'scope'], - 'type': 'object'}, - 'BytesResult': {'additionalProperties': False, - 'properties': {'result': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['result'], - 'type': 'object'}, - 'DeployerConnectionValues': {'additionalProperties': False, - 'properties': {'api-addresses': {'items': {'type': 'string'}, - 'type': 'array'}, - 'state-addresses': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['state-addresses', - 'api-addresses'], - 'type': 'object'}, - 'Entities': {'additionalProperties': False, ++ 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'}, - 'EntityPassword': {'additionalProperties': False, - 'properties': {'password': {'type': 'string'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'password'], - 'type': 'object'}, - 'EntityPasswords': {'additionalProperties': False, - 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, - 'type': 'array'}}, - 'required': ['changes'], - '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, - 'HostPort': {'additionalProperties': False, - 'properties': {'Address': {'$ref': '#/definitions/Address'}, - 'port': {'type': 'integer'}}, - 'required': ['Address', 'port'], - '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'NotifyWatchResult': {'additionalProperties': False, + 'properties': {'NotifyWatcherId': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['NotifyWatcherId'], + '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'}, ++ 'NotifyWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, + 'StringsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + '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'}}, - 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, - 'type': 'object'}, - 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, - 'type': 'object'}, - 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, - 'type': 'object'}, - 'ConnectionInfo': {'properties': {'Result': {'$ref': '#/definitions/DeployerConnectionValues'}}, - 'type': 'object'}, - 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/LifeResults'}}, - 'type': 'object'}, - 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'StateAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'AuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, + 'type': 'object'}, - 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}, - 'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, - 'type': 'object'}}, ++ 'WatchAuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - - - @ReturnMapping(StringsResult) - async def APIAddresses(self): - ''' - - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Deployer', request='APIAddresses', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - + + - @ReturnMapping(APIHostPortsResult) - async def APIHostPorts(self): ++ @ReturnMapping(StringsResults) ++ async def AuthorisedKeys(self, entities): + ''' - - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='APIHostPorts', version=1, params=_params) - ++ msg = dict(type='KeyUpdater', ++ request='AuthorisedKeys', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(BytesResult) - async def CACert(self): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchAuthorisedKeys(self, entities): + ''' - - Returns -> typing.Sequence<+T_co>[int] ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='CACert', version=1, params=_params) - ++ msg = dict(type='KeyUpdater', ++ request='WatchAuthorisedKeys', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(DeployerConnectionValues) - async def ConnectionInfo(self): - ''' - - Returns -> typing.Sequence<+T_co>[str] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Deployer', request='ConnectionInfo', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - ++class LifeFlagFacade(Type): ++ name = 'LifeFlag' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'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': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='Life', version=1, params=_params) ++ msg = dict(type='LifeFlag', ++ request='Life', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringResult) - async def ModelUUID(self): ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): + ''' - - Returns -> typing.Union[_ForwardRef('Error'), str] ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='ModelUUID', version=1, params=_params) - ++ msg = dict(type='LifeFlag', ++ request='Watch', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def Remove(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Deployer', request='Remove', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - ++class LogForwardingFacade(Type): ++ name = 'LogForwarding' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'LogForwardingGetLastSentParams': {'additionalProperties': False, ++ 'properties': {'ids': {'items': {'$ref': '#/definitions/LogForwardingID'}, ++ 'type': 'array'}}, ++ 'required': ['ids'], ++ 'type': 'object'}, ++ 'LogForwardingGetLastSentResult': {'additionalProperties': False, ++ 'properties': {'err': {'$ref': '#/definitions/Error'}, ++ 'record-id': {'type': 'integer'}, ++ 'record-timestamp': {'type': 'integer'}}, ++ 'required': ['record-id', ++ 'record-timestamp', ++ 'err'], ++ 'type': 'object'}, ++ 'LogForwardingGetLastSentResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/LogForwardingGetLastSentResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'LogForwardingID': {'additionalProperties': False, ++ 'properties': {'model': {'type': 'string'}, ++ 'sink': {'type': 'string'}}, ++ 'required': ['model', 'sink'], ++ 'type': 'object'}, ++ 'LogForwardingSetLastSentParam': {'additionalProperties': False, ++ 'properties': {'LogForwardingID': {'$ref': '#/definitions/LogForwardingID'}, ++ 'record-id': {'type': 'integer'}, ++ 'record-timestamp': {'type': 'integer'}}, ++ 'required': ['LogForwardingID', ++ 'record-id', ++ 'record-timestamp'], ++ 'type': 'object'}, ++ 'LogForwardingSetLastSentParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/LogForwardingSetLastSentParam'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'GetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingGetLastSentParams'}, ++ 'Result': {'$ref': '#/definitions/LogForwardingGetLastSentResults'}}, ++ 'type': 'object'}, ++ 'SetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingSetLastSentParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + + - @ReturnMapping(ErrorResults) - async def SetPasswords(self, changes): ++ @ReturnMapping(LogForwardingGetLastSentResults) ++ async def GetLastSent(self, ids): + ''' - changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~LogForwardingID] ++ Returns -> typing.Sequence[~LogForwardingGetLastSentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='SetPasswords', version=1, params=_params) - _params['changes'] = changes ++ msg = dict(type='LogForwarding', ++ request='GetLastSent', ++ version=1, ++ params=_params) ++ _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def SetStatus(self, entities): ++ async def SetLastSent(self, params): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~LogForwardingSetLastSentParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='SetStatus', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='LogForwarding', ++ request='SetLastSent', ++ version=1, ++ params=_params) ++ _params['params'] = params + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringsResult) - async def StateAddresses(self): - ''' - - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Deployer', request='StateAddresses', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - ++class LoggerFacade(Type): ++ name = 'Logger' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'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'}, ++ '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'}}, ++ 'properties': {'LoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'WatchLoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} + + - @ReturnMapping(ErrorResults) - async def UpdateStatus(self, entities): ++ @ReturnMapping(StringResults) ++ async def LoggingConfig(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='UpdateStatus', version=1, params=_params) ++ msg = dict(type='Logger', ++ request='LoggingConfig', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResult) - async def WatchAPIHostPorts(self): - ''' - - Returns -> typing.Union[str, _ForwardRef('Error')] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Deployer', request='WatchAPIHostPorts', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - - - - @ReturnMapping(StringsWatchResults) - async def WatchUnits(self, entities): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchLoggingConfig(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Deployer', request='WatchUnits', version=1, params=_params) ++ msg = dict(type='Logger', ++ request='WatchLoggingConfig', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class HostKeyReporterFacade(Type): - name = 'HostKeyReporter' ++class MachineActionsFacade(Type): ++ name = 'MachineActions' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, - 'properties': {'code': {'type': 'string'}, - 'info': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'], ++ schema = {'definitions': {'Action': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'receiver': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'receiver', 'name'], ++ 'type': 'object'}, ++ 'ActionExecutionResult': {'additionalProperties': False, ++ 'properties': {'action-tag': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'results': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['action-tag', 'status'], ++ 'type': 'object'}, ++ 'ActionExecutionResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ActionResult': {'additionalProperties': False, ++ 'properties': {'action': {'$ref': '#/definitions/Action'}, ++ 'completed': {'format': 'date-time', ++ 'type': 'string'}, ++ 'enqueued': {'format': 'date-time', ++ 'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'message': {'type': 'string'}, ++ 'output': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'started': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, + 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'SSHHostKeySet': {'additionalProperties': False, - 'properties': {'entity-keys': {'items': {'$ref': '#/definitions/SSHHostKeys'}, - 'type': 'array'}}, - 'required': ['entity-keys'], ++ 'ActionResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}}, + 'type': 'object'}, - 'SSHHostKeys': {'additionalProperties': False, - 'properties': {'public-keys': {'items': {'type': 'string'}, - 'type': 'array'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'public-keys'], - 'type': 'object'}}, - 'properties': {'ReportKeys': {'properties': {'Params': {'$ref': '#/definitions/SSHHostKeySet'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(ErrorResults) - async def ReportKeys(self, entity_keys): - ''' - entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='HostKeyReporter', request='ReportKeys', version=1, params=_params) - _params['entity-keys'] = entity_keys - reply = await self.rpc(msg) - return reply - - - - class KeyManagerFacade(Type): - name = 'KeyManager' - version = 1 - schema = {'definitions': {'Entities': {'additionalProperties': False, ++ 'ActionsByReceiver': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'receiver': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ActionsByReceivers': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'}, ++ 'type': 'array'}}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, - 'ListSSHKeys': {'additionalProperties': False, - 'properties': {'entities': {'$ref': '#/definitions/Entities'}, - 'mode': {'type': 'boolean'}}, - 'required': ['entities', 'mode'], - 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'ModifyUserSSHKeys': {'additionalProperties': False, - 'properties': {'ssh-keys': {'items': {'type': 'string'}, ++ 'StringsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'type': 'string'}, + 'type': 'array'}, - 'user': {'type': 'string'}}, - 'required': ['user', 'ssh-keys'], - 'type': 'object'}, - 'StringsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'StringsResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'AddKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ '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'}}, ++ 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, - 'DeleteKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'ImportKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'ListKeys': {'properties': {'Params': {'$ref': '#/definitions/ListSSHKeys'}, - 'Result': {'$ref': '#/definitions/StringsResults'}}, - 'type': 'object'}}, ++ 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RunningActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, ++ 'type': 'object'}, ++ 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(ErrorResults) - async def AddKeys(self, ssh_keys, user): ++ ++ @ReturnMapping(ActionResults) ++ async def Actions(self, entities): + ''' - ssh_keys : typing.Sequence<+T_co>[str] - user : str - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyManager', request='AddKeys', version=1, params=_params) - _params['ssh-keys'] = ssh_keys - _params['user'] = user ++ msg = dict(type='MachineActions', ++ request='Actions', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def DeleteKeys(self, ssh_keys, user): ++ async def BeginActions(self, entities): + ''' - ssh_keys : typing.Sequence<+T_co>[str] - user : str - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyManager', request='DeleteKeys', version=1, params=_params) - _params['ssh-keys'] = ssh_keys - _params['user'] = user ++ msg = dict(type='MachineActions', ++ request='BeginActions', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def ImportKeys(self, ssh_keys, user): ++ async def FinishActions(self, results): + ''' - ssh_keys : typing.Sequence<+T_co>[str] - user : str - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ results : typing.Sequence[~ActionExecutionResult] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyManager', request='ImportKeys', version=1, params=_params) - _params['ssh-keys'] = ssh_keys - _params['user'] = user ++ msg = dict(type='MachineActions', ++ request='FinishActions', ++ version=1, ++ params=_params) ++ _params['results'] = results + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringsResults) - async def ListKeys(self, entities, mode): ++ @ReturnMapping(ActionsByReceivers) ++ async def RunningActions(self, entities): + ''' - entities : Entities - mode : bool - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyManager', request='ListKeys', version=1, params=_params) ++ msg = dict(type='MachineActions', ++ request='RunningActions', ++ version=1, ++ params=_params) + _params['entities'] = entities - _params['mode'] = mode + reply = await self.rpc(msg) + return reply + + + - class KeyUpdaterFacade(Type): - name = 'KeyUpdater' ++ @ReturnMapping(StringsWatchResults) ++ async def WatchActionNotifications(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineActions', ++ request='WatchActionNotifications', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class MachineUndertakerFacade(Type): ++ name = 'MachineUndertaker' + version = 1 + schema = {'definitions': {'Entities': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, ++ 'EntitiesResult': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'EntitiesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'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'}, - 'StringsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'StringsResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'AuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/StringsResults'}}, - 'type': 'object'}, - 'WatchAuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ 'ProviderInterfaceInfo': {'additionalProperties': False, ++ 'properties': {'interface-name': {'type': 'string'}, ++ 'mac-address': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}}, ++ 'required': ['interface-name', ++ 'mac-address', ++ 'provider-id'], ++ 'type': 'object'}, ++ 'ProviderInterfaceInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'interfaces': {'items': {'$ref': '#/definitions/ProviderInterfaceInfo'}, ++ 'type': 'array'}, ++ 'machine-tag': {'type': 'string'}}, ++ 'required': ['machine-tag', ++ 'interfaces'], ++ 'type': 'object'}, ++ 'ProviderInterfaceInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ProviderInterfaceInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'AllMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/EntitiesResults'}}, ++ 'type': 'object'}, ++ 'CompleteMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}}, ++ 'type': 'object'}, ++ 'GetMachineProviderInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ProviderInterfaceInfoResults'}}, ++ 'type': 'object'}, ++ 'WatchMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(StringsResults) - async def AuthorisedKeys(self, entities): ++ ++ @ReturnMapping(EntitiesResults) ++ async def AllMachineRemovals(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~EntitiesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineUndertaker', ++ request='AllMachineRemovals', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def CompleteMachineRemovals(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineUndertaker', ++ request='CompleteMachineRemovals', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ProviderInterfaceInfoResults) ++ async def GetMachineProviderInterfaceInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProviderInterfaceInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyUpdater', request='AuthorisedKeys', version=1, params=_params) ++ msg = dict(type='MachineUndertaker', ++ request='GetMachineProviderInterfaceInfo', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) - async def WatchAuthorisedKeys(self, entities): ++ async def WatchMachineRemovals(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='KeyUpdater', request='WatchAuthorisedKeys', version=1, params=_params) ++ msg = dict(type='MachineUndertaker', ++ request='WatchMachineRemovals', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class LifeFlagFacade(Type): - name = 'LifeFlag' ++class MachinerFacade(Type): ++ name = 'Machiner' + version = 1 - schema = {'definitions': {'Entities': {'additionalProperties': False, ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ '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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ 'type': 'object'}, ++ 'JobsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['jobs'], ++ 'type': 'object'}, ++ 'JobsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/JobsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineAddresses': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'addresses'], ++ 'type': 'object'}, ++ 'NetworkConfig': {'additionalProperties': False, ++ 'properties': {'address': {'type': 'string'}, ++ 'cidr': {'type': 'string'}, ++ 'config-type': {'type': 'string'}, ++ 'device-index': {'type': 'integer'}, ++ 'disabled': {'type': 'boolean'}, ++ 'dns-search-domains': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'dns-servers': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'gateway-address': {'type': 'string'}, ++ 'interface-name': {'type': 'string'}, ++ 'interface-type': {'type': 'string'}, ++ 'is-default-gateway': {'type': 'boolean'}, ++ 'mac-address': {'type': 'string'}, ++ 'mtu': {'type': 'integer'}, ++ 'no-auto-start': {'type': 'boolean'}, ++ 'parent-interface-name': {'type': 'string'}, ++ 'provider-address-id': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'provider-space-id': {'type': 'string'}, ++ 'provider-subnet-id': {'type': 'string'}, ++ 'provider-vlan-id': {'type': 'string'}, ++ 'routes': {'items': {'$ref': '#/definitions/NetworkRoute'}, ++ 'type': 'array'}, ++ 'vlan-tag': {'type': 'integer'}}, ++ 'required': ['device-index', ++ 'mac-address', ++ 'cidr', ++ 'mtu', ++ 'provider-id', ++ 'provider-subnet-id', ++ 'provider-space-id', ++ 'provider-address-id', ++ 'provider-vlan-id', ++ 'vlan-tag', ++ 'interface-name', ++ 'parent-interface-name', ++ 'interface-type', ++ 'disabled'], ++ 'type': 'object'}, ++ 'NetworkRoute': {'additionalProperties': False, ++ 'properties': {'destination-cidr': {'type': 'string'}, ++ 'gateway-ip': {'type': 'string'}, ++ 'metric': {'type': 'integer'}}, ++ 'required': ['destination-cidr', ++ 'gateway-ip', ++ 'metric'], ++ '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': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'type': 'object'}, ++ 'SetMachineNetworkConfig': {'additionalProperties': False, ++ 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'config'], ++ 'type': 'object'}, ++ 'SetMachinesAddresses': {'additionalProperties': False, ++ 'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'}, ++ 'type': 'array'}}, ++ 'required': ['machine-addresses'], ++ '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'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Jobs': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/JobsResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'SetMachineAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, ++ 'type': 'object'}, ++ 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, + 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(LifeResults) - async def Life(self, entities): ++ ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Machiner', ++ request='APIAddresses', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Machiner', ++ request='APIHostPorts', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnsureDead(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LifeFlag', request='Life', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='EnsureDead', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def Watch(self, entities): ++ @ReturnMapping(JobsResults) ++ async def Jobs(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~JobsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LifeFlag', request='Watch', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='Jobs', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class LogForwardingFacade(Type): - name = 'LogForwarding' - version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, - 'properties': {'code': {'type': 'string'}, - 'info': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'}, - 'LogForwardingGetLastSentParams': {'additionalProperties': False, - 'properties': {'ids': {'items': {'$ref': '#/definitions/LogForwardingID'}, - 'type': 'array'}}, - 'required': ['ids'], - 'type': 'object'}, - 'LogForwardingGetLastSentResult': {'additionalProperties': False, - 'properties': {'err': {'$ref': '#/definitions/Error'}, - 'record-id': {'type': 'integer'}, - 'record-timestamp': {'type': 'integer'}}, - 'required': ['record-id', - 'record-timestamp', - 'err'], - 'type': 'object'}, - 'LogForwardingGetLastSentResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/LogForwardingGetLastSentResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'LogForwardingID': {'additionalProperties': False, - 'properties': {'model': {'type': 'string'}, - 'sink': {'type': 'string'}}, - 'required': ['model', 'sink'], - 'type': 'object'}, - 'LogForwardingSetLastSentParam': {'additionalProperties': False, - 'properties': {'LogForwardingID': {'$ref': '#/definitions/LogForwardingID'}, - 'record-id': {'type': 'integer'}, - 'record-timestamp': {'type': 'integer'}}, - 'required': ['LogForwardingID', - 'record-id', - 'record-timestamp'], - 'type': 'object'}, - 'LogForwardingSetLastSentParams': {'additionalProperties': False, - 'properties': {'params': {'items': {'$ref': '#/definitions/LogForwardingSetLastSentParam'}, - 'type': 'array'}}, - 'required': ['params'], - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, - 'properties': {'GetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingGetLastSentParams'}, - 'Result': {'$ref': '#/definitions/LogForwardingGetLastSentResults'}}, - 'type': 'object'}, - 'SetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingSetLastSentParams'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}}, - 'type': 'object'} - ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Machiner', ++ request='Life', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ + - @ReturnMapping(LogForwardingGetLastSentResults) - async def GetLastSent(self, ids): ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): + ''' - ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID> - Returns -> typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult> ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LogForwarding', request='GetLastSent', version=1, params=_params) - _params['ids'] = ids ++ msg = dict(type='Machiner', ++ request='ModelUUID', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def SetLastSent(self, params): ++ async def SetMachineAddresses(self, machine_addresses): + ''' - params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ machine_addresses : typing.Sequence[~MachineAddresses] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LogForwarding', request='SetLastSent', version=1, params=_params) - _params['params'] = params ++ msg = dict(type='Machiner', ++ request='SetMachineAddresses', ++ version=1, ++ params=_params) ++ _params['machine-addresses'] = machine_addresses + reply = await self.rpc(msg) + return reply + + + - class LoggerFacade(Type): - name = 'Logger' - version = 1 - 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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'Macaroon': {'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'}, - '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'}}, - 'properties': {'LoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/StringResults'}}, - 'type': 'object'}, - 'WatchLoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, - 'type': 'object'} - ++ @ReturnMapping(None) ++ async def SetObservedNetworkConfig(self, config, tag): ++ ''' ++ config : typing.Sequence[~NetworkConfig] ++ tag : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Machiner', ++ request='SetObservedNetworkConfig', ++ version=1, ++ params=_params) ++ _params['config'] = config ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply + - @ReturnMapping(StringResults) - async def LoggingConfig(self, entities): ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetProviderNetworkConfig(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Logger', request='LoggingConfig', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='SetProviderNetworkConfig', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def WatchLoggingConfig(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Logger', request='WatchLoggingConfig', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='SetStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class MachineActionsFacade(Type): - name = 'MachineActions' - version = 1 - schema = {'definitions': {'Action': {'additionalProperties': False, - 'properties': {'name': {'type': 'string'}, - 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}, - 'receiver': {'type': 'string'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'receiver', 'name'], - 'type': 'object'}, - 'ActionExecutionResult': {'additionalProperties': False, - 'properties': {'action-tag': {'type': 'string'}, - 'message': {'type': 'string'}, - 'results': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}, - 'status': {'type': 'string'}}, - 'required': ['action-tag', 'status'], - 'type': 'object'}, - 'ActionExecutionResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'}, - 'type': 'array'}}, - 'type': 'object'}, - 'ActionResult': {'additionalProperties': False, - 'properties': {'action': {'$ref': '#/definitions/Action'}, - 'completed': {'format': 'date-time', - 'type': 'string'}, - 'enqueued': {'format': 'date-time', - 'type': 'string'}, - 'error': {'$ref': '#/definitions/Error'}, - 'message': {'type': 'string'}, - 'output': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}, - 'started': {'format': 'date-time', - 'type': 'string'}, - 'status': {'type': 'string'}}, - 'type': 'object'}, - 'ActionResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, - 'type': 'array'}}, - 'type': 'object'}, - 'ActionsByReceiver': {'additionalProperties': False, - 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, - 'type': 'array'}, - 'error': {'$ref': '#/definitions/Error'}, - 'receiver': {'type': 'string'}}, - 'type': 'object'}, - 'ActionsByReceivers': {'additionalProperties': False, - 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'}, - 'type': 'array'}}, - '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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'}, - 'Macaroon': {'additionalProperties': False, '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'}}, - 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ActionResults'}}, - 'type': 'object'}, - 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'RunningActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, - 'type': 'object'}, - 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(ActionResults) - async def Actions(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def UpdateStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineActions', request='Actions', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='UpdateStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def BeginActions(self, entities): ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineActions', request='BeginActions', version=1, params=_params) ++ msg = dict(type='Machiner', ++ request='Watch', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def FinishActions(self, results): ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): + ''' - results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineActions', request='FinishActions', version=1, params=_params) - _params['results'] = results ++ msg = dict(type='Machiner', ++ request='WatchAPIHostPorts', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ActionsByReceivers) - async def RunningActions(self, entities): ++class MeterStatusFacade(Type): ++ name = 'MeterStatus' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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'}}, ++ 'properties': {'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MeterStatusResults'}}, ++ 'type': 'object'}, ++ 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(MeterStatusResults) ++ async def GetMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MeterStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineActions', request='RunningActions', version=1, params=_params) ++ msg = dict(type='MeterStatus', ++ request='GetMeterStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringsWatchResults) - async def WatchActionNotifications(self, entities): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineActions', request='WatchActionNotifications', version=1, params=_params) ++ msg = dict(type='MeterStatus', ++ request='WatchMeterStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class MachineUndertakerFacade(Type): - name = 'MachineUndertaker' ++class MetricsManagerFacade(Type): ++ name = 'MetricsManager' + version = 1 + schema = {'definitions': {'Entities': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, - 'EntitiesResult': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, - 'type': 'array'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'required': ['entities'], - 'type': 'object'}, - 'EntitiesResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, - 'Macaroon': {'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'}, - 'ProviderInterfaceInfo': {'additionalProperties': False, - 'properties': {'interface-name': {'type': 'string'}, - 'mac-address': {'type': 'string'}, - 'provider-id': {'type': 'string'}}, - 'required': ['interface-name', - 'mac-address', - 'provider-id'], - 'type': 'object'}, - 'ProviderInterfaceInfoResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'interfaces': {'items': {'$ref': '#/definitions/ProviderInterfaceInfo'}, - 'type': 'array'}, - 'machine-tag': {'type': 'string'}}, - 'required': ['machine-tag', - 'interfaces'], - 'type': 'object'}, - 'ProviderInterfaceInfoResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ProviderInterfaceInfoResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'AllMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/EntitiesResults'}}, - 'type': 'object'}, - 'CompleteMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}}, - 'type': 'object'}, - 'GetMachineProviderInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ProviderInterfaceInfoResults'}}, - 'type': 'object'}, - 'WatchMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'AddJujuMachineMetrics': {'type': 'object'}, ++ 'CleanupOldMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SendMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - - - @ReturnMapping(EntitiesResults) - async def AllMachineRemovals(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MachineUndertaker', request='AllMachineRemovals', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - + + + @ReturnMapping(None) - async def CompleteMachineRemovals(self, entities): ++ async def AddJujuMachineMetrics(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineUndertaker', request='CompleteMachineRemovals', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MetricsManager', ++ request='AddJujuMachineMetrics', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ProviderInterfaceInfoResults) - async def GetMachineProviderInterfaceInfo(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def CleanupOldMetrics(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineUndertaker', request='GetMachineProviderInterfaceInfo', version=1, params=_params) ++ msg = dict(type='MetricsManager', ++ request='CleanupOldMetrics', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def WatchMachineRemovals(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def SendMetrics(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineUndertaker', request='WatchMachineRemovals', version=1, params=_params) ++ msg = dict(type='MetricsManager', ++ request='SendMetrics', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class MachinerFacade(Type): - name = 'Machiner' ++class MigrationFlagFacade(Type): ++ name = 'MigrationFlag' + version = 1 - schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, - 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, - 'type': 'array'}, - 'type': 'array'}}, - 'required': ['servers'], - 'type': 'object'}, - 'Address': {'additionalProperties': False, - 'properties': {'scope': {'type': 'string'}, - 'space-name': {'type': 'string'}, - 'type': {'type': 'string'}, - 'value': {'type': 'string'}}, - 'required': ['value', 'type', 'scope'], - 'type': 'object'}, - 'BytesResult': {'additionalProperties': False, - 'properties': {'result': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['result'], - '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'}, - '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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'}, - 'HostPort': {'additionalProperties': False, - 'properties': {'Address': {'$ref': '#/definitions/Address'}, - 'port': {'type': 'integer'}}, - 'required': ['Address', 'port'], - 'type': 'object'}, - 'JobsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'jobs': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['jobs'], - 'type': 'object'}, - 'JobsResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/JobsResult'}, - 'type': 'array'}}, - 'required': ['results'], - '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'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'MachineAddresses': {'additionalProperties': False, - 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, - 'type': 'array'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'addresses'], - 'type': 'object'}, - 'NetworkConfig': {'additionalProperties': False, - 'properties': {'address': {'type': 'string'}, - 'cidr': {'type': 'string'}, - 'config-type': {'type': 'string'}, - 'device-index': {'type': 'integer'}, - 'disabled': {'type': 'boolean'}, - 'dns-search-domains': {'items': {'type': 'string'}, - 'type': 'array'}, - 'dns-servers': {'items': {'type': 'string'}, - 'type': 'array'}, - 'gateway-address': {'type': 'string'}, - 'interface-name': {'type': 'string'}, - 'interface-type': {'type': 'string'}, - 'mac-address': {'type': 'string'}, - 'mtu': {'type': 'integer'}, - 'no-auto-start': {'type': 'boolean'}, - 'parent-interface-name': {'type': 'string'}, - 'provider-address-id': {'type': 'string'}, - 'provider-id': {'type': 'string'}, - 'provider-space-id': {'type': 'string'}, - 'provider-subnet-id': {'type': 'string'}, - 'provider-vlan-id': {'type': 'string'}, - 'routes': {'items': {'$ref': '#/definitions/NetworkRoute'}, - 'type': 'array'}, - 'vlan-tag': {'type': 'integer'}}, - 'required': ['device-index', - 'mac-address', - 'cidr', - 'mtu', - 'provider-id', - 'provider-subnet-id', - 'provider-space-id', - 'provider-address-id', - 'provider-vlan-id', - 'vlan-tag', - 'interface-name', - 'parent-interface-name', - 'interface-type', - 'disabled'], - 'type': 'object'}, - 'NetworkRoute': {'additionalProperties': False, - 'properties': {'destination-cidr': {'type': 'string'}, - 'gateway-ip': {'type': 'string'}, - 'metric': {'type': 'integer'}}, - 'required': ['destination-cidr', - 'gateway-ip', - 'metric'], - 'type': 'object'}, ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'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'}, - 'SetMachineNetworkConfig': {'additionalProperties': False, - 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'}, - 'type': 'array'}, - 'tag': {'type': 'string'}}, - 'required': ['tag', 'config'], - 'type': 'object'}, - 'SetMachinesAddresses': {'additionalProperties': False, - 'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'}, - 'type': 'array'}}, - 'required': ['machine-addresses'], - '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'}, - 'StringsResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}}, - 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, - 'type': 'object'}, - 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'PhaseResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'phase': {'type': 'string'}}, + 'type': 'object'}, - 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'PhaseResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/PhaseResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'Phase': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/PhaseResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(PhaseResults) ++ async def Phase(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~PhaseResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationFlag', ++ request='Phase', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationFlag', ++ request='Watch', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class MigrationMasterFacade(Type): ++ name = 'MigrationMaster' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], + 'type': 'object'}, - 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, - 'Jobs': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/JobsResults'}}, - 'type': 'object'}, - 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/LifeResults'}}, - 'type': 'object'}, - 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'SetMachineAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MasterMigrationStatus': {'additionalProperties': False, ++ 'properties': {'migration-id': {'type': 'string'}, ++ 'phase': {'type': 'string'}, ++ 'phase-changed-time': {'format': 'date-time', ++ 'type': 'string'}, ++ 'spec': {'$ref': '#/definitions/MigrationSpec'}}, ++ 'required': ['spec', ++ 'migration-id', ++ 'phase', ++ 'phase-changed-time'], ++ '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'}, - 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, - 'type': 'object'}, - 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'MigrationSpec': {'additionalProperties': False, ++ 'properties': {'model-tag': {'type': 'string'}, ++ 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}}, ++ 'required': ['model-tag', 'target-info'], ++ 'type': 'object'}, ++ 'MigrationTargetInfo': {'additionalProperties': False, ++ 'properties': {'addrs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'auth-tag': {'type': 'string'}, ++ 'ca-cert': {'type': 'string'}, ++ 'controller-tag': {'type': 'string'}, ++ 'macaroons': {'type': 'string'}, ++ 'password': {'type': 'string'}}, ++ 'required': ['controller-tag', ++ 'addrs', ++ 'ca-cert', ++ 'auth-tag'], ++ 'type': 'object'}, ++ 'MinionReports': {'additionalProperties': False, ++ 'properties': {'failed': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'migration-id': {'type': 'string'}, ++ 'phase': {'type': 'string'}, ++ 'success-count': {'type': 'integer'}, ++ 'unknown-count': {'type': 'integer'}, ++ 'unknown-sample': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['migration-id', ++ 'phase', ++ 'success-count', ++ 'unknown-count', ++ 'unknown-sample', ++ 'failed'], ++ 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ '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'}, - 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ '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'}, ++ 'SetMigrationPhaseArgs': {'additionalProperties': False, ++ 'properties': {'phase': {'type': 'string'}}, ++ 'required': ['phase'], ++ 'type': 'object'}, ++ 'SetMigrationStatusMessageArgs': {'additionalProperties': False, ++ 'properties': {'message': {'type': 'string'}}, ++ 'required': ['message'], ++ 'type': 'object'}}, ++ 'properties': {'Export': {'properties': {'Result': {'$ref': '#/definitions/SerializedModel'}}, ++ 'type': 'object'}, ++ 'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}}, ++ 'type': 'object'}, ++ 'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}}, ++ 'type': 'object'}, ++ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}}, + 'type': 'object'}, - 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'Prechecks': {'type': 'object'}, ++ 'Reap': {'type': 'object'}, ++ 'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}}, ++ 'type': 'object'}, ++ 'SetStatusMessage': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationStatusMessageArgs'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, - 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}}, ++ 'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(StringsResult) - async def APIAddresses(self): ++ ++ @ReturnMapping(SerializedModel) ++ async def Export(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[typing.Sequence[int], typing.Sequence[str], typing.Sequence[~SerializedModelTools]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='APIAddresses', version=1, params=_params) ++ msg = dict(type='MigrationMaster', ++ request='Export', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(APIHostPortsResult) - async def APIHostPorts(self): ++ @ReturnMapping(MasterMigrationStatus) ++ async def MigrationStatus(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ Returns -> typing.Union[str, _ForwardRef('MigrationSpec')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='APIHostPorts', version=1, params=_params) ++ msg = dict(type='MigrationMaster', ++ request='MigrationStatus', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(BytesResult) - async def CACert(self): ++ @ReturnMapping(MinionReports) ++ async def MinionReports(self): + ''' + - Returns -> typing.Sequence<+T_co>[int] ++ Returns -> typing.Union[typing.Sequence[str], str, int] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='CACert', version=1, params=_params) ++ msg = dict(type='MigrationMaster', ++ request='MinionReports', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def EnsureDead(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ @ReturnMapping(MigrationModelInfo) ++ async def ModelInfo(self): + ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Machiner', request='EnsureDead', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply + - - - @ReturnMapping(JobsResults) - async def Jobs(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~JobsResult]<~JobsResult> ++ Returns -> typing.Union[_ForwardRef('Number'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='Jobs', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - ++ msg = dict(type='MigrationMaster', ++ request='ModelInfo', ++ version=1, ++ params=_params) + - - @ReturnMapping(LifeResults) - async def Life(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Machiner', request='Life', version=1, params=_params) - _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringResult) - async def ModelUUID(self): ++ @ReturnMapping(None) ++ async def Prechecks(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), str] ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='ModelUUID', version=1, params=_params) ++ msg = dict(type='MigrationMaster', ++ request='Prechecks', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SetMachineAddresses(self, machine_addresses): ++ @ReturnMapping(None) ++ async def Reap(self): + ''' - machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='SetMachineAddresses', version=1, params=_params) - _params['machine-addresses'] = machine_addresses ++ msg = dict(type='MigrationMaster', ++ request='Reap', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) - async def SetObservedNetworkConfig(self, config, tag): ++ async def SetPhase(self, phase): + ''' - config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> - tag : str ++ phase : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='SetObservedNetworkConfig', version=1, params=_params) - _params['config'] = config - _params['tag'] = tag ++ msg = dict(type='MigrationMaster', ++ request='SetPhase', ++ version=1, ++ params=_params) ++ _params['phase'] = phase + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SetProviderNetworkConfig(self, entities): ++ @ReturnMapping(None) ++ async def SetStatusMessage(self, message): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ message : str ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='SetProviderNetworkConfig', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MigrationMaster', ++ request='SetStatusMessage', ++ version=1, ++ params=_params) ++ _params['message'] = message + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SetStatus(self, entities): - ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ @ReturnMapping(NotifyWatchResult) ++ async def Watch(self): + ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Machiner', request='SetStatus', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - + - - @ReturnMapping(ErrorResults) - async def UpdateStatus(self, entities): - ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='UpdateStatus', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - - ++ msg = dict(type='MigrationMaster', ++ request='Watch', ++ version=1, ++ params=_params) + - @ReturnMapping(NotifyWatchResults) - async def Watch(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Machiner', request='Watch', version=1, params=_params) - _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) - async def WatchAPIHostPorts(self): ++ async def WatchMinionReports(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Machiner', request='WatchAPIHostPorts', version=1, params=_params) ++ msg = dict(type='MigrationMaster', ++ request='WatchMinionReports', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class MeterStatusFacade(Type): - name = 'MeterStatus' ++class MigrationMinionFacade(Type): ++ name = 'MigrationMinion' + version = 1 - 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, ++ schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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'}, ++ 'MinionReport': {'additionalProperties': False, ++ 'properties': {'migration-id': {'type': 'string'}, ++ 'phase': {'type': 'string'}, ++ 'success': {'type': 'boolean'}}, ++ 'required': ['migration-id', ++ 'phase', ++ 'success'], ++ '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': {'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/MeterStatusResults'}}, - 'type': 'object'}, - 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(MeterStatusResults) - async def GetMeterStatus(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MeterStatus', request='GetMeterStatus', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - - - - @ReturnMapping(NotifyWatchResults) - async def WatchMeterStatus(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MeterStatus', request='WatchMeterStatus', version=1, params=_params) - _params['entities'] = entities - reply = await self.rpc(msg) - return reply - - - - class MetricsManagerFacade(Type): - name = 'MetricsManager' - version = 1 - 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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], ++ 'type': 'object'}}, ++ 'properties': {'Report': {'properties': {'Params': {'$ref': '#/definitions/MinionReport'}}, + 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, - 'properties': {'AddJujuMachineMetrics': {'type': 'object'}, - 'CleanupOldMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'SendMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}}, ++ 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(None) - async def AddJujuMachineMetrics(self): ++ async def Report(self, migration_id, phase, success): + ''' - ++ migration_id : str ++ phase : str ++ success : bool + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MetricsManager', request='AddJujuMachineMetrics', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - - - - @ReturnMapping(ErrorResults) - async def CleanupOldMetrics(self, entities): - ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MetricsManager', request='CleanupOldMetrics', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MigrationMinion', ++ request='Report', ++ version=1, ++ params=_params) ++ _params['migration-id'] = migration_id ++ _params['phase'] = phase ++ _params['success'] = success + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SendMetrics(self, entities): ++ @ReturnMapping(NotifyWatchResult) ++ async def Watch(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MetricsManager', request='SendMetrics', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MigrationMinion', ++ request='Watch', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class MigrationFlagFacade(Type): - name = 'MigrationFlag' ++class MigrationStatusWatcherFacade(Type): ++ name = 'MigrationStatusWatcher' + version = 1 - 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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'Macaroon': {'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'}, - 'PhaseResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'phase': {'type': 'string'}}, - 'type': 'object'}, - 'PhaseResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/PhaseResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'Phase': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/PhaseResults'}}, - 'type': 'object'}, - 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ schema = {'definitions': {'MigrationStatus': {'additionalProperties': False, ++ 'properties': {'attempt': {'type': 'integer'}, ++ 'migration-id': {'type': 'string'}, ++ 'phase': {'type': 'string'}, ++ 'source-api-addrs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'source-ca-cert': {'type': 'string'}, ++ 'target-api-addrs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'target-ca-cert': {'type': 'string'}}, ++ 'required': ['migration-id', ++ 'attempt', ++ 'phase', ++ 'source-api-addrs', ++ 'source-ca-cert', ++ 'target-api-addrs', ++ 'target-ca-cert'], ++ 'type': 'object'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MigrationStatus'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(PhaseResults) - async def Phase(self, entities): ++ ++ @ReturnMapping(MigrationStatus) ++ async def Next(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult> ++ ++ Returns -> typing.Union[int, str, typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationFlag', request='Phase', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MigrationStatusWatcher', ++ request='Next', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def Watch(self, entities): ++ @ReturnMapping(None) ++ async def Stop(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationFlag', request='Watch', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='MigrationStatusWatcher', ++ request='Stop', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class MigrationMasterFacade(Type): - name = 'MigrationMaster' ++class MigrationTargetFacade(Type): ++ name = 'MigrationTarget' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ schema = {'definitions': {'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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'MasterMigrationStatus': {'additionalProperties': False, - 'properties': {'migration-id': {'type': 'string'}, - 'phase': {'type': 'string'}, - 'phase-changed-time': {'format': 'date-time', - 'type': 'string'}, - 'spec': {'$ref': '#/definitions/MigrationSpec'}}, - 'required': ['spec', - 'migration-id', - 'phase', - 'phase-changed-time'], - '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'}, - 'MigrationSpec': {'additionalProperties': False, - 'properties': {'model-tag': {'type': 'string'}, - 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}}, - 'required': ['model-tag', 'target-info'], - 'type': 'object'}, - 'MigrationTargetInfo': {'additionalProperties': False, - 'properties': {'addrs': {'items': {'type': 'string'}, - 'type': 'array'}, - 'auth-tag': {'type': 'string'}, - 'ca-cert': {'type': 'string'}, - 'controller-tag': {'type': 'string'}, - 'macaroons': {'type': 'string'}, - 'password': {'type': 'string'}}, - 'required': ['controller-tag', - 'addrs', - 'ca-cert', - 'auth-tag'], - 'type': 'object'}, - 'MinionReports': {'additionalProperties': False, - 'properties': {'failed': {'items': {'type': 'string'}, - 'type': 'array'}, - 'migration-id': {'type': 'string'}, - 'phase': {'type': 'string'}, - 'success-count': {'type': 'integer'}, - 'unknown-count': {'type': 'integer'}, - 'unknown-sample': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['migration-id', - 'phase', - 'success-count', - 'unknown-count', - 'unknown-sample', - 'failed'], - 'type': 'object'}, - 'NotifyWatchResult': {'additionalProperties': False, - 'properties': {'NotifyWatcherId': {'type': 'string'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'required': ['NotifyWatcherId'], - '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'}, - 'SetMigrationPhaseArgs': {'additionalProperties': False, - 'properties': {'phase': {'type': 'string'}}, - 'required': ['phase'], - 'type': 'object'}, - 'SetMigrationStatusMessageArgs': {'additionalProperties': False, - 'properties': {'message': {'type': 'string'}}, - 'required': ['message'], - 'type': 'object'}}, - 'properties': {'Export': {'properties': {'Result': {'$ref': '#/definitions/SerializedModel'}}, ++ 'type': 'object'}}, ++ 'properties': {'Abort': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}}, ++ 'type': 'object'}, ++ 'Activate': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}}, ++ 'type': 'object'}, ++ 'AdoptResources': {'properties': {'Params': {'$ref': '#/definitions/AdoptResourcesArgs'}}, ++ 'type': 'object'}, ++ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'type': 'object'}, ++ 'CheckMachines': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Import': {'properties': {'Params': {'$ref': '#/definitions/SerializedModel'}}, ++ 'type': 'object'}, ++ 'LatestLogTime': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}, ++ 'Result': {'format': 'date-time', ++ 'type': 'string'}}, ++ 'type': 'object'}, ++ 'Prechecks': {'properties': {'Params': {'$ref': '#/definitions/MigrationModelInfo'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(None) ++ async def Abort(self, model_tag): ++ ''' ++ model_tag : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='Abort', ++ version=1, ++ params=_params) ++ _params['model-tag'] = model_tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Activate(self, model_tag): ++ ''' ++ model_tag : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='Activate', ++ version=1, ++ params=_params) ++ _params['model-tag'] = model_tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AdoptResources(self, model_tag, source_controller_version): ++ ''' ++ model_tag : str ++ source_controller_version : Number ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='AdoptResources', ++ version=1, ++ params=_params) ++ _params['model-tag'] = model_tag ++ _params['source-controller-version'] = source_controller_version ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BytesResult) ++ async def CACert(self): ++ ''' ++ ++ Returns -> typing.Sequence[int] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='CACert', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def CheckMachines(self, model_tag): ++ ''' ++ model_tag : str ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='CheckMachines', ++ version=1, ++ params=_params) ++ _params['model-tag'] = model_tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Import(self, bytes_, charms, tools): ++ ''' ++ bytes_ : typing.Sequence[int] ++ charms : typing.Sequence[str] ++ tools : typing.Sequence[~SerializedModelTools] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='Import', ++ version=1, ++ params=_params) ++ _params['bytes'] = bytes_ ++ _params['charms'] = charms ++ _params['tools'] = tools ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(str) ++ async def LatestLogTime(self, model_tag): ++ ''' ++ model_tag : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='LatestLogTime', ++ version=1, ++ params=_params) ++ _params['model-tag'] = model_tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Prechecks(self, agent_version, name, owner_tag, uuid): ++ ''' ++ agent_version : Number ++ name : str ++ owner_tag : str ++ uuid : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MigrationTarget', ++ request='Prechecks', ++ version=1, ++ params=_params) ++ _params['agent-version'] = agent_version ++ _params['name'] = name ++ _params['owner-tag'] = owner_tag ++ _params['uuid'] = uuid ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class ModelConfigFacade(Type): ++ name = 'ModelConfig' ++ version = 1 ++ schema = {'definitions': {'ConfigValue': {'additionalProperties': False, ++ 'properties': {'source': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['value', 'source'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], + 'type': 'object'}, - 'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}}, - 'type': 'object'}, - 'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelConfigResults': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelSLA': {'additionalProperties': False, ++ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'creds': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['ModelSLAInfo', 'creds'], ++ 'type': 'object'}, ++ 'ModelSLAInfo': {'additionalProperties': False, ++ 'properties': {'level': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['level', 'owner'], + 'type': 'object'}, - 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}}, ++ 'ModelSet': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], + 'type': 'object'}, - 'Prechecks': {'type': 'object'}, - 'Reap': {'type': 'object'}, - 'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}}, ++ 'ModelUnset': {'additionalProperties': False, ++ 'properties': {'keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}}, ++ 'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, + 'type': 'object'}, - 'SetStatusMessage': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationStatusMessageArgs'}}, - 'type': 'object'}, - 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}, - 'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}}, ++ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, ++ 'type': 'object'}, ++ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, ++ 'type': 'object'}, ++ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(SerializedModel) - async def Export(self): ++ ++ @ReturnMapping(ModelConfigResults) ++ async def ModelGet(self): + ''' + - Returns -> typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools> ++ Returns -> typing.Mapping[str, ~ConfigValue] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='Export', version=1, params=_params) ++ msg = dict(type='ModelConfig', ++ request='ModelGet', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(MasterMigrationStatus) - async def MigrationStatus(self): ++ @ReturnMapping(None) ++ async def ModelSet(self, config): + ''' - - Returns -> typing.Union[str, _ForwardRef('MigrationSpec')] ++ config : typing.Mapping[str, typing.Any] ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='MigrationStatus', version=1, params=_params) ++ msg = dict(type='ModelConfig', ++ request='ModelSet', ++ version=1, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ + ++ @ReturnMapping(None) ++ async def ModelUnset(self, keys): ++ ''' ++ keys : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='ModelUnset', ++ version=1, ++ params=_params) ++ _params['keys'] = keys + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(MinionReports) - async def MinionReports(self): ++ @ReturnMapping(StringResult) ++ async def SLALevel(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], int] ++ Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='MinionReports', version=1, params=_params) ++ msg = dict(type='ModelConfig', ++ request='SLALevel', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(MigrationModelInfo) - async def ModelInfo(self): ++ @ReturnMapping(None) ++ async def SetSLALevel(self, creds, level): ++ ''' ++ creds : typing.Sequence[int] ++ level : str ++ Returns -> None + ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='SetSLALevel', ++ version=1, ++ params=_params) ++ _params['creds'] = creds ++ _params['level'] = level ++ reply = await self.rpc(msg) ++ return reply + - Returns -> typing.Union[_ForwardRef('Number'), str] ++ ++ ++class ModelUpgraderFacade(Type): ++ name = 'ModelUpgrader' ++ version = 1 ++ 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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ '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'}, ++ 'Macaroon': {'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'}, ++ 'SetModelEnvironVersion': {'additionalProperties': False, ++ 'properties': {'model-tag': {'type': 'string'}, ++ 'version': {'type': 'integer'}}, ++ 'required': ['model-tag', ++ 'version'], ++ 'type': 'object'}, ++ 'SetModelEnvironVersions': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/SetModelEnvironVersion'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}}, ++ 'properties': {'ModelEnvironVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/IntResults'}}, ++ 'type': 'object'}, ++ 'ModelTargetEnvironVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/IntResults'}}, ++ 'type': 'object'}, ++ 'SetModelEnvironVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelEnvironVersions'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetModelStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchModelEnvironVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(IntResults) ++ async def ModelEnvironVersion(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='ModelInfo', version=1, params=_params) - ++ msg = dict(type='ModelUpgrader', ++ request='ModelEnvironVersion', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Prechecks(self): ++ @ReturnMapping(IntResults) ++ async def ModelTargetEnvironVersion(self, entities): + ''' - - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='Prechecks', version=1, params=_params) - ++ msg = dict(type='ModelUpgrader', ++ request='ModelTargetEnvironVersion', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Reap(self): ++ @ReturnMapping(ErrorResults) ++ async def SetModelEnvironVersion(self, models): + ''' - - Returns -> None ++ models : typing.Sequence[~SetModelEnvironVersion] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='Reap', version=1, params=_params) - ++ msg = dict(type='ModelUpgrader', ++ request='SetModelEnvironVersion', ++ version=1, ++ params=_params) ++ _params['models'] = models + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetPhase(self, phase): ++ @ReturnMapping(ErrorResults) ++ async def SetModelStatus(self, entities): + ''' - phase : str - Returns -> None ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='SetPhase', version=1, params=_params) - _params['phase'] = phase ++ msg = dict(type='ModelUpgrader', ++ request='SetModelStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetStatusMessage(self, message): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchModelEnvironVersion(self, entities): + ''' - message : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='SetStatusMessage', version=1, params=_params) - _params['message'] = message ++ msg = dict(type='ModelUpgrader', ++ request='WatchModelEnvironVersion', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResult) - async def Watch(self): ++class NotifyWatcherFacade(Type): ++ name = 'NotifyWatcher' ++ version = 1 ++ schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(None) ++ async def Next(self): + ''' + - Returns -> typing.Union[str, _ForwardRef('Error')] ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='Watch', version=1, params=_params) ++ msg = dict(type='NotifyWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResult) - async def WatchMinionReports(self): ++ @ReturnMapping(None) ++ async def Stop(self): + ''' + - Returns -> typing.Union[str, _ForwardRef('Error')] ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationMaster', request='WatchMinionReports', version=1, params=_params) ++ msg = dict(type='NotifyWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class MigrationMinionFacade(Type): - name = 'MigrationMinion' ++class OfferStatusWatcherFacade(Type): ++ name = 'OfferStatusWatcher' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'MinionReport': {'additionalProperties': False, - 'properties': {'migration-id': {'type': 'string'}, - 'phase': {'type': 'string'}, - 'success': {'type': 'boolean'}}, - 'required': ['migration-id', - 'phase', - 'success'], - 'type': 'object'}, - 'NotifyWatchResult': {'additionalProperties': False, - 'properties': {'NotifyWatcherId': {'type': 'string'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'required': ['NotifyWatcherId'], - 'type': 'object'}}, - 'properties': {'Report': {'properties': {'Params': {'$ref': '#/definitions/MinionReport'}}, - 'type': 'object'}, - 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(None) - async def Report(self, migration_id, phase, success): - ''' - migration_id : str - phase : str - success : bool - Returns -> None - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MigrationMinion', request='Report', version=1, params=_params) - _params['migration-id'] = migration_id - _params['phase'] = phase - _params['success'] = success - reply = await self.rpc(msg) - return reply - - - - @ReturnMapping(NotifyWatchResult) - async def Watch(self): - ''' - - Returns -> typing.Union[str, _ForwardRef('Error')] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='MigrationMinion', request='Watch', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - - - - class MigrationStatusWatcherFacade(Type): - name = 'MigrationStatusWatcher' - version = 1 - schema = {'definitions': {'MigrationStatus': {'additionalProperties': False, - 'properties': {'attempt': {'type': 'integer'}, - 'migration-id': {'type': 'string'}, - 'phase': {'type': 'string'}, - 'source-api-addrs': {'items': {'type': 'string'}, - 'type': 'array'}, - 'source-ca-cert': {'type': 'string'}, - 'target-api-addrs': {'items': {'type': 'string'}, - 'type': 'array'}, - 'target-ca-cert': {'type': 'string'}}, - 'required': ['migration-id', - 'attempt', - 'phase', - 'source-api-addrs', - 'source-ca-cert', - 'target-api-addrs', - 'target-ca-cert'], - 'type': 'object'}}, - 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MigrationStatus'}}, ++ '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'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/OfferStatusWatchResult'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(MigrationStatus) ++ ++ @ReturnMapping(OfferStatusWatchResult) + async def Next(self): + ''' + - Returns -> typing.Union[int, typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[typing.Sequence[~OfferStatusChange], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationStatusWatcher', request='Next', version=1, params=_params) ++ msg = dict(type='OfferStatusWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationStatusWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='OfferStatusWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class MigrationTargetFacade(Type): - name = 'MigrationTarget' ++class PayloadsFacade(Type): ++ name = 'Payloads' + version = 1 - schema = {'definitions': {'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'}, - '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': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}}, - 'type': 'object'}, - 'Activate': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}}, - 'type': 'object'}, - 'AdoptResources': {'properties': {'Params': {'$ref': '#/definitions/AdoptResourcesArgs'}}, - 'type': 'object'}, - 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, - 'type': 'object'}, - 'Import': {'properties': {'Params': {'$ref': '#/definitions/SerializedModel'}}, - 'type': 'object'}, - 'LatestLogTime': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}, - 'Result': {'format': 'date-time', - 'type': 'string'}}, - 'type': 'object'}, - 'Prechecks': {'properties': {'Params': {'$ref': '#/definitions/MigrationModelInfo'}}, - 'type': 'object'}}, ++ schema = {'definitions': {'Payload': {'additionalProperties': False, ++ 'properties': {'class': {'type': 'string'}, ++ 'id': {'type': 'string'}, ++ 'labels': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'machine': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['class', ++ 'type', ++ 'id', ++ 'status', ++ 'labels', ++ 'unit', ++ 'machine'], ++ 'type': 'object'}, ++ 'PayloadListArgs': {'additionalProperties': False, ++ 'properties': {'patterns': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['patterns'], ++ 'type': 'object'}, ++ 'PayloadListResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/Payload'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/PayloadListArgs'}, ++ 'Result': {'$ref': '#/definitions/PayloadListResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(None) - async def Abort(self, model_tag): ++ ++ @ReturnMapping(PayloadListResults) ++ async def List(self, patterns): + ''' - model_tag : str - Returns -> None ++ patterns : typing.Sequence[str] ++ Returns -> typing.Sequence[~Payload] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='Abort', version=1, params=_params) - _params['model-tag'] = model_tag ++ msg = dict(type='Payloads', ++ request='List', ++ version=1, ++ params=_params) ++ _params['patterns'] = patterns + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Activate(self, model_tag): ++class PayloadsHookContextFacade(Type): ++ name = 'PayloadsHookContext' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'LookUpPayloadArg': {'additionalProperties': False, ++ 'properties': {'id': {'type': 'string'}, ++ 'name': {'type': 'string'}}, ++ 'required': ['name', 'id'], ++ 'type': 'object'}, ++ 'LookUpPayloadArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/LookUpPayloadArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'Payload': {'additionalProperties': False, ++ 'properties': {'class': {'type': 'string'}, ++ 'id': {'type': 'string'}, ++ 'labels': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'machine': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['class', ++ 'type', ++ 'id', ++ 'status', ++ 'labels', ++ 'unit', ++ 'machine'], ++ 'type': 'object'}, ++ 'PayloadResult': {'additionalProperties': False, ++ 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'not-found': {'type': 'boolean'}, ++ 'payload': {'$ref': '#/definitions/Payload'}}, ++ 'required': ['Entity', ++ 'payload', ++ 'not-found'], ++ 'type': 'object'}, ++ 'PayloadResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/PayloadResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'SetPayloadStatusArg': {'additionalProperties': False, ++ 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['Entity', 'status'], ++ 'type': 'object'}, ++ 'SetPayloadStatusArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/SetPayloadStatusArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'TrackPayloadArgs': {'additionalProperties': False, ++ 'properties': {'payloads': {'items': {'$ref': '#/definitions/Payload'}, ++ 'type': 'array'}}, ++ 'required': ['payloads'], ++ 'type': 'object'}}, ++ 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ 'type': 'object'}, ++ 'LookUp': {'properties': {'Params': {'$ref': '#/definitions/LookUpPayloadArgs'}, ++ 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetPayloadStatusArgs'}, ++ 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ 'type': 'object'}, ++ 'Track': {'properties': {'Params': {'$ref': '#/definitions/TrackPayloadArgs'}, ++ 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ 'type': 'object'}, ++ 'Untrack': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(PayloadResults) ++ async def List(self, entities): + ''' - model_tag : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~PayloadResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='Activate', version=1, params=_params) - _params['model-tag'] = model_tag ++ msg = dict(type='PayloadsHookContext', ++ request='List', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def AdoptResources(self, model_tag, source_controller_version): ++ @ReturnMapping(PayloadResults) ++ async def LookUp(self, args): + ''' - model_tag : str - source_controller_version : Number - Returns -> None ++ args : typing.Sequence[~LookUpPayloadArg] ++ Returns -> typing.Sequence[~PayloadResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='AdoptResources', version=1, params=_params) - _params['model-tag'] = model_tag - _params['source-controller-version'] = source_controller_version ++ msg = dict(type='PayloadsHookContext', ++ request='LookUp', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(BytesResult) - async def CACert(self): ++ @ReturnMapping(PayloadResults) ++ async def SetStatus(self, args): + ''' - - Returns -> typing.Sequence<+T_co>[int] ++ args : typing.Sequence[~SetPayloadStatusArg] ++ Returns -> typing.Sequence[~PayloadResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='CACert', version=1, params=_params) - ++ msg = dict(type='PayloadsHookContext', ++ request='SetStatus', ++ version=1, ++ params=_params) ++ _params['args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Import(self, bytes_, charms, tools): ++ @ReturnMapping(PayloadResults) ++ async def Track(self, payloads): + ''' - bytes_ : typing.Sequence<+T_co>[int] - charms : typing.Sequence<+T_co>[str] - tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools> - Returns -> None ++ payloads : typing.Sequence[~Payload] ++ Returns -> typing.Sequence[~PayloadResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='Import', version=1, params=_params) - _params['bytes'] = bytes_ - _params['charms'] = charms - _params['tools'] = tools ++ msg = dict(type='PayloadsHookContext', ++ request='Track', ++ version=1, ++ params=_params) ++ _params['payloads'] = payloads + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(str) - async def LatestLogTime(self, model_tag): ++ @ReturnMapping(PayloadResults) ++ async def Untrack(self, entities): + ''' - model_tag : str - Returns -> str ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~PayloadResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='LatestLogTime', version=1, params=_params) - _params['model-tag'] = model_tag ++ msg = dict(type='PayloadsHookContext', ++ request='Untrack', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + ++class PingerFacade(Type): ++ name = 'Pinger' ++ version = 1 ++ schema = {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}}, ++ 'type': 'object'} ++ ++ + @ReturnMapping(None) - async def Prechecks(self, agent_version, name, owner_tag, uuid): ++ async def Ping(self): + ''' - agent_version : Number - name : str - owner_tag : str - uuid : str ++ + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MigrationTarget', request='Prechecks', version=1, params=_params) - _params['agent-version'] = agent_version - _params['name'] = name - _params['owner-tag'] = owner_tag - _params['uuid'] = uuid - reply = await self.rpc(msg) - return reply - ++ msg = dict(type='Pinger', ++ request='Ping', ++ version=1, ++ params=_params) + ++ reply = await self.rpc(msg) ++ return reply + - class ModelConfigFacade(Type): - name = 'ModelConfig' - version = 1 - schema = {'definitions': {'ConfigValue': {'additionalProperties': False, - 'properties': {'source': {'type': 'string'}, - 'value': {'additionalProperties': True, - 'type': 'object'}}, - 'required': ['value', 'source'], - 'type': 'object'}, - 'Error': {'additionalProperties': False, - 'properties': {'code': {'type': 'string'}, - 'info': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'ModelConfigResults': {'additionalProperties': False, - 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, - 'type': 'object'}}, - 'required': ['config'], - 'type': 'object'}, - 'ModelSLA': {'additionalProperties': False, - 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, - 'creds': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['ModelSLAInfo', 'creds'], - 'type': 'object'}, - 'ModelSLAInfo': {'additionalProperties': False, - 'properties': {'level': {'type': 'string'}, - 'owner': {'type': 'string'}}, - 'required': ['level', 'owner'], - 'type': 'object'}, - 'ModelSet': {'additionalProperties': False, - 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}}, - 'required': ['config'], - 'type': 'object'}, - 'ModelUnset': {'additionalProperties': False, - 'properties': {'keys': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['keys'], - 'type': 'object'}, - 'StringResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'type': 'string'}}, - 'required': ['result'], - 'type': 'object'}}, - 'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, - 'type': 'object'}, - 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, - 'type': 'object'}, - 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, - 'type': 'object'}, - 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(ModelConfigResults) - async def ModelGet(self): ++ ++ ++ @ReturnMapping(None) ++ async def Stop(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue> ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelConfig', request='ModelGet', version=1, params=_params) ++ msg = dict(type='Pinger', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def ModelSet(self, config): ++class ProxyUpdaterFacade(Type): ++ name = 'ProxyUpdater' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'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'}, ++ '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-proxy-settings': {'$ref': '#/definitions/ProxyConfig'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'proxy-settings': {'$ref': '#/definitions/ProxyConfig'}}, ++ 'required': ['proxy-settings', ++ 'apt-proxy-settings'], ++ 'type': 'object'}, ++ 'ProxyConfigResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ProxyConfigResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'ProxyConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ProxyConfigResults'}}, ++ 'type': 'object'}, ++ 'WatchForProxyConfigAndAPIHostPortChanges': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ProxyConfigResults) ++ async def ProxyConfig(self, entities): + ''' - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProxyConfigResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelConfig', request='ModelSet', version=1, params=_params) - _params['config'] = config ++ msg = dict(type='ProxyUpdater', ++ request='ProxyConfig', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def ModelUnset(self, keys): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities): + ''' - keys : typing.Sequence<+T_co>[str] - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelConfig', request='ModelUnset', version=1, params=_params) - _params['keys'] = keys ++ msg = dict(type='ProxyUpdater', ++ request='WatchForProxyConfigAndAPIHostPortChanges', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringResult) - async def SLALevel(self): ++class RelationStatusWatcherFacade(Type): ++ name = 'RelationStatusWatcher' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationLifeSuspendedStatusWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(RelationLifeSuspendedStatusWatchResult) ++ async def Next(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), str] ++ Returns -> typing.Union[typing.Sequence[~RelationLifeSuspendedStatusChange], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelConfig', request='SLALevel', version=1, params=_params) ++ msg = dict(type='RelationStatusWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) - async def SetSLALevel(self, creds, level): ++ async def Stop(self): + ''' - creds : typing.Sequence<+T_co>[int] - level : str ++ + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelConfig', request='SetSLALevel', version=1, params=_params) - _params['creds'] = creds - _params['level'] = level ++ msg = dict(type='RelationStatusWatcher', ++ request='Stop', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class NotifyWatcherFacade(Type): - name = 'NotifyWatcher' ++class RelationUnitsWatcherFacade(Type): ++ name = 'RelationUnitsWatcher' + version = 1 - schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}}, ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'RelationUnitsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, ++ 'type': 'object'}, ++ 'departed': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['changed'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id', ++ 'changes'], ++ 'type': 'object'}, ++ 'UnitSettings': {'additionalProperties': False, ++ 'properties': {'version': {'type': 'integer'}}, ++ 'required': ['version'], ++ 'type': 'object'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(None) ++ ++ @ReturnMapping(RelationUnitsWatchResult) + async def Next(self): + ''' + - Returns -> None ++ Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='NotifyWatcher', request='Next', version=1, params=_params) ++ msg = dict(type='RelationUnitsWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='NotifyWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='RelationUnitsWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class PayloadsFacade(Type): - name = 'Payloads' ++class RemoteApplicationWatcherFacade(Type): ++ name = 'RemoteApplicationWatcher' + version = 1 - schema = {'definitions': {'Payload': {'additionalProperties': False, - 'properties': {'class': {'type': 'string'}, - 'id': {'type': 'string'}, - 'labels': {'items': {'type': 'string'}, - 'type': 'array'}, - 'machine': {'type': 'string'}, - 'status': {'type': 'string'}, - 'type': {'type': 'string'}, - 'unit': {'type': 'string'}}, - 'required': ['class', - 'type', - 'id', - 'status', - 'labels', - 'unit', - 'machine'], - 'type': 'object'}, - 'PayloadListArgs': {'additionalProperties': False, - 'properties': {'patterns': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['patterns'], - 'type': 'object'}, - 'PayloadListResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/Payload'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/PayloadListArgs'}, - 'Result': {'$ref': '#/definitions/PayloadListResults'}}, - 'type': 'object'}}, ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'RemoteApplicationChange': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'relations': {'$ref': '#/definitions/RemoteRelationsChange'}}, ++ 'required': ['application-tag', ++ 'life', ++ 'relations'], ++ 'type': 'object'}, ++ 'RemoteApplicationWatchResult': {'additionalProperties': False, ++ 'properties': {'change': {'$ref': '#/definitions/RemoteApplicationChange'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'id': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'RemoteEntityId': {'additionalProperties': False, ++ 'properties': {'model-uuid': {'type': 'string'}, ++ 'token': {'type': 'string'}}, ++ 'required': ['model-uuid', 'token'], ++ 'type': 'object'}, ++ 'RemoteRelationChange': {'additionalProperties': False, ++ 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}}, ++ 'type': 'object'}, ++ 'departed-units': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'id': {'type': 'integer'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['id', 'life'], ++ 'type': 'object'}, ++ 'RemoteRelationUnitChange': {'additionalProperties': False, ++ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}}, ++ 'required': ['unit-id'], ++ 'type': 'object'}, ++ 'RemoteRelationsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'}, ++ 'type': 'array'}, ++ 'initial': {'type': 'boolean'}, ++ 'removed': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['initial'], ++ 'type': 'object'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteApplicationWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(PayloadListResults) - async def List(self, patterns): ++ ++ @ReturnMapping(RemoteApplicationWatchResult) ++ async def Next(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('RemoteApplicationChange'), _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteApplicationWatcher', ++ request='Next', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Stop(self): + ''' - patterns : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~Payload]<~Payload> ++ ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Payloads', request='List', version=1, params=_params) - _params['patterns'] = patterns ++ msg = dict(type='RemoteApplicationWatcher', ++ request='Stop', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class PayloadsHookContextFacade(Type): - name = 'PayloadsHookContext' ++class RemoteRelationsFacade(Type): ++ name = 'RemoteRelations' + version = 1 - schema = {'definitions': {'Entities': {'additionalProperties': False, ++ 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, - 'LookUpPayloadArg': {'additionalProperties': False, - 'properties': {'id': {'type': 'string'}, - 'name': {'type': 'string'}}, - 'required': ['name', 'id'], - 'type': 'object'}, - 'LookUpPayloadArgs': {'additionalProperties': False, - 'properties': {'args': {'items': {'$ref': '#/definitions/LookUpPayloadArg'}, - 'type': 'array'}}, - 'required': ['args'], - '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'}, ++ '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'Payload': {'additionalProperties': False, - 'properties': {'class': {'type': 'string'}, - 'id': {'type': 'string'}, - 'labels': {'items': {'type': 'string'}, - 'type': 'array'}, - 'machine': {'type': 'string'}, - 'status': {'type': 'string'}, - 'type': {'type': 'string'}, - 'unit': {'type': 'string'}}, - 'required': ['class', - 'type', - 'id', - 'status', - 'labels', - 'unit', - 'machine'], - 'type': 'object'}, - 'PayloadResult': {'additionalProperties': False, - 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, - 'error': {'$ref': '#/definitions/Error'}, - 'not-found': {'type': 'boolean'}, - 'payload': {'$ref': '#/definitions/Payload'}}, - 'required': ['Entity', - 'payload', - 'not-found'], ++ 'RelationUnit': {'additionalProperties': False, ++ 'properties': {'relation': {'type': 'string'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['relation', 'unit'], ++ 'type': 'object'}, ++ 'RelationUnits': {'additionalProperties': False, ++ 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'}, ++ 'type': 'array'}}, ++ 'required': ['relation-units'], + 'type': 'object'}, - 'PayloadResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/PayloadResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'SetPayloadStatusArg': {'additionalProperties': False, - 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, - 'status': {'type': 'string'}}, - 'required': ['Entity', 'status'], ++ 'RelationUnitsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, ++ 'type': 'object'}, ++ 'departed': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['changed'], + 'type': 'object'}, - 'SetPayloadStatusArgs': {'additionalProperties': False, - 'properties': {'args': {'items': {'$ref': '#/definitions/SetPayloadStatusArg'}, - 'type': 'array'}}, - 'required': ['args'], ++ 'RelationUnitsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id', ++ 'changes'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'RemoteApplication': {'additionalProperties': False, ++ 'properties': {'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'}, - 'TrackPayloadArgs': {'additionalProperties': False, - 'properties': {'payloads': {'items': {'$ref': '#/definitions/Payload'}, - 'type': 'array'}}, - 'required': ['payloads'], - 'type': 'object'}}, - 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/PayloadResults'}}, - 'type': 'object'}, - 'LookUp': {'properties': {'Params': {'$ref': '#/definitions/LookUpPayloadArgs'}, - 'Result': {'$ref': '#/definitions/PayloadResults'}}, - 'type': 'object'}, - 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetPayloadStatusArgs'}, - 'Result': {'$ref': '#/definitions/PayloadResults'}}, ++ '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'}}, ++ 'required': ['life', ++ 'suspended', ++ 'id', ++ 'key', ++ 'application-name', ++ 'endpoint', ++ 'remote-application-name', ++ 'remote-endpoint-name', ++ 'source-model-uuid'], ++ 'type': 'object'}, ++ 'RemoteRelationChangeEvent': {'additionalProperties': False, ++ 'properties': {'application-token': {'type': 'string'}, ++ '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'}}, ++ 'required': ['relation-token', ++ 'application-token', ++ 'life'], ++ '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'}, ++ 'RemoteRelationsChanges': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/RemoteRelationChangeEvent'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'SettingsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['settings'], ++ 'type': 'object'}, ++ 'SettingsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'UnitSettings': {'additionalProperties': False, ++ 'properties': {'version': {'type': 'integer'}}, ++ 'required': ['version'], ++ 'type': 'object'}}, ++ 'properties': {'ConsumeRemoteRelationChanges': {'properties': {'Params': {'$ref': '#/definitions/RemoteRelationsChanges'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, ++ 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, ++ 'type': 'object'}, ++ 'ExportEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/TokenResults'}}, ++ 'type': 'object'}, ++ 'GetTokens': {'properties': {'Params': {'$ref': '#/definitions/GetTokenArgs'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, - 'Track': {'properties': {'Params': {'$ref': '#/definitions/TrackPayloadArgs'}, - 'Result': {'$ref': '#/definitions/PayloadResults'}}, - 'type': 'object'}, - 'Untrack': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/PayloadResults'}}, - 'type': 'object'}}, ++ 'ImportRemoteEntities': {'properties': {'Params': {'$ref': '#/definitions/RemoteEntityTokenArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RelationUnitSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/SettingsResults'}}, ++ 'type': 'object'}, ++ 'Relations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RemoteRelationResults'}}, ++ 'type': 'object'}, ++ 'RemoteApplications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RemoteApplicationResults'}}, ++ 'type': 'object'}, ++ 'SaveMacaroons': {'properties': {'Params': {'$ref': '#/definitions/EntityMacaroonArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetRemoteApplicationsStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchLocalRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchRemoteApplicationRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchRemoteApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchRemoteRelations': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(PayloadResults) - async def List(self, entities): ++ ++ @ReturnMapping(ErrorResults) ++ async def ConsumeRemoteRelationChanges(self, changes): ++ ''' ++ changes : typing.Sequence[~RemoteRelationChangeEvent] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='ConsumeRemoteRelationChanges', ++ version=1, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerAPIInfoForModels(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='ControllerAPIInfoForModels', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerConfigResult) ++ async def ControllerConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='ControllerConfig', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(TokenResults) ++ async def ExportEntities(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~TokenResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='ExportEntities', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def GetTokens(self, args): ++ ''' ++ args : typing.Sequence[~GetTokenArg] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='GetTokens', ++ version=1, ++ params=_params) ++ _params['Args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ImportRemoteEntities(self, args): ++ ''' ++ args : typing.Sequence[~RemoteEntityTokenArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='ImportRemoteEntities', ++ version=1, ++ params=_params) ++ _params['Args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(SettingsResults) ++ async def RelationUnitSettings(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~SettingsResult] + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='RelationUnitSettings', ++ version=1, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RemoteRelationResults) ++ async def Relations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RemoteRelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='PayloadsHookContext', request='List', version=1, params=_params) ++ msg = dict(type='RemoteRelations', ++ request='Relations', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PayloadResults) - async def LookUp(self, args): ++ @ReturnMapping(RemoteApplicationResults) ++ async def RemoteApplications(self, entities): + ''' - args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg> - Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RemoteApplicationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='PayloadsHookContext', request='LookUp', version=1, params=_params) - _params['args'] = args ++ msg = dict(type='RemoteRelations', ++ request='RemoteApplications', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PayloadResults) - async def SetStatus(self, args): ++ @ReturnMapping(ErrorResults) ++ async def SaveMacaroons(self, args): + ''' - args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg> - Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ args : typing.Sequence[~EntityMacaroonArg] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='PayloadsHookContext', request='SetStatus', version=1, params=_params) - _params['args'] = args ++ msg = dict(type='RemoteRelations', ++ request='SaveMacaroons', ++ version=1, ++ params=_params) ++ _params['Args'] = args + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PayloadResults) - async def Track(self, payloads): ++ @ReturnMapping(ErrorResults) ++ async def SetRemoteApplicationsStatus(self, entities): + ''' - payloads : typing.Sequence<+T_co>[~Payload]<~Payload> - Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='PayloadsHookContext', request='Track', version=1, params=_params) - _params['payloads'] = payloads ++ msg = dict(type='RemoteRelations', ++ request='SetRemoteApplicationsStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(PayloadResults) - async def Untrack(self, entities): ++ @ReturnMapping(RelationUnitsWatchResults) ++ async def WatchLocalRelationUnits(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RelationUnitsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='PayloadsHookContext', request='Untrack', version=1, params=_params) ++ msg = dict(type='RemoteRelations', ++ request='WatchLocalRelationUnits', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class PingerFacade(Type): - name = 'Pinger' ++ @ReturnMapping(StringsWatchResults) ++ async def WatchRemoteApplicationRelations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='WatchRemoteApplicationRelations', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchRemoteApplications(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='WatchRemoteApplications', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchRemoteRelations(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='RemoteRelations', ++ request='WatchRemoteRelations', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class RemoteRelationsWatcherFacade(Type): ++ name = 'RemoteRelationsWatcher' + version = 1 - schema = {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}}, ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'RemoteEntityId': {'additionalProperties': False, ++ 'properties': {'model-uuid': {'type': 'string'}, ++ 'token': {'type': 'string'}}, ++ 'required': ['model-uuid', 'token'], ++ 'type': 'object'}, ++ 'RemoteRelationChange': {'additionalProperties': False, ++ 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}}, ++ 'type': 'object'}, ++ 'departed-units': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'id': {'type': 'integer'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['id', 'life'], ++ 'type': 'object'}, ++ 'RemoteRelationUnitChange': {'additionalProperties': False, ++ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}}, ++ 'required': ['unit-id'], ++ 'type': 'object'}, ++ 'RemoteRelationsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'}, ++ 'type': 'array'}, ++ 'initial': {'type': 'boolean'}, ++ 'removed': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['initial'], ++ 'type': 'object'}, ++ 'RemoteRelationsWatchResult': {'additionalProperties': False, ++ 'properties': {'RemoteRelationsWatcherId': {'type': 'string'}, ++ 'change': {'$ref': '#/definitions/RemoteRelationsChange'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['RemoteRelationsWatcherId'], ++ 'type': 'object'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteRelationsWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(None) - async def Ping(self): ++ ++ @ReturnMapping(RemoteRelationsWatchResult) ++ async def Next(self): + ''' + - Returns -> None ++ Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Pinger', request='Ping', version=1, params=_params) ++ msg = dict(type='RemoteRelationsWatcher', ++ request='Next', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Pinger', request='Stop', version=1, params=_params) ++ msg = dict(type='RemoteRelationsWatcher', ++ request='Stop', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class ProxyUpdaterFacade(Type): - name = 'ProxyUpdater' ++class ResourcesFacade(Type): ++ name = 'Resources' + version = 1 - schema = {'definitions': {'Entities': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, - 'type': 'array'}}, - 'required': ['entities'], - 'type': 'object'}, ++ schema = {'definitions': {'AddCharmWithAuthorization': {'additionalProperties': False, ++ 'properties': {'channel': {'type': 'string'}, ++ 'force': {'type': 'boolean'}, ++ 'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', ++ 'channel', ++ 'macaroon', ++ 'force'], ++ 'type': 'object'}, ++ 'AddPendingResourcesArgs': {'additionalProperties': False, ++ 'properties': {'AddCharmWithAuthorization': {'$ref': '#/definitions/AddCharmWithAuthorization'}, ++ 'Entity': {'$ref': '#/definitions/Entity'}, ++ 'resources': {'items': {'$ref': '#/definitions/CharmResource'}, ++ 'type': 'array'}}, ++ 'required': ['Entity', ++ 'AddCharmWithAuthorization', ++ 'resources'], ++ 'type': 'object'}, ++ 'AddPendingResourcesResult': {'additionalProperties': False, ++ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, ++ 'pending-ids': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['ErrorResult', ++ 'pending-ids'], ++ 'type': 'object'}, ++ 'CharmResource': {'additionalProperties': False, ++ 'properties': {'description': {'type': 'string'}, ++ 'fingerprint': {'items': {'type': 'integer'}, ++ 'type': 'array'}, ++ 'name': {'type': 'string'}, ++ 'origin': {'type': 'string'}, ++ 'path': {'type': 'string'}, ++ 'revision': {'type': 'integer'}, ++ 'size': {'type': 'integer'}, ++ 'type': {'type': 'string'}}, ++ 'required': ['name', ++ 'type', ++ 'path', ++ 'origin', ++ 'revision', ++ 'fingerprint', ++ 'size'], ++ 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, - 'Macaroon': {'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'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'ListResourcesArgs': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, - 'required': ['results'], ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'Resource': {'additionalProperties': False, ++ 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'}, ++ 'application': {'type': 'string'}, ++ 'id': {'type': 'string'}, ++ 'pending-id': {'type': 'string'}, ++ 'timestamp': {'format': 'date-time', ++ 'type': 'string'}, ++ 'username': {'type': 'string'}}, ++ 'required': ['CharmResource', ++ 'id', ++ 'pending-id', ++ 'application', ++ 'username', ++ 'timestamp'], ++ 'type': 'object'}, ++ 'ResourcesResult': {'additionalProperties': False, ++ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, ++ 'charm-store-resources': {'items': {'$ref': '#/definitions/CharmResource'}, ++ 'type': 'array'}, ++ 'resources': {'items': {'$ref': '#/definitions/Resource'}, ++ 'type': 'array'}, ++ 'unit-resources': {'items': {'$ref': '#/definitions/UnitResources'}, ++ 'type': 'array'}}, ++ 'required': ['ErrorResult', ++ 'resources', ++ 'charm-store-resources', ++ 'unit-resources'], ++ 'type': 'object'}, ++ 'ResourcesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ResourcesResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'UnitResources': {'additionalProperties': False, ++ 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, ++ 'download-progress': {'patternProperties': {'.*': {'type': 'integer'}}, ++ 'type': 'object'}, ++ 'resources': {'items': {'$ref': '#/definitions/Resource'}, ++ 'type': 'array'}}, ++ 'required': ['Entity', ++ 'resources', ++ 'download-progress'], ++ 'type': 'object'}}, ++ 'properties': {'AddPendingResources': {'properties': {'Params': {'$ref': '#/definitions/AddPendingResourcesArgs'}, ++ 'Result': {'$ref': '#/definitions/AddPendingResourcesResult'}}, + '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-proxy-settings': {'$ref': '#/definitions/ProxyConfig'}, - 'error': {'$ref': '#/definitions/Error'}, - 'proxy-settings': {'$ref': '#/definitions/ProxyConfig'}}, - 'required': ['proxy-settings', - 'apt-proxy-settings'], - 'type': 'object'}, - 'ProxyConfigResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ProxyConfigResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'ProxyConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ProxyConfigResults'}}, - 'type': 'object'}, - 'WatchForProxyConfigAndAPIHostPortChanges': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ 'ListResources': {'properties': {'Params': {'$ref': '#/definitions/ListResourcesArgs'}, ++ 'Result': {'$ref': '#/definitions/ResourcesResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(ProxyConfigResults) - async def ProxyConfig(self, entities): ++ ++ @ReturnMapping(AddPendingResourcesResult) ++ async def AddPendingResources(self, addcharmwithauthorization, entity, resources): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult> ++ addcharmwithauthorization : AddCharmWithAuthorization ++ entity : Entity ++ resources : typing.Sequence[~CharmResource] ++ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ProxyUpdater', request='ProxyConfig', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='Resources', ++ request='AddPendingResources', ++ version=1, ++ params=_params) ++ _params['AddCharmWithAuthorization'] = addcharmwithauthorization ++ _params['Entity'] = entity ++ _params['Resources'] = resources + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def WatchForProxyConfigAndAPIHostPortChanges(self, entities): ++ @ReturnMapping(ResourcesResults) ++ async def ListResources(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ResourcesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ProxyUpdater', request='WatchForProxyConfigAndAPIHostPortChanges', version=1, params=_params) ++ msg = dict(type='Resources', ++ request='ListResources', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class RelationUnitsWatcherFacade(Type): - name = 'RelationUnitsWatcher' ++class ResourcesHookContextFacade(Type): ++ name = 'ResourcesHookContext' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ schema = {'definitions': {'CharmResource': {'additionalProperties': False, ++ 'properties': {'description': {'type': 'string'}, ++ 'fingerprint': {'items': {'type': 'integer'}, ++ 'type': 'array'}, ++ 'name': {'type': 'string'}, ++ 'origin': {'type': 'string'}, ++ 'path': {'type': 'string'}, ++ 'revision': {'type': 'integer'}, ++ 'size': {'type': 'integer'}, ++ 'type': {'type': 'string'}}, ++ 'required': ['name', ++ 'type', ++ 'path', ++ 'origin', ++ 'revision', ++ 'fingerprint', ++ 'size'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'ListUnitResourcesArgs': {'additionalProperties': False, ++ 'properties': {'resource-names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['resource-names'], ++ 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'RelationUnitsChange': {'additionalProperties': False, - 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, - 'type': 'object'}, - 'departed': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['changed'], - 'type': 'object'}, - 'RelationUnitsWatchResult': {'additionalProperties': False, - 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, - 'error': {'$ref': '#/definitions/Error'}, - 'watcher-id': {'type': 'string'}}, - 'required': ['watcher-id', - 'changes'], - 'type': 'object'}, - 'UnitSettings': {'additionalProperties': False, - 'properties': {'version': {'type': 'integer'}}, - 'required': ['version'], - 'type': 'object'}}, - 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}}, - 'type': 'object'}, - 'Stop': {'type': 'object'}}, ++ 'Resource': {'additionalProperties': False, ++ 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'}, ++ 'application': {'type': 'string'}, ++ 'id': {'type': 'string'}, ++ 'pending-id': {'type': 'string'}, ++ 'timestamp': {'format': 'date-time', ++ 'type': 'string'}, ++ 'username': {'type': 'string'}}, ++ 'required': ['CharmResource', ++ 'id', ++ 'pending-id', ++ 'application', ++ 'username', ++ 'timestamp'], ++ 'type': 'object'}, ++ 'UnitResourceResult': {'additionalProperties': False, ++ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, ++ 'resource': {'$ref': '#/definitions/Resource'}}, ++ 'required': ['ErrorResult', 'resource'], ++ 'type': 'object'}, ++ 'UnitResourcesResult': {'additionalProperties': False, ++ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, ++ 'resources': {'items': {'$ref': '#/definitions/UnitResourceResult'}, ++ 'type': 'array'}}, ++ 'required': ['ErrorResult', ++ 'resources'], ++ 'type': 'object'}}, ++ 'properties': {'GetResourceInfo': {'properties': {'Params': {'$ref': '#/definitions/ListUnitResourcesArgs'}, ++ 'Result': {'$ref': '#/definitions/UnitResourcesResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - - - @ReturnMapping(RelationUnitsWatchResult) - async def Next(self): - ''' - - Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='RelationUnitsWatcher', request='Next', version=1, params=_params) - - reply = await self.rpc(msg) - return reply + + - - @ReturnMapping(None) - async def Stop(self): ++ @ReturnMapping(UnitResourcesResult) ++ async def GetResourceInfo(self, resource_names): + ''' - - Returns -> None ++ resource_names : typing.Sequence[str] ++ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[~UnitResourceResult]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RelationUnitsWatcher', request='Stop', version=1, params=_params) - ++ msg = dict(type='ResourcesHookContext', ++ request='GetResourceInfo', ++ version=1, ++ params=_params) ++ _params['resource-names'] = resource_names + reply = await self.rpc(msg) + return reply + + + - class RemoteApplicationWatcherFacade(Type): - name = 'RemoteApplicationWatcher' ++class RetryStrategyFacade(Type): ++ name = 'RetryStrategy' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'RemoteApplicationChange': {'additionalProperties': False, - 'properties': {'application-tag': {'type': 'string'}, - 'life': {'type': 'string'}, - 'relations': {'$ref': '#/definitions/RemoteRelationsChange'}}, - 'required': ['application-tag', - 'life', - 'relations'], - 'type': 'object'}, - 'RemoteApplicationWatchResult': {'additionalProperties': False, - 'properties': {'change': {'$ref': '#/definitions/RemoteApplicationChange'}, - 'error': {'$ref': '#/definitions/Error'}, - 'id': {'type': 'string'}}, - 'required': ['id'], - 'type': 'object'}, - 'RemoteEntityId': {'additionalProperties': False, - 'properties': {'model-uuid': {'type': 'string'}, - 'token': {'type': 'string'}}, - 'required': ['model-uuid', 'token'], - 'type': 'object'}, - 'RemoteRelationChange': {'additionalProperties': False, - 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}}, - 'type': 'object'}, - 'departed-units': {'items': {'type': 'string'}, - 'type': 'array'}, - 'id': {'type': 'integer'}, - 'life': {'type': 'string'}}, - 'required': ['id', 'life'], - 'type': 'object'}, - 'RemoteRelationUnitChange': {'additionalProperties': False, - 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}, - 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}}, - 'required': ['unit-id'], - 'type': 'object'}, - 'RemoteRelationsChange': {'additionalProperties': False, - 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'}, - 'type': 'array'}, - 'initial': {'type': 'boolean'}, - 'removed': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['initial'], - 'type': 'object'}}, - 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteApplicationWatchResult'}}, - 'type': 'object'}, - 'Stop': {'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'}, ++ 'RetryStrategy': {'additionalProperties': False, ++ 'properties': {'jitter-retry-time': {'type': 'boolean'}, ++ 'max-retry-time': {'type': 'integer'}, ++ 'min-retry-time': {'type': 'integer'}, ++ 'retry-time-factor': {'type': 'integer'}, ++ 'should-retry': {'type': 'boolean'}}, ++ 'required': ['should-retry', ++ 'min-retry-time', ++ 'max-retry-time', ++ 'jitter-retry-time', ++ 'retry-time-factor'], ++ 'type': 'object'}, ++ 'RetryStrategyResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/RetryStrategy'}}, ++ 'type': 'object'}, ++ 'RetryStrategyResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RetryStrategyResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'RetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RetryStrategyResults'}}, ++ 'type': 'object'}, ++ 'WatchRetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(RemoteApplicationWatchResult) - async def Next(self): ++ ++ @ReturnMapping(RetryStrategyResults) ++ async def RetryStrategy(self, entities): + ''' - - Returns -> typing.Union[_ForwardRef('RemoteApplicationChange'), _ForwardRef('Error'), str] ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RetryStrategyResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RemoteApplicationWatcher', request='Next', version=1, params=_params) - ++ msg = dict(type='RetryStrategy', ++ request='RetryStrategy', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Stop(self): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchRetryStrategy(self, entities): + ''' - - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RemoteApplicationWatcher', request='Stop', version=1, params=_params) - ++ msg = dict(type='RetryStrategy', ++ request='WatchRetryStrategy', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class RemoteRelationsWatcherFacade(Type): - name = 'RemoteRelationsWatcher' ++class SSHClientFacade(Type): ++ name = 'SSHClient' + version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'RemoteEntityId': {'additionalProperties': False, - 'properties': {'model-uuid': {'type': 'string'}, - 'token': {'type': 'string'}}, - 'required': ['model-uuid', 'token'], ++ 'SSHAddressResult': {'additionalProperties': False, ++ 'properties': {'address': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'SSHAddressResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'SSHProxyResult': {'additionalProperties': False, ++ 'properties': {'use-proxy': {'type': 'boolean'}}, ++ 'required': ['use-proxy'], + 'type': 'object'}, - 'RemoteRelationChange': {'additionalProperties': False, - 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}}, - 'type': 'object'}, - 'departed-units': {'items': {'type': 'string'}, - 'type': 'array'}, - 'id': {'type': 'integer'}, - 'life': {'type': 'string'}}, - 'required': ['id', 'life'], - 'type': 'object'}, - 'RemoteRelationUnitChange': {'additionalProperties': False, - 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}, - 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}}, - 'required': ['unit-id'], - 'type': 'object'}, - 'RemoteRelationsChange': {'additionalProperties': False, - 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'}, - 'type': 'array'}, - 'initial': {'type': 'boolean'}, - 'removed': {'items': {'type': 'integer'}, - 'type': 'array'}}, - 'required': ['initial'], - 'type': 'object'}, - 'RemoteRelationsWatchResult': {'additionalProperties': False, - 'properties': {'RemoteRelationsWatcherId': {'type': 'string'}, - 'change': {'$ref': '#/definitions/RemoteRelationsChange'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'required': ['RemoteRelationsWatcherId'], - 'type': 'object'}}, - 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteRelationsWatchResult'}}, - 'type': 'object'}, - 'Stop': {'type': 'object'}}, ++ 'SSHPublicKeysResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'public-keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'SSHPublicKeysResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, ++ 'type': 'object'}, ++ 'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}}, ++ 'type': 'object'}, ++ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, ++ 'type': 'object'}, ++ 'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(RemoteRelationsWatchResult) - async def Next(self): ++ ++ @ReturnMapping(SSHAddressResults) ++ async def PrivateAddress(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHAddressResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='SSHClient', ++ request='PrivateAddress', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(SSHProxyResult) ++ async def Proxy(self): + ''' + - Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')] ++ Returns -> bool + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RemoteRelationsWatcher', request='Next', version=1, params=_params) ++ msg = dict(type='SSHClient', ++ request='Proxy', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Stop(self): ++ @ReturnMapping(SSHAddressResults) ++ async def PublicAddress(self, entities): + ''' - - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHAddressResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RemoteRelationsWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='SSHClient', ++ request='PublicAddress', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ + ++ ++ @ReturnMapping(SSHPublicKeysResults) ++ async def PublicKeys(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHPublicKeysResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='SSHClient', ++ request='PublicKeys', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class ResourcesFacade(Type): - name = 'Resources' - version = 1 - schema = {'definitions': {'AddCharmWithAuthorization': {'additionalProperties': False, - 'properties': {'channel': {'type': 'string'}, - 'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'url': {'type': 'string'}}, - 'required': ['url', - 'channel', - 'macaroon'], - 'type': 'object'}, - 'AddPendingResourcesArgs': {'additionalProperties': False, - 'properties': {'AddCharmWithAuthorization': {'$ref': '#/definitions/AddCharmWithAuthorization'}, - 'Entity': {'$ref': '#/definitions/Entity'}, - 'resources': {'items': {'$ref': '#/definitions/CharmResource'}, - 'type': 'array'}}, - 'required': ['Entity', - 'AddCharmWithAuthorization', - 'resources'], - 'type': 'object'}, - 'AddPendingResourcesResult': {'additionalProperties': False, - 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, - 'pending-ids': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['ErrorResult', - 'pending-ids'], - 'type': 'object'}, - 'CharmResource': {'additionalProperties': False, - 'properties': {'description': {'type': 'string'}, - 'fingerprint': {'items': {'type': 'integer'}, - 'type': 'array'}, - 'name': {'type': 'string'}, - 'origin': {'type': 'string'}, - 'path': {'type': 'string'}, - 'revision': {'type': 'integer'}, - 'size': {'type': 'integer'}, - 'type': {'type': 'string'}}, - 'required': ['name', - 'type', - 'path', - 'origin', - 'revision', - 'fingerprint', - 'size'], - 'type': 'object'}, - 'Entity': {'additionalProperties': False, - 'properties': {'tag': {'type': 'string'}}, - 'required': ['tag'], - 'type': 'object'}, - 'Error': {'additionalProperties': False, - 'properties': {'code': {'type': 'string'}, - 'info': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'ErrorResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}}, - 'type': 'object'}, - 'ListResourcesArgs': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, - 'type': 'array'}}, - 'required': ['entities'], - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'Resource': {'additionalProperties': False, - 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'}, - 'application': {'type': 'string'}, - 'id': {'type': 'string'}, - 'pending-id': {'type': 'string'}, - 'timestamp': {'format': 'date-time', - 'type': 'string'}, - 'username': {'type': 'string'}}, - 'required': ['CharmResource', - 'id', - 'pending-id', - 'application', - 'username', - 'timestamp'], - 'type': 'object'}, - 'ResourcesResult': {'additionalProperties': False, - 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, - 'charm-store-resources': {'items': {'$ref': '#/definitions/CharmResource'}, - 'type': 'array'}, - 'resources': {'items': {'$ref': '#/definitions/Resource'}, - 'type': 'array'}, - 'unit-resources': {'items': {'$ref': '#/definitions/UnitResources'}, - 'type': 'array'}}, - 'required': ['ErrorResult', - 'resources', - 'charm-store-resources', - 'unit-resources'], - 'type': 'object'}, - 'ResourcesResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/ResourcesResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'UnitResources': {'additionalProperties': False, - 'properties': {'Entity': {'$ref': '#/definitions/Entity'}, - 'download-progress': {'patternProperties': {'.*': {'type': 'integer'}}, - 'type': 'object'}, - 'resources': {'items': {'$ref': '#/definitions/Resource'}, - 'type': 'array'}}, - 'required': ['Entity', - 'resources', - 'download-progress'], - 'type': 'object'}}, - 'properties': {'AddPendingResources': {'properties': {'Params': {'$ref': '#/definitions/AddPendingResourcesArgs'}, - 'Result': {'$ref': '#/definitions/AddPendingResourcesResult'}}, - 'type': 'object'}, - 'ListResources': {'properties': {'Params': {'$ref': '#/definitions/ListResourcesArgs'}, - 'Result': {'$ref': '#/definitions/ResourcesResults'}}, - 'type': 'object'}}, ++class SingularFacade(Type): ++ name = 'Singular' ++ version = 1 ++ 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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'SingularClaim': {'additionalProperties': False, ++ 'properties': {'controller-tag': {'type': 'string'}, ++ 'duration': {'type': 'integer'}, ++ 'model-tag': {'type': 'string'}}, ++ 'required': ['model-tag', ++ 'controller-tag', ++ 'duration'], ++ 'type': 'object'}, ++ 'SingularClaims': {'additionalProperties': False, ++ 'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'}, ++ 'type': 'array'}}, ++ 'required': ['claims'], ++ 'type': 'object'}}, ++ 'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(AddPendingResourcesResult) - async def AddPendingResources(self, addcharmwithauthorization, entity, resources): ++ ++ @ReturnMapping(ErrorResults) ++ async def Claim(self, claims): + ''' - addcharmwithauthorization : AddCharmWithAuthorization - entity : Entity - resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource> - Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[str]] ++ claims : typing.Sequence[~SingularClaim] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Resources', request='AddPendingResources', version=1, params=_params) - _params['AddCharmWithAuthorization'] = addcharmwithauthorization - _params['Entity'] = entity - _params['Resources'] = resources ++ msg = dict(type='Singular', ++ request='Claim', ++ version=1, ++ params=_params) ++ _params['claims'] = claims + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ResourcesResults) - async def ListResources(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def Wait(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Resources', request='ListResources', version=1, params=_params) ++ msg = dict(type='Singular', ++ request='Wait', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class ResourcesHookContextFacade(Type): - name = 'ResourcesHookContext' ++class StringsWatcherFacade(Type): ++ name = 'StringsWatcher' + version = 1 - schema = {'definitions': {'CharmResource': {'additionalProperties': False, - 'properties': {'description': {'type': 'string'}, - 'fingerprint': {'items': {'type': 'integer'}, - 'type': 'array'}, - 'name': {'type': 'string'}, - 'origin': {'type': 'string'}, - 'path': {'type': 'string'}, - 'revision': {'type': 'integer'}, - 'size': {'type': 'integer'}, - 'type': {'type': 'string'}}, - 'required': ['name', - 'type', - 'path', - 'origin', - 'revision', - 'fingerprint', - 'size'], - 'type': 'object'}, - 'Error': {'additionalProperties': False, ++ schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, - 'ErrorResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}}, - 'type': 'object'}, - 'ListUnitResourcesArgs': {'additionalProperties': False, - 'properties': {'resource-names': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['resource-names'], - 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'Resource': {'additionalProperties': False, - 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'}, - 'application': {'type': 'string'}, - 'id': {'type': 'string'}, - 'pending-id': {'type': 'string'}, - 'timestamp': {'format': 'date-time', - 'type': 'string'}, - 'username': {'type': 'string'}}, - 'required': ['CharmResource', - 'id', - 'pending-id', - 'application', - 'username', - 'timestamp'], - 'type': 'object'}, - 'UnitResourceResult': {'additionalProperties': False, - 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, - 'resource': {'$ref': '#/definitions/Resource'}}, - 'required': ['ErrorResult', 'resource'], - 'type': 'object'}, - 'UnitResourcesResult': {'additionalProperties': False, - 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'}, - 'resources': {'items': {'$ref': '#/definitions/UnitResourceResult'}, - 'type': 'array'}}, - 'required': ['ErrorResult', - 'resources'], - 'type': 'object'}}, - 'properties': {'GetResourceInfo': {'properties': {'Params': {'$ref': '#/definitions/ListUnitResourcesArgs'}, - 'Result': {'$ref': '#/definitions/UnitResourcesResult'}}, - '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'}}, ++ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(UnitResourcesResult) - async def GetResourceInfo(self, resource_names): ++ ++ @ReturnMapping(StringsWatchResult) ++ async def Next(self): + ''' - resource_names : typing.Sequence<+T_co>[str] - Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>] ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ResourcesHookContext', request='GetResourceInfo', version=1, params=_params) - _params['resource-names'] = resource_names ++ msg = dict(type='StringsWatcher', ++ request='Next', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class RetryStrategyFacade(Type): - name = 'RetryStrategy' ++ @ReturnMapping(None) ++ async def Stop(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StringsWatcher', ++ request='Stop', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class UndertakerFacade(Type): ++ name = 'Undertaker' + version = 1 - 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'}, ++ schema = {'definitions': {'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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, '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'}, + 'NotifyWatchResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, - 'RetryStrategy': {'additionalProperties': False, - 'properties': {'jitter-retry-time': {'type': 'boolean'}, - 'max-retry-time': {'type': 'integer'}, - 'min-retry-time': {'type': 'integer'}, - 'retry-time-factor': {'type': 'integer'}, - 'should-retry': {'type': 'boolean'}}, - 'required': ['should-retry', - 'min-retry-time', - 'max-retry-time', - 'jitter-retry-time', - 'retry-time-factor'], - 'type': 'object'}, - 'RetryStrategyResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'$ref': '#/definitions/RetryStrategy'}}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'UndertakerModelInfo': {'additionalProperties': False, ++ 'properties': {'global-name': {'type': 'string'}, ++ 'is-system': {'type': 'boolean'}, ++ 'life': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['uuid', ++ 'name', ++ 'global-name', ++ 'is-system', ++ 'life'], + 'type': 'object'}, - 'RetryStrategyResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/RetryStrategyResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'RetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/RetryStrategyResults'}}, - 'type': 'object'}, - 'WatchRetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ 'UndertakerModelInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/UndertakerModelInfo'}}, ++ 'required': ['result'], ++ 'type': 'object'}}, ++ 'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/UndertakerModelInfoResult'}}, ++ 'type': 'object'}, ++ 'ProcessDyingModel': {'type': 'object'}, ++ 'RemoveModel': {'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(RetryStrategyResults) - async def RetryStrategy(self, entities): ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult> ++ ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RetryStrategy', request='RetryStrategy', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='Undertaker', ++ request='ModelConfig', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def WatchRetryStrategy(self, entities): ++ @ReturnMapping(UndertakerModelInfoResult) ++ async def ModelInfo(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ ++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='RetryStrategy', request='WatchRetryStrategy', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='Undertaker', ++ request='ModelInfo', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - class SSHClientFacade(Type): - name = 'SSHClient' - version = 1 - 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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'SSHAddressResult': {'additionalProperties': False, - 'properties': {'address': {'type': 'string'}, - 'error': {'$ref': '#/definitions/Error'}}, - 'type': 'object'}, - 'SSHAddressResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}, - 'SSHProxyResult': {'additionalProperties': False, - 'properties': {'use-proxy': {'type': 'boolean'}}, - 'required': ['use-proxy'], - 'type': 'object'}, - 'SSHPublicKeysResult': {'additionalProperties': False, - 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'public-keys': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'type': 'object'}, - 'SSHPublicKeysResults': {'additionalProperties': False, - 'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'}, - 'type': 'array'}}, - 'required': ['results'], - 'type': 'object'}}, - 'properties': {'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, - 'type': 'object'}, - 'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}}, - 'type': 'object'}, - 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, - 'type': 'object'}, - 'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(SSHAddressResults) - async def PrivateAddress(self, entities): ++ @ReturnMapping(None) ++ async def ProcessDyingModel(self): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult> ++ ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PrivateAddress', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='Undertaker', ++ request='ProcessDyingModel', ++ version=1, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(SSHProxyResult) - async def Proxy(self): ++ @ReturnMapping(None) ++ async def RemoveModel(self): + ''' + - Returns -> bool ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='Proxy', version=1, params=_params) ++ msg = dict(type='Undertaker', ++ request='RemoveModel', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(SSHAddressResults) - async def PublicAddress(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PublicAddress', version=1, params=_params) ++ msg = dict(type='Undertaker', ++ request='SetStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(SSHPublicKeysResults) - async def PublicKeys(self, entities): ++ @ReturnMapping(ErrorResults) ++ async def UpdateStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PublicKeys', version=1, params=_params) ++ msg = dict(type='Undertaker', ++ request='UpdateStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class SingularFacade(Type): - name = 'Singular' ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchModelResources(self): ++ ''' ++ ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Undertaker', ++ request='WatchModelResources', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class UnitAssignerFacade(Type): ++ name = 'UnitAssigner' + version = 1 + 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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'SingularClaim': {'additionalProperties': False, - 'properties': {'controller-tag': {'type': 'string'}, - 'duration': {'type': 'integer'}, - 'model-tag': {'type': 'string'}}, - 'required': ['model-tag', - 'controller-tag', - 'duration'], ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ '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'}}, ++ 'properties': {'AssignUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, - 'SingularClaims': {'additionalProperties': False, - 'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'}, - 'type': 'array'}}, - 'required': ['claims'], - 'type': 'object'}}, - 'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}}, ++ 'WatchUnitAssignments': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(ErrorResults) - async def Claim(self, claims): ++ async def AssignUnits(self, entities): + ''' - claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Singular', request='Claim', version=1, params=_params) - _params['claims'] = claims ++ msg = dict(type='UnitAssigner', ++ request='AssignUnits', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def Wait(self, entities): ++ async def SetAgentStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Singular', request='Wait', version=1, params=_params) ++ msg = dict(type='UnitAssigner', ++ request='SetAgentStatus', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class StringsWatcherFacade(Type): - name = 'StringsWatcher' - version = 1 - schema = {'definitions': {'Error': {'additionalProperties': False, - 'properties': {'code': {'type': 'string'}, - 'info': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, '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'}}, - 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, - 'type': 'object'}, - 'Stop': {'type': 'object'}}, - 'type': 'object'} - - + @ReturnMapping(StringsWatchResult) - async def Next(self): - ''' - - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='StringsWatcher', request='Next', version=1, params=_params) - - reply = await self.rpc(msg) - return reply - - - - @ReturnMapping(None) - async def Stop(self): ++ async def WatchUnitAssignments(self): + ''' + - Returns -> None ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StringsWatcher', request='Stop', version=1, params=_params) ++ msg = dict(type='UnitAssigner', ++ request='WatchUnitAssignments', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - class UndertakerFacade(Type): - name = 'Undertaker' ++class UpgradeSeriesFacade(Type): ++ name = 'UpgradeSeries' + version = 1 - schema = {'definitions': {'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'}, ++ schema = {'definitions': {'Entities': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'EntitiesResult': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'EntitiesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Entity': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'ModelConfigResult': {'additionalProperties': False, - 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, - 'type': 'object'}}, - 'type': 'object'}}, - 'required': ['config'], - 'type': 'object'}, ++ 'type': 'object'}, ++ 'Macaroon': {'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'}, - 'SetStatus': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, - 'type': 'array'}}, - 'required': ['entities'], - 'type': 'object'}, - 'UndertakerModelInfo': {'additionalProperties': False, - 'properties': {'global-name': {'type': 'string'}, - 'is-system': {'type': 'boolean'}, - 'life': {'type': 'string'}, - 'name': {'type': 'string'}, - 'uuid': {'type': 'string'}}, - 'required': ['uuid', - 'name', - 'global-name', - 'is-system', - 'life'], - 'type': 'object'}, - 'UndertakerModelInfoResult': {'additionalProperties': False, ++ 'PinApplicationResult': {'additionalProperties': False, ++ 'properties': {'application-name': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['application-name'], ++ 'type': 'object'}, ++ 'PinApplicationsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/PinApplicationResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'PinnedLeadershipResult': {'additionalProperties': False, ++ 'properties': {'result': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}}, ++ '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'}, ++ 'UpdateSeriesArg': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'series': {'type': 'string'}, ++ 'tag': {'$ref': '#/definitions/Entity'}}, ++ 'required': ['tag', 'force', 'series'], ++ 'type': 'object'}, ++ 'UpdateSeriesArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/UpdateSeriesArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStartUnitCompletionParam': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['entities', ++ 'message'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusParam': {'additionalProperties': False, ++ 'properties': {'entity': {'$ref': '#/definitions/Entity'}, ++ 'message': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['entity', ++ 'status', ++ 'message'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusParam'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, - 'result': {'$ref': '#/definitions/UndertakerModelInfo'}}, - 'required': ['result'], - 'type': 'object'}}, - 'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, - 'type': 'object'}, - 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/UndertakerModelInfoResult'}}, - 'type': 'object'}, - 'ProcessDyingModel': {'type': 'object'}, - 'RemoveModel': {'type': 'object'}, - 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'status': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}}, ++ 'properties': {'FinishUpgradeSeries': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'MachineStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/UpgradeSeriesStatusResults'}}, ++ 'type': 'object'}, ++ 'PinMachineApplications': {'properties': {'Result': {'$ref': '#/definitions/PinApplicationsResults'}}, ++ 'type': 'object'}, ++ 'PinnedLeadership': {'properties': {'Result': {'$ref': '#/definitions/PinnedLeadershipResult'}}, ++ 'type': 'object'}, ++ 'SetMachineStatus': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStatusParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetUpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStatusParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'StartUnitCompletion': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStartUnitCompletionParam'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'TargetSeries': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, - 'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, - 'type': 'object'}}, ++ 'UnitsCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/EntitiesResults'}}, ++ 'type': 'object'}, ++ 'UnitsPrepared': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/EntitiesResults'}}, ++ 'type': 'object'}, ++ 'UnpinMachineApplications': {'properties': {'Result': {'$ref': '#/definitions/PinApplicationsResults'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/UpgradeSeriesStatusResults'}}, ++ 'type': 'object'}, ++ 'WatchUpgradeSeriesNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} - + - @ReturnMapping(ModelConfigResult) - async def ModelConfig(self): - ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ @ReturnMapping(ErrorResults) ++ async def FinishUpgradeSeries(self, args): ++ ''' ++ args : typing.Sequence[~UpdateSeriesArg] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='ModelConfig', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='FinishUpgradeSeries', ++ version=1, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ + ++ ++ @ReturnMapping(UpgradeSeriesStatusResults) ++ async def MachineStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UpgradeSeriesStatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UpgradeSeries', ++ request='MachineStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(UndertakerModelInfoResult) - async def ModelInfo(self): ++ @ReturnMapping(PinApplicationsResults) ++ async def PinMachineApplications(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')] ++ Returns -> typing.Sequence[~PinApplicationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='ModelInfo', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='PinMachineApplications', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def ProcessDyingModel(self): ++ @ReturnMapping(PinnedLeadershipResult) ++ async def PinnedLeadership(self): + ''' + - Returns -> None ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='ProcessDyingModel', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='PinnedLeadership', ++ version=1, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def RemoveModel(self): ++ @ReturnMapping(ErrorResults) ++ async def SetMachineStatus(self, params): + ''' - - Returns -> None ++ params : typing.Sequence[~UpgradeSeriesStatusParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='RemoveModel', version=1, params=_params) - ++ msg = dict(type='UpgradeSeries', ++ request='SetMachineStatus', ++ version=1, ++ params=_params) ++ _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def SetStatus(self, entities): ++ async def SetUpgradeSeriesUnitStatus(self, params): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~UpgradeSeriesStatusParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='SetStatus', version=1, params=_params) - _params['entities'] = entities ++ msg = dict(type='UpgradeSeries', ++ request='SetUpgradeSeriesUnitStatus', ++ version=1, ++ params=_params) ++ _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def UpdateStatus(self, entities): ++ async def StartUnitCompletion(self, entities, message): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ message : str ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='UpdateStatus', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='StartUnitCompletion', ++ version=1, ++ params=_params) + _params['entities'] = entities ++ _params['message'] = message + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(NotifyWatchResults) - async def WatchModelResources(self): ++ @ReturnMapping(StringResults) ++ async def TargetSeries(self, entities): + ''' - - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Undertaker', request='WatchModelResources', version=1, params=_params) - ++ msg = dict(type='UpgradeSeries', ++ request='TargetSeries', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - class UnitAssignerFacade(Type): - name = 'UnitAssigner' - version = 1 - 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'}, - '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': {'$ref': '#/definitions/ErrorInfo'}, - 'message': {'type': 'string'}}, - 'required': ['message', 'code'], - 'type': 'object'}, - 'ErrorInfo': {'additionalProperties': False, - 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, - 'macaroon-path': {'type': 'string'}}, - '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'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}, - 'SetStatus': {'additionalProperties': False, - 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, - 'type': 'array'}}, - 'required': ['entities'], - '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'}}, - 'properties': {'AssignUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'WatchUnitAssignments': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, - 'type': 'object'}}, - 'type': 'object'} - - - @ReturnMapping(ErrorResults) - async def AssignUnits(self, entities): ++ @ReturnMapping(EntitiesResults) ++ async def UnitsCompleted(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~EntitiesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UnitAssigner', request='AssignUnits', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='UnitsCompleted', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SetAgentStatus(self, entities): ++ @ReturnMapping(EntitiesResults) ++ async def UnitsPrepared(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~EntitiesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UnitAssigner', request='SetAgentStatus', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='UnitsPrepared', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(StringsWatchResult) - async def WatchUnitAssignments(self): ++ @ReturnMapping(PinApplicationsResults) ++ async def UnpinMachineApplications(self): ++ ''' ++ ++ Returns -> typing.Sequence[~PinApplicationResult] + ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UpgradeSeries', ++ request='UnpinMachineApplications', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ ++ @ReturnMapping(UpgradeSeriesStatusResults) ++ async def UpgradeSeriesUnitStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UpgradeSeriesStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UnitAssigner', request='WatchUnitAssignments', version=1, params=_params) ++ msg = dict(type='UpgradeSeries', ++ request='UpgradeSeriesUnitStatus', ++ version=1, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ + ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchUpgradeSeriesNotifications(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UpgradeSeries', ++ request='WatchUpgradeSeriesNotifications', ++ version=1, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + +class UpgraderFacade(Type): + name = 'Upgrader' + version = 1 + schema = {'definitions': {'Binary': {'additionalProperties': False, + 'properties': {'Arch': {'type': 'string'}, + 'Number': {'$ref': '#/definitions/Number'}, + 'Series': {'type': 'string'}}, + 'required': ['Number', 'Series', 'Arch'], + 'type': 'object'}, + 'Entities': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'EntitiesVersion': {'additionalProperties': False, + 'properties': {'agent-tools': {'items': {'$ref': '#/definitions/EntityVersion'}, + 'type': 'array'}}, + 'required': ['agent-tools'], + 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'EntityVersion': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}, + 'tools': {'$ref': '#/definitions/Version'}}, + 'required': ['tag', 'tools'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'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'}, + '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'}, + 'Tools': {'additionalProperties': False, + 'properties': {'sha256': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'url': {'type': 'string'}, + 'version': {'$ref': '#/definitions/Binary'}}, + 'required': ['version', 'url', 'size'], + 'type': 'object'}, + 'ToolsResult': {'additionalProperties': False, + 'properties': {'disable-ssl-hostname-verification': {'type': 'boolean'}, + 'error': {'$ref': '#/definitions/Error'}, + 'tools': {'items': {'$ref': '#/definitions/Tools'}, + 'type': 'array'}}, + 'required': ['tools', + 'disable-ssl-hostname-verification'], + 'type': 'object'}, + 'ToolsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ToolsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Version': {'additionalProperties': False, + 'properties': {'version': {'$ref': '#/definitions/Binary'}}, + 'required': ['version'], + 'type': 'object'}, + 'VersionResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'version': {'$ref': '#/definitions/Number'}}, + 'type': 'object'}, + 'VersionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VersionResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}}, + 'properties': {'DesiredVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/VersionResults'}}, + 'type': 'object'}, + 'SetTools': {'properties': {'Params': {'$ref': '#/definitions/EntitiesVersion'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Tools': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ToolsResults'}}, + 'type': 'object'}, + 'WatchAPIVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(VersionResults) + async def DesiredVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~VersionResult]<~VersionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~VersionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Upgrader', request='DesiredVersion', version=1, params=_params) ++ msg = dict(type='Upgrader', ++ request='DesiredVersion', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetTools(self, agent_tools): + ''' - agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ agent_tools : typing.Sequence[~EntityVersion] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Upgrader', request='SetTools', version=1, params=_params) ++ msg = dict(type='Upgrader', ++ request='SetTools', ++ version=1, ++ params=_params) + _params['agent-tools'] = agent_tools + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ToolsResults) + async def Tools(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ToolsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Upgrader', request='Tools', version=1, params=_params) ++ msg = dict(type='Upgrader', ++ request='Tools', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchAPIVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Upgrader', request='WatchAPIVersion', version=1, params=_params) ++ msg = dict(type='Upgrader', ++ request='WatchAPIVersion', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + +class UserManagerFacade(Type): + name = 'UserManager' + version = 1 + schema = {'definitions': {'AddUser': {'additionalProperties': False, + 'properties': {'display-name': {'type': 'string'}, + 'password': {'type': 'string'}, + 'username': {'type': 'string'}}, + 'required': ['username', 'display-name'], + 'type': 'object'}, + 'AddUserResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'secret-key': {'items': {'type': 'integer'}, + 'type': 'array'}, + 'tag': {'type': 'string'}}, + 'type': 'object'}, + 'AddUserResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/AddUserResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'AddUsers': {'additionalProperties': False, + 'properties': {'users': {'items': {'$ref': '#/definitions/AddUser'}, + 'type': 'array'}}, + 'required': ['users'], + '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'}, + 'EntityPassword': {'additionalProperties': False, + 'properties': {'password': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'password'], + 'type': 'object'}, + 'EntityPasswords': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, + 'type': 'array'}}, + 'required': ['changes'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'UserInfo': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'created-by': {'type': 'string'}, + 'date-created': {'format': 'date-time', + 'type': 'string'}, + 'disabled': {'type': 'boolean'}, + 'display-name': {'type': 'string'}, + 'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'username': {'type': 'string'}}, + 'required': ['username', + 'display-name', + 'access', + 'created-by', + 'date-created', + 'disabled'], + 'type': 'object'}, + 'UserInfoRequest': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'include-disabled': {'type': 'boolean'}}, + 'required': ['entities', + 'include-disabled'], + 'type': 'object'}, + 'UserInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/UserInfo'}}, + 'type': 'object'}, + 'UserInfoResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/UserInfoResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}}, + 'properties': {'AddUser': {'properties': {'Params': {'$ref': '#/definitions/AddUsers'}, + 'Result': {'$ref': '#/definitions/AddUserResults'}}, + 'type': 'object'}, + 'DisableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'EnableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'RemoveUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetPassword': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'UserInfo': {'properties': {'Params': {'$ref': '#/definitions/UserInfoRequest'}, + 'Result': {'$ref': '#/definitions/UserInfoResults'}}, + 'type': 'object'}}, + 'type': 'object'} - ++ + + @ReturnMapping(AddUserResults) + async def AddUser(self, users): + ''' - users : typing.Sequence<+T_co>[~AddUser]<~AddUser> - Returns -> typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult> ++ users : typing.Sequence[~AddUser] ++ Returns -> typing.Sequence[~AddUserResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='AddUser', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='AddUser', ++ version=1, ++ params=_params) + _params['users'] = users + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DisableUser(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='DisableUser', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='DisableUser', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnableUser(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='EnableUser', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='EnableUser', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RemoveUser(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='RemoveUser', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='RemoveUser', ++ version=1, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetPassword(self, changes): + ''' - changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='SetPassword', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='SetPassword', ++ version=1, ++ params=_params) + _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(UserInfoResults) + async def UserInfo(self, entities, include_disabled): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + include_disabled : bool - Returns -> typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult> ++ Returns -> typing.Sequence[~UserInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='UserManager', request='UserInfo', version=1, params=_params) ++ msg = dict(type='UserManager', ++ request='UserInfo', ++ version=1, ++ params=_params) + _params['entities'] = entities + _params['include-disabled'] = include_disabled + reply = await self.rpc(msg) + return reply ++ ++ ++ ++class VolumeAttachmentPlansWatcherFacade(Type): ++ name = 'VolumeAttachmentPlansWatcher' ++ version = 1 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}}, ++ 'type': 'object'}, ++ 'Stop': {'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(MachineStorageIdsWatchResult) ++ async def Next(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='VolumeAttachmentPlansWatcher', ++ request='Next', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Stop(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='VolumeAttachmentPlansWatcher', ++ request='Stop', ++ version=1, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply diff --cc modules/libjuju/juju/client/_client2.py index 6f92a86,0000000..416faab mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client2.py +++ b/modules/libjuju/juju/client/_client2.py @@@ -1,4225 -1,0 +1,7535 @@@ +# 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._definitions import * +from juju.client.facade import ReturnMapping, Type + + +class ActionFacade(Type): + name = 'Action' + version = 2 + schema = {'definitions': {'Action': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'receiver': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'receiver', 'name'], + 'type': 'object'}, + 'ActionResult': {'additionalProperties': False, + 'properties': {'action': {'$ref': '#/definitions/Action'}, + 'completed': {'format': 'date-time', + 'type': 'string'}, + 'enqueued': {'format': 'date-time', + 'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'message': {'type': 'string'}, + 'output': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'started': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'type': 'object'}, + 'ActionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ActionSpec': {'additionalProperties': False, + 'properties': {'description': {'type': 'string'}, + 'params': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['description', 'params'], + 'type': 'object'}, + 'Actions': {'additionalProperties': False, + 'properties': {'actions': {'items': {'$ref': '#/definitions/Action'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ActionsByName': {'additionalProperties': False, + 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, + 'type': 'array'}, + 'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}}, + 'type': 'object'}, + 'ActionsByNames': {'additionalProperties': False, + 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByName'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ActionsByReceiver': {'additionalProperties': False, + 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, + 'type': 'array'}, + 'error': {'$ref': '#/definitions/Error'}, + 'receiver': {'type': 'string'}}, + 'type': 'object'}, + 'ActionsByReceivers': {'additionalProperties': False, + 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ApplicationCharmActionsResult': {'additionalProperties': False, + 'properties': {'actions': {'patternProperties': {'.*': {'$ref': '#/definitions/ActionSpec'}}, + 'type': 'object'}, + 'application-tag': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'type': 'object'}, + 'ApplicationsCharmActionsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationCharmActionsResult'}, + 'type': 'array'}}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'FindActionsByNames': {'additionalProperties': False, + 'properties': {'names': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FindTags': {'additionalProperties': False, + 'properties': {'prefixes': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['prefixes'], + 'type': 'object'}, + 'FindTagsResults': {'additionalProperties': False, + 'properties': {'matches': {'patternProperties': {'.*': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}}, + 'required': ['matches'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'RunParams': {'additionalProperties': False, + 'properties': {'applications': {'items': {'type': 'string'}, + 'type': 'array'}, + 'commands': {'type': 'string'}, + 'machines': {'items': {'type': 'string'}, + 'type': 'array'}, + 'timeout': {'type': 'integer'}, + 'units': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['commands', 'timeout'], + 'type': 'object'}}, + 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'ApplicationsCharmsActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ApplicationsCharmActionsResults'}}, + 'type': 'object'}, + 'Cancel': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'Enqueue': {'properties': {'Params': {'$ref': '#/definitions/Actions'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'FindActionTagsByPrefix': {'properties': {'Params': {'$ref': '#/definitions/FindTags'}, + 'Result': {'$ref': '#/definitions/FindTagsResults'}}, + 'type': 'object'}, + 'FindActionsByNames': {'properties': {'Params': {'$ref': '#/definitions/FindActionsByNames'}, + 'Result': {'$ref': '#/definitions/ActionsByNames'}}, + 'type': 'object'}, + 'ListAll': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, + 'type': 'object'}, + 'ListCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, + 'type': 'object'}, + 'ListPending': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, + 'type': 'object'}, + 'ListRunning': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, + 'type': 'object'}, + 'Run': {'properties': {'Params': {'$ref': '#/definitions/RunParams'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'RunOnAllMachines': {'properties': {'Params': {'$ref': '#/definitions/RunParams'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ActionResults) + async def Actions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='Actions', version=2, params=_params) ++ msg = dict(type='Action', ++ request='Actions', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationsCharmActionsResults) + async def ApplicationsCharmsActions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationCharmActionsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='ApplicationsCharmsActions', version=2, params=_params) ++ msg = dict(type='Action', ++ request='ApplicationsCharmsActions', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def Cancel(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='Cancel', version=2, params=_params) ++ msg = dict(type='Action', ++ request='Cancel', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def Enqueue(self, actions): + ''' - actions : typing.Sequence<+T_co>[~Action]<~Action> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ actions : typing.Sequence[~Action] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='Enqueue', version=2, params=_params) ++ msg = dict(type='Action', ++ request='Enqueue', ++ version=2, ++ params=_params) + _params['actions'] = actions + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FindTagsResults) + async def FindActionTagsByPrefix(self, prefixes): + ''' - prefixes : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~Entity]<~Entity> ++ prefixes : typing.Sequence[str] ++ Returns -> typing.Sequence[~Entity] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='FindActionTagsByPrefix', version=2, params=_params) ++ msg = dict(type='Action', ++ request='FindActionTagsByPrefix', ++ version=2, ++ params=_params) + _params['prefixes'] = prefixes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionsByNames) + async def FindActionsByNames(self, names): + ''' - names : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName> ++ names : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionsByName] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='FindActionsByNames', version=2, params=_params) ++ msg = dict(type='Action', ++ request='FindActionsByNames', ++ version=2, ++ params=_params) + _params['names'] = names + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionsByReceivers) + async def ListAll(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='ListAll', version=2, params=_params) ++ msg = dict(type='Action', ++ request='ListAll', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionsByReceivers) + async def ListCompleted(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='ListCompleted', version=2, params=_params) ++ msg = dict(type='Action', ++ request='ListCompleted', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionsByReceivers) + async def ListPending(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='ListPending', version=2, params=_params) ++ msg = dict(type='Action', ++ request='ListPending', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionsByReceivers) + async def ListRunning(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='ListRunning', version=2, params=_params) ++ msg = dict(type='Action', ++ request='ListRunning', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def Run(self, applications, commands, machines, timeout, units): + ''' - applications : typing.Sequence<+T_co>[str] ++ applications : typing.Sequence[str] + commands : str - machines : typing.Sequence<+T_co>[str] ++ machines : typing.Sequence[str] + timeout : int - units : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ units : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='Run', version=2, params=_params) ++ msg = dict(type='Action', ++ request='Run', ++ version=2, ++ params=_params) + _params['applications'] = applications + _params['commands'] = commands + _params['machines'] = machines + _params['timeout'] = timeout + _params['units'] = units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def RunOnAllMachines(self, applications, commands, machines, timeout, units): + ''' - applications : typing.Sequence<+T_co>[str] ++ applications : typing.Sequence[str] + commands : str - machines : typing.Sequence<+T_co>[str] ++ machines : typing.Sequence[str] + timeout : int - units : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ units : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Action', request='RunOnAllMachines', version=2, params=_params) ++ msg = dict(type='Action', ++ request='RunOnAllMachines', ++ version=2, ++ params=_params) + _params['applications'] = applications + _params['commands'] = commands + _params['machines'] = machines + _params['timeout'] = timeout + _params['units'] = units + reply = await self.rpc(msg) + return reply + + + +class AgentFacade(Type): + name = 'Agent' + version = 2 + schema = {'definitions': {'AgentGetEntitiesResult': {'additionalProperties': False, + 'properties': {'container-type': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'jobs': {'items': {'type': 'string'}, + 'type': 'array'}, + 'life': {'type': 'string'}}, + 'required': ['life', + 'jobs', + 'container-type'], + 'type': 'object'}, + 'AgentGetEntitiesResults': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/AgentGetEntitiesResult'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + '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': {'credential': {'$ref': '#/definitions/CloudCredential'}, ++ 'properties': {'cacertificates': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'credential': {'$ref': '#/definitions/CloudCredential'}, + 'endpoint': {'type': 'string'}, + 'identity-endpoint': {'type': 'string'}, + 'name': {'type': 'string'}, + 'region': {'type': 'string'}, + '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'}, + 'EntityPassword': {'additionalProperties': False, + 'properties': {'password': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'password'], + 'type': 'object'}, + 'EntityPasswords': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, + 'type': 'array'}}, + 'required': ['changes'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'IsMasterResult': {'additionalProperties': False, + 'properties': {'master': {'type': 'boolean'}}, + 'required': ['master'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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'}, + 'StateServingInfo': {'additionalProperties': False, + 'properties': {'api-port': {'type': 'integer'}, + 'ca-private-key': {'type': 'string'}, + 'cert': {'type': 'string'}, ++ 'controller-api-port': {'type': 'integer'}, + 'private-key': {'type': 'string'}, + 'shared-secret': {'type': 'string'}, + 'state-port': {'type': 'integer'}, + 'system-identity': {'type': 'string'}}, + 'required': ['api-port', + 'state-port', + 'cert', + 'private-key', + 'ca-private-key', + 'shared-secret', + 'system-identity'], + 'type': 'object'}}, + 'properties': {'ClearReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, + 'type': 'object'}, ++ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, + 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, + 'type': 'object'}, + 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, + 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, + 'type': 'object'}, + 'GetEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/AgentGetEntitiesResults'}}, + 'type': 'object'}, + 'IsMaster': {'properties': {'Result': {'$ref': '#/definitions/IsMasterResult'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'StateServingInfo': {'properties': {'Result': {'$ref': '#/definitions/StateServingInfo'}}, + 'type': 'object'}, + 'WatchCredentials': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def ClearReboot(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='ClearReboot', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='ClearReboot', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(CloudSpecResults) + async def CloudSpec(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Agent', ++ request='CloudSpec', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerAPIInfoForModels(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='CloudSpec', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='ControllerAPIInfoForModels', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ControllerConfigResult) + async def ControllerConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='ControllerConfig', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='ControllerConfig', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(CloudSpecResult) + async def GetCloudSpec(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='GetCloudSpec', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='GetCloudSpec', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(AgentGetEntitiesResults) + async def GetEntities(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~AgentGetEntitiesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='GetEntities', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='GetEntities', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(IsMasterResult) + async def IsMaster(self): + ''' + + Returns -> bool + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='IsMaster', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='IsMaster', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='ModelConfig', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='ModelConfig', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetPasswords(self, changes): + ''' - changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='SetPasswords', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='SetPasswords', ++ version=2, ++ params=_params) + _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StateServingInfo) + async def StateServingInfo(self): + ''' + + Returns -> typing.Union[int, str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='StateServingInfo', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='StateServingInfo', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchCredentials(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='WatchCredentials', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='WatchCredentials', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Agent', request='WatchForModelConfigChanges', version=2, params=_params) ++ msg = dict(type='Agent', ++ request='WatchForModelConfigChanges', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class AllModelWatcherFacade(Type): + name = 'AllModelWatcher' + version = 2 + schema = {'definitions': {'AllWatcherNextResults': {'additionalProperties': False, + 'properties': {'deltas': {'items': {'$ref': '#/definitions/Delta'}, + 'type': 'array'}}, + 'required': ['deltas'], + 'type': 'object'}, + 'Delta': {'additionalProperties': False, + 'properties': {'entity': {'additionalProperties': True, + 'type': 'object'}, + 'removed': {'type': 'boolean'}}, + 'required': ['removed', 'entity'], + 'type': 'object'}}, + 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherNextResults'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AllWatcherNextResults) + async def Next(self): + ''' + - Returns -> typing.Sequence<+T_co>[~Delta]<~Delta> ++ Returns -> typing.Sequence[~Delta] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='AllModelWatcher', request='Next', version=2, params=_params) ++ msg = dict(type='AllModelWatcher', ++ request='Next', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='AllModelWatcher', request='Stop', version=2, params=_params) ++ msg = dict(type='AllModelWatcher', ++ request='Stop', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, + 'properties': {'Get': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/AnnotationsGetResults'}}, + 'type': 'object'}, + 'Set': {'properties': {'Params': {'$ref': '#/definitions/AnnotationsSet'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AnnotationsGetResults) + async def Get(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~AnnotationsGetResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Annotations', request='Get', version=2, params=_params) ++ msg = dict(type='Annotations', ++ request='Get', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Set(self, annotations): + ''' - annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ annotations : typing.Sequence[~EntityAnnotations] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Annotations', request='Set', version=2, params=_params) ++ msg = dict(type='Annotations', ++ request='Set', ++ version=2, ++ params=_params) + _params['annotations'] = annotations + reply = await self.rpc(msg) + return reply + + + +class ApplicationFacade(Type): + name = 'Application' + version = 2 + schema = {'definitions': {'AddApplicationUnits': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}}, + 'required': ['application', + 'num-units', + 'placement'], + 'type': 'object'}, + 'AddApplicationUnitsResults': {'additionalProperties': False, + 'properties': {'units': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['units'], + 'type': 'object'}, + 'AddRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'AddRelationResults': {'additionalProperties': False, + 'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}}, + 'type': 'object'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'ApplicationCharmRelations': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationCharmRelationsResults': {'additionalProperties': False, + 'properties': {'charm-relations': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['charm-relations'], + 'type': 'object'}, + 'ApplicationDeploy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-yaml': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}, + 'resources': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'series': {'type': 'string'}, + 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'series', + 'charm-url', + 'channel', + 'num-units', + 'config-yaml', + 'constraints'], + 'type': 'object'}, + 'ApplicationDestroy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationExpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGetResults': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'series': {'type': 'string'}}, + 'required': ['application', + 'charm', + 'config', + 'constraints', + 'series'], + 'type': 'object'}, + 'ApplicationMetricCredential': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'metrics-credentials': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['application', + 'metrics-credentials'], + 'type': 'object'}, + 'ApplicationMetricCredentials': {'additionalProperties': False, + 'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'}, + 'type': 'array'}}, + 'required': ['creds'], + 'type': 'object'}, + 'ApplicationSet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationSetCharm': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config-settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-settings-yaml': {'type': 'string'}, + 'force-series': {'type': 'boolean'}, + 'force-units': {'type': 'boolean'}, + 'resource-ids': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'charm-url', + 'channel', + 'force-units', + 'force-series'], + 'type': 'object'}, + 'ApplicationUnexpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationUnset': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationUpdate': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'force-charm-url': {'type': 'boolean'}, + 'force-series': {'type': 'boolean'}, + 'min-units': {'type': 'integer'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'settings-yaml': {'type': 'string'}}, + 'required': ['application', + 'charm-url', + 'force-charm-url', + 'force-series', + 'settings-yaml'], + 'type': 'object'}, + 'ApplicationsDeploy': {'additionalProperties': False, + 'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'}, + 'type': 'array'}}, + 'required': ['applications'], + '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'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'DestroyApplicationUnits': {'additionalProperties': False, + 'properties': {'unit-names': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['unit-names'], + 'type': 'object'}, + 'DestroyRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetApplicationConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'GetConstraintsResults': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'SetConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['application', 'constraints'], + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StringResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'type': 'string'}}, + 'required': ['result'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, + 'Result': {'$ref': '#/definitions/AddRelationResults'}}, + 'type': 'object'}, + 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, + 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, + 'type': 'object'}, + 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, + 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, + 'type': 'object'}, + 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, + 'type': 'object'}, + 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, + 'type': 'object'}, + 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, + 'type': 'object'}, + 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, + 'type': 'object'}, + 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, + 'type': 'object'}, + 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'}, + 'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, + 'type': 'object'}, + 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, + 'type': 'object'}, + 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, + 'type': 'object'}, + 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, + 'type': 'object'}, + 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, + 'type': 'object'}, + 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, + 'type': 'object'}, + 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AddRelationResults) + async def AddRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] - Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> ++ endpoints : typing.Sequence[str] ++ Returns -> typing.Mapping[str, ~CharmRelation] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddRelation', version=2, params=_params) ++ msg = dict(type='Application', ++ request='AddRelation', ++ version=2, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(AddApplicationUnitsResults) + async def AddUnits(self, application, num_units, placement): + ''' + application : str + num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> - Returns -> typing.Sequence<+T_co>[str] ++ placement : typing.Sequence[~Placement] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddUnits', version=2, params=_params) ++ msg = dict(type='Application', ++ request='AddUnits', ++ version=2, ++ params=_params) + _params['application'] = application + _params['num-units'] = num_units + _params['placement'] = placement + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationCharmRelationsResults) + async def CharmRelations(self, application): + ''' + application : str - Returns -> typing.Sequence<+T_co>[str] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='CharmRelations', version=2, params=_params) ++ msg = dict(type='Application', ++ request='CharmRelations', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Deploy(self, applications): + ''' - applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ applications : typing.Sequence[~ApplicationDeploy] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Deploy', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Deploy', ++ version=2, ++ params=_params) + _params['applications'] = applications + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Destroy(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Destroy', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Destroy', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] ++ endpoints : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyRelation', version=2, params=_params) ++ msg = dict(type='Application', ++ request='DestroyRelation', ++ version=2, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyUnits(self, unit_names): + ''' - unit_names : typing.Sequence<+T_co>[str] ++ unit_names : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnits', version=2, params=_params) ++ msg = dict(type='Application', ++ request='DestroyUnits', ++ version=2, ++ params=_params) + _params['unit-names'] = unit_names + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Expose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Expose', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Expose', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationGetResults) + async def Get(self, application): + ''' + application : str - Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')] ++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Get', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Get', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def GetCharmURL(self, application): + ''' + application : str + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetCharmURL', version=2, params=_params) ++ msg = dict(type='Application', ++ request='GetCharmURL', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(GetConstraintsResults) + async def GetConstraints(self, application): + ''' + application : str + Returns -> Value + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetConstraints', version=2, params=_params) ++ msg = dict(type='Application', ++ request='GetConstraints', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Set(self, application, options): + ''' + application : str - options : typing.Mapping<~KT, +VT_co>[str, str] ++ options : typing.Mapping[str, str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Set', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Set', ++ version=2, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): + ''' + application : str + channel : str + charm_url : str - config_settings : typing.Mapping<~KT, +VT_co>[str, str] ++ config_settings : typing.Mapping[str, str] + config_settings_yaml : str + force_series : bool + force_units : bool - resource_ids : typing.Mapping<~KT, +VT_co>[str, str] - storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints> ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetCharm', version=2, params=_params) ++ msg = dict(type='Application', ++ request='SetCharm', ++ version=2, ++ params=_params) + _params['application'] = application + _params['channel'] = channel + _params['charm-url'] = charm_url + _params['config-settings'] = config_settings + _params['config-settings-yaml'] = config_settings_yaml + _params['force-series'] = force_series + _params['force-units'] = force_units + _params['resource-ids'] = resource_ids + _params['storage-constraints'] = storage_constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetConstraints(self, application, constraints): + ''' + application : str + constraints : Value + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetConstraints', version=2, params=_params) ++ msg = dict(type='Application', ++ request='SetConstraints', ++ version=2, ++ params=_params) + _params['application'] = application + _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetMetricCredentials(self, creds): + ''' - creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ creds : typing.Sequence[~ApplicationMetricCredential] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetMetricCredentials', version=2, params=_params) ++ msg = dict(type='Application', ++ request='SetMetricCredentials', ++ version=2, ++ params=_params) + _params['creds'] = creds + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unexpose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unexpose', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Unexpose', ++ version=2, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unset(self, application, options): + ''' + application : str - options : typing.Sequence<+T_co>[str] ++ options : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unset', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Unset', ++ version=2, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): + ''' + application : str + charm_url : str + constraints : Value + force_charm_url : bool + force_series : bool + min_units : int - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + settings_yaml : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Update', version=2, params=_params) ++ msg = dict(type='Application', ++ request='Update', ++ version=2, ++ params=_params) + _params['application'] = application + _params['charm-url'] = charm_url + _params['constraints'] = constraints + _params['force-charm-url'] = force_charm_url + _params['force-series'] = force_series + _params['min-units'] = min_units + _params['settings'] = settings + _params['settings-yaml'] = settings_yaml + reply = await self.rpc(msg) + return reply + + + - class BlockFacade(Type): - name = 'Block' ++class ApplicationOffersFacade(Type): ++ name = 'ApplicationOffers' + 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'}}, ++ schema = {'definitions': {'AddApplicationOffer': {'additionalProperties': False, ++ 'properties': {'application-description': {'type': 'string'}, ++ 'application-name': {'type': 'string'}, ++ 'endpoints': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'model-tag': {'type': 'string'}, ++ 'offer-name': {'type': 'string'}}, ++ 'required': ['model-tag', ++ 'offer-name', ++ 'application-name', ++ 'application-description', ++ 'endpoints'], ++ 'type': 'object'}, ++ 'AddApplicationOffers': {'additionalProperties': False, ++ 'properties': {'Offers': {'items': {'$ref': '#/definitions/AddApplicationOffer'}, ++ 'type': 'array'}}, ++ 'required': ['Offers'], ++ 'type': 'object'}, ++ 'ApplicationOfferAdminDetails': {'additionalProperties': False, ++ 'properties': {'ApplicationOfferDetails': {'$ref': '#/definitions/ApplicationOfferDetails'}, ++ 'application-name': {'type': 'string'}, ++ 'charm-url': {'type': 'string'}, ++ 'connections': {'items': {'$ref': '#/definitions/OfferConnection'}, ++ 'type': 'array'}}, ++ 'required': ['ApplicationOfferDetails', ++ 'application-name', ++ 'charm-url'], ++ 'type': 'object'}, ++ 'ApplicationOfferDetails': {'additionalProperties': False, ++ 'properties': {'application-description': {'type': 'string'}, ++ 'bindings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, ++ 'type': 'array'}, ++ 'offer-name': {'type': 'string'}, ++ 'offer-url': {'type': 'string'}, ++ 'offer-uuid': {'type': 'string'}, ++ 'source-model-tag': {'type': 'string'}, ++ 'spaces': {'items': {'$ref': '#/definitions/RemoteSpace'}, ++ 'type': 'array'}, ++ 'users': {'items': {'$ref': '#/definitions/OfferUserDetails'}, ++ 'type': 'array'}}, ++ 'required': ['source-model-tag', ++ 'offer-uuid', ++ 'offer-url', ++ 'offer-name', ++ 'application-description'], ++ 'type': 'object'}, ++ 'ApplicationOfferResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ApplicationOfferAdminDetails'}}, ++ 'type': 'object'}, ++ 'ApplicationOffersResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationOfferResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ConsumeOfferDetails': {'additionalProperties': False, ++ 'properties': {'external-controller': {'$ref': '#/definitions/ExternalControllerInfo'}, ++ 'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'offer': {'$ref': '#/definitions/ApplicationOfferDetails'}}, ++ 'type': 'object'}, ++ 'ConsumeOfferDetailsResult': {'additionalProperties': False, ++ 'properties': {'ConsumeOfferDetails': {'$ref': '#/definitions/ConsumeOfferDetails'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['ConsumeOfferDetails'], ++ 'type': 'object'}, ++ 'ConsumeOfferDetailsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ConsumeOfferDetailsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyApplicationOffers': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'offer-urls': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['offer-urls'], ++ 'type': 'object'}, ++ 'EndpointFilterAttributes': {'additionalProperties': False, ++ 'properties': {'interface': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'role': {'type': 'string'}}, ++ 'required': ['role', ++ 'interface', ++ 'name'], ++ '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'}, - 'BlockSwitchParams': {'additionalProperties': False, - 'properties': {'message': {'type': 'string'}, - 'type': {'type': 'string'}}, - 'required': ['type'], - 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'ErrorResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}}, + 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, - 'properties': {'List': {'properties': {'Result': {'$ref': '#/definitions/BlockResults'}}, - 'type': 'object'}, - 'SwitchBlockOff': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'}, - 'Result': {'$ref': '#/definitions/ErrorResult'}}, - 'type': 'object'}, - 'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'}, - 'Result': {'$ref': '#/definitions/ErrorResult'}}, - '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModifyOfferAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'action': {'type': 'string'}, ++ 'offer-url': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', ++ 'action', ++ 'access', ++ 'offer-url'], ++ 'type': 'object'}, ++ 'ModifyOfferAccessRequest': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyOfferAccess'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ 'type': 'object'}, ++ 'OfferConnection': {'additionalProperties': False, ++ 'properties': {'endpoint': {'type': 'string'}, ++ 'ingress-subnets': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'relation-id': {'type': 'integer'}, ++ 'source-model-tag': {'type': 'string'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'username': {'type': 'string'}}, ++ 'required': ['source-model-tag', ++ 'relation-id', ++ 'username', ++ 'endpoint', ++ 'status', ++ 'ingress-subnets'], ++ 'type': 'object'}, ++ 'OfferFilter': {'additionalProperties': False, ++ 'properties': {'allowed-users': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'application-description': {'type': 'string'}, ++ 'application-name': {'type': 'string'}, ++ 'application-user': {'type': 'string'}, ++ 'connected-users': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'endpoints': {'items': {'$ref': '#/definitions/EndpointFilterAttributes'}, ++ 'type': 'array'}, ++ 'model-name': {'type': 'string'}, ++ 'offer-name': {'type': 'string'}, ++ 'owner-name': {'type': 'string'}}, ++ 'required': ['owner-name', ++ 'model-name', ++ 'offer-name', ++ 'application-name', ++ 'application-description', ++ 'application-user', ++ 'endpoints', ++ 'connected-users', ++ 'allowed-users'], ++ 'type': 'object'}, ++ 'OfferFilters': {'additionalProperties': False, ++ 'properties': {'Filters': {'items': {'$ref': '#/definitions/OfferFilter'}, ++ 'type': 'array'}}, ++ 'required': ['Filters'], ++ 'type': 'object'}, ++ 'OfferURLs': {'additionalProperties': False, ++ 'properties': {'offer-urls': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'OfferUserDetails': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'access'], ++ 'type': 'object'}, ++ 'QueryApplicationOffersResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationOfferAdminDetails'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'RemoteApplicationInfo': {'additionalProperties': False, ++ 'properties': {'description': {'type': 'string'}, ++ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, ++ 'type': 'array'}, ++ 'icon-url-path': {'type': 'string'}, ++ 'model-tag': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'offer-url': {'type': 'string'}, ++ 'source-model-label': {'type': 'string'}}, ++ 'required': ['model-tag', ++ 'name', ++ 'description', ++ 'offer-url', ++ 'endpoints', ++ 'icon-url-path'], ++ 'type': 'object'}, ++ 'RemoteApplicationInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/RemoteApplicationInfo'}}, ++ 'type': 'object'}, ++ 'RemoteApplicationInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationInfoResult'}, ++ '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'}, ++ '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'}, ++ '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'}}, ++ 'properties': {'ApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'}, ++ 'Result': {'$ref': '#/definitions/ApplicationOffersResults'}}, ++ 'type': 'object'}, ++ 'DestroyOffers': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationOffers'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'FindApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferFilters'}, ++ 'Result': {'$ref': '#/definitions/QueryApplicationOffersResults'}}, ++ 'type': 'object'}, ++ 'GetConsumeDetails': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'}, ++ 'Result': {'$ref': '#/definitions/ConsumeOfferDetailsResults'}}, ++ 'type': 'object'}, ++ 'ListApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferFilters'}, ++ 'Result': {'$ref': '#/definitions/QueryApplicationOffersResults'}}, ++ 'type': 'object'}, ++ 'ModifyOfferAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyOfferAccessRequest'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Offer': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationOffers'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoteApplicationInfo': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'}, ++ 'Result': {'$ref': '#/definitions/RemoteApplicationInfoResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} + + - @ReturnMapping(BlockResults) - async def List(self): ++ @ReturnMapping(ApplicationOffersResults) ++ async def ApplicationOffers(self, offer_urls): ++ ''' ++ offer_urls : typing.Sequence[str] ++ Returns -> typing.Sequence[~ApplicationOfferResult] + ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ApplicationOffers', ++ request='ApplicationOffers', ++ version=2, ++ params=_params) ++ _params['offer-urls'] = offer_urls ++ reply = await self.rpc(msg) ++ return reply ++ ++ + - Returns -> typing.Sequence<+T_co>[~BlockResult]<~BlockResult> ++ @ReturnMapping(ErrorResults) ++ async def DestroyOffers(self, force, offer_urls): ++ ''' ++ force : bool ++ offer_urls : typing.Sequence[str] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Block', request='List', version=2, params=_params) ++ msg = dict(type='ApplicationOffers', ++ request='DestroyOffers', ++ version=2, ++ params=_params) ++ _params['force'] = force ++ _params['offer-urls'] = offer_urls ++ reply = await self.rpc(msg) ++ return reply + ++ ++ ++ @ReturnMapping(QueryApplicationOffersResults) ++ async def FindApplicationOffers(self, filters): ++ ''' ++ filters : typing.Sequence[~OfferFilter] ++ Returns -> typing.Sequence[~ApplicationOfferAdminDetails] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ApplicationOffers', ++ request='FindApplicationOffers', ++ version=2, ++ params=_params) ++ _params['Filters'] = filters + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResult) - async def SwitchBlockOff(self, message, type_): ++ @ReturnMapping(ConsumeOfferDetailsResults) ++ async def GetConsumeDetails(self, offer_urls): + ''' - message : str - type_ : str - Returns -> Error ++ offer_urls : typing.Sequence[str] ++ Returns -> typing.Sequence[~ConsumeOfferDetailsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Block', request='SwitchBlockOff', version=2, params=_params) - _params['message'] = message - _params['type'] = type_ ++ msg = dict(type='ApplicationOffers', ++ request='GetConsumeDetails', ++ version=2, ++ params=_params) ++ _params['offer-urls'] = offer_urls + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResult) - async def SwitchBlockOn(self, message, type_): ++ @ReturnMapping(QueryApplicationOffersResults) ++ async def ListApplicationOffers(self, filters): + ''' - message : str - type_ : str - Returns -> Error ++ filters : typing.Sequence[~OfferFilter] ++ Returns -> typing.Sequence[~ApplicationOfferAdminDetails] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Block', request='SwitchBlockOn', version=2, params=_params) - _params['message'] = message - _params['type'] = type_ ++ msg = dict(type='ApplicationOffers', ++ request='ListApplicationOffers', ++ version=2, ++ params=_params) ++ _params['Filters'] = filters + reply = await self.rpc(msg) + return reply + + + - class CharmRevisionUpdaterFacade(Type): - name = 'CharmRevisionUpdater' ++ @ReturnMapping(ErrorResults) ++ async def ModifyOfferAccess(self, changes): ++ ''' ++ changes : typing.Sequence[~ModifyOfferAccess] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ApplicationOffers', ++ request='ModifyOfferAccess', ++ version=2, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Offer(self, offers): ++ ''' ++ offers : typing.Sequence[~AddApplicationOffer] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ApplicationOffers', ++ request='Offer', ++ version=2, ++ params=_params) ++ _params['Offers'] = offers ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RemoteApplicationInfoResults) ++ async def RemoteApplicationInfo(self, offer_urls): ++ ''' ++ offer_urls : typing.Sequence[str] ++ Returns -> typing.Sequence[~RemoteApplicationInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ApplicationOffers', ++ request='RemoteApplicationInfo', ++ version=2, ++ params=_params) ++ _params['offer-urls'] = offer_urls ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class BackupsFacade(Type): ++ name = 'Backups' + version = 2 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ schema = {'definitions': {'BackupsCreateArgs': {'additionalProperties': False, ++ 'properties': {'keep-copy': {'type': 'boolean'}, ++ 'no-download': {'type': 'boolean'}, ++ 'notes': {'type': 'string'}}, ++ 'required': ['notes', ++ 'keep-copy', ++ 'no-download'], ++ 'type': 'object'}, ++ 'BackupsInfoArgs': {'additionalProperties': False, ++ 'properties': {'id': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'BackupsListArgs': {'additionalProperties': False, ++ 'type': 'object'}, ++ 'BackupsListResult': {'additionalProperties': False, ++ 'properties': {'list': {'items': {'$ref': '#/definitions/BackupsMetadataResult'}, ++ 'type': 'array'}}, ++ 'required': ['list'], ++ 'type': 'object'}, ++ 'BackupsMetadataResult': {'additionalProperties': False, ++ 'properties': {'ca-cert': {'type': 'string'}, ++ 'ca-private-key': {'type': 'string'}, ++ 'checksum': {'type': 'string'}, ++ 'checksum-format': {'type': 'string'}, ++ 'filename': {'type': 'string'}, ++ 'finished': {'format': 'date-time', ++ 'type': 'string'}, ++ 'hostname': {'type': 'string'}, ++ 'id': {'type': 'string'}, ++ 'machine': {'type': 'string'}, ++ 'model': {'type': 'string'}, ++ 'notes': {'type': 'string'}, ++ 'series': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'started': {'format': 'date-time', ++ 'type': 'string'}, ++ 'stored': {'format': 'date-time', ++ 'type': 'string'}, ++ 'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['id', ++ 'checksum', ++ 'checksum-format', ++ 'size', ++ 'stored', ++ 'started', ++ 'finished', ++ 'notes', ++ 'model', ++ 'machine', ++ 'hostname', ++ 'version', ++ 'series', ++ 'ca-cert', ++ 'ca-private-key', ++ 'filename'], ++ 'type': 'object'}, ++ 'BackupsRemoveArgs': {'additionalProperties': False, ++ 'properties': {'ids': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['ids'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'ErrorResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}}, + 'type': 'object'}, - 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, - 'properties': {'UpdateLatestRevisions': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}}, - 'type': 'object'}}, ++ 'ErrorResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, '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'}, ++ 'RestoreArgs': {'additionalProperties': False, ++ 'properties': {'backup-id': {'type': 'string'}}, ++ 'required': ['backup-id'], ++ 'type': 'object'}}, ++ 'properties': {'Create': {'properties': {'Params': {'$ref': '#/definitions/BackupsCreateArgs'}, ++ 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}}, ++ 'type': 'object'}, ++ 'FinishRestore': {'type': 'object'}, ++ 'Info': {'properties': {'Params': {'$ref': '#/definitions/BackupsInfoArgs'}, ++ 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}}, ++ 'type': 'object'}, ++ 'List': {'properties': {'Params': {'$ref': '#/definitions/BackupsListArgs'}, ++ 'Result': {'$ref': '#/definitions/BackupsListResult'}}, ++ 'type': 'object'}, ++ 'PrepareRestore': {'type': 'object'}, ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/BackupsRemoveArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Restore': {'properties': {'Params': {'$ref': '#/definitions/RestoreArgs'}}, ++ 'type': 'object'}}, + 'type': 'object'} + + - @ReturnMapping(ErrorResult) - async def UpdateLatestRevisions(self): ++ @ReturnMapping(BackupsMetadataResult) ++ async def Create(self, notes): + ''' - - Returns -> Error ++ notes : str ++ Returns -> typing.Union[str, int, _ForwardRef('Number')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='CharmRevisionUpdater', request='UpdateLatestRevisions', version=2, params=_params) - ++ msg = dict(type='Backups', ++ request='Create', ++ version=2, ++ params=_params) ++ _params['notes'] = notes + reply = await self.rpc(msg) + return reply + + + - class CharmsFacade(Type): - name = 'Charms' - version = 2 - schema = {'definitions': {'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'}, - 'CharmInfo': {'additionalProperties': False, - 'properties': {'actions': {'$ref': '#/definitions/CharmActions'}, - 'config': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmOption'}}, - 'type': 'object'}, - 'meta': {'$ref': '#/definitions/CharmMeta'}, - 'metrics': {'$ref': '#/definitions/CharmMetrics'}, - 'revision': {'type': 'integer'}, - 'url': {'type': 'string'}}, - 'required': ['revision', 'url', 'config'], - 'type': 'object'}, - 'CharmMeta': {'additionalProperties': False, - 'properties': {'categories': {'items': {'type': 'string'}, - 'type': 'array'}, - 'description': {'type': 'string'}, - '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'], ++ @ReturnMapping(None) ++ async def FinishRestore(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='FinishRestore', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BackupsMetadataResult) ++ async def Info(self, id_): ++ ''' ++ id_ : str ++ Returns -> typing.Union[str, int, _ForwardRef('Number')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='Info', ++ version=2, ++ params=_params) ++ _params['id'] = id_ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BackupsListResult) ++ async def List(self): ++ ''' ++ ++ Returns -> typing.Sequence[~BackupsMetadataResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='List', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def PrepareRestore(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='PrepareRestore', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, id_): ++ ''' ++ id_ : str ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='Remove', ++ version=2, ++ params=_params) ++ _params['id'] = id_ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Restore(self, backup_id): ++ ''' ++ backup_id : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Backups', ++ request='Restore', ++ version=2, ++ params=_params) ++ _params['backup-id'] = backup_id ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++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'}, - 'CharmMetrics': {'additionalProperties': False, - 'properties': {'metrics': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmMetric'}}, - 'type': 'object'}, - 'plan': {'$ref': '#/definitions/CharmPlan'}}, - 'required': ['metrics', 'plan'], ++ 'BlockResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'}, ++ 'type': 'array'}}, + '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'}, ++ 'BlockSwitchParams': {'additionalProperties': False, ++ 'properties': {'message': {'type': 'string'}, + 'type': {'type': 'string'}}, - 'required': ['name', 'type'], ++ 'required': ['type'], + 'type': 'object'}, - 'CharmPlan': {'additionalProperties': False, - 'properties': {'required': {'type': 'boolean'}}, - 'required': ['required'], ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, + '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'], ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'List': {'properties': {'Result': {'$ref': '#/definitions/BlockResults'}}, ++ 'type': 'object'}, ++ 'SwitchBlockOff': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, + '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'}, - 'CharmsList': {'additionalProperties': False, - 'properties': {'names': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['names'], - 'type': 'object'}, - 'CharmsListResult': {'additionalProperties': False, - 'properties': {'charm-urls': {'items': {'type': 'string'}, - 'type': 'array'}}, - 'required': ['charm-urls'], - 'type': 'object'}, - 'IsMeteredResult': {'additionalProperties': False, - 'properties': {'metered': {'type': 'boolean'}}, - 'required': ['metered'], - 'type': 'object'}}, - 'properties': {'CharmInfo': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'}, - 'Result': {'$ref': '#/definitions/CharmInfo'}}, - 'type': 'object'}, - 'IsMetered': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'}, - 'Result': {'$ref': '#/definitions/IsMeteredResult'}}, - 'type': 'object'}, - 'List': {'properties': {'Params': {'$ref': '#/definitions/CharmsList'}, - 'Result': {'$ref': '#/definitions/CharmsListResult'}}, - 'type': 'object'}}, ++ 'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} + + - @ReturnMapping(CharmInfo) - async def CharmInfo(self, url): ++ @ReturnMapping(BlockResults) ++ async def List(self): ++ ''' ++ ++ Returns -> typing.Sequence[~BlockResult] ++ ''' ++ # 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 ++ ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def SwitchBlockOff(self, message, type_): ++ ''' ++ message : str ++ type_ : str ++ Returns -> Error ++ ''' ++ # 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 ++ ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def SwitchBlockOn(self, message, type_): ++ ''' ++ message : str ++ type_ : str ++ Returns -> Error ++ ''' ++ # 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 ++ ++ ++ ++class BundleFacade(Type): ++ name = 'Bundle' ++ version = 2 ++ schema = {'definitions': {'BundleChange': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'type': 'array'}, ++ 'id': {'type': 'string'}, ++ 'method': {'type': 'string'}, ++ 'requires': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['id', ++ 'method', ++ 'args', ++ 'requires'], ++ 'type': 'object'}, ++ 'BundleChangesParams': {'additionalProperties': False, ++ 'properties': {'bundleURL': {'type': 'string'}, ++ 'yaml': {'type': 'string'}}, ++ 'required': ['yaml', 'bundleURL'], ++ 'type': 'object'}, ++ 'BundleChangesResults': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'}, ++ 'type': 'array'}, ++ 'errors': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}}, ++ 'properties': {'ExportBundle': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'GetChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'}, ++ 'Result': {'$ref': '#/definitions/BundleChangesResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(StringResult) ++ async def ExportBundle(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Bundle', ++ request='ExportBundle', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BundleChangesResults) ++ async def GetChanges(self, yaml): ++ ''' ++ yaml : str ++ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Bundle', ++ request='GetChanges', ++ version=2, ++ params=_params) ++ _params['yaml'] = yaml ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CharmRevisionUpdaterFacade(Type): ++ name = 'CharmRevisionUpdater' ++ version = 2 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, ++ 'properties': {'UpdateLatestRevisions': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def UpdateLatestRevisions(self): ++ ''' ++ ++ Returns -> Error ++ ''' ++ # 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 ++ ++ ++ ++class CharmsFacade(Type): ++ name = 'Charms' ++ version = 2 ++ schema = {'definitions': {'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'}, ++ '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'}, ++ 'CharmInfo': {'additionalProperties': False, ++ 'properties': {'actions': {'$ref': '#/definitions/CharmActions'}, ++ 'config': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmOption'}}, ++ 'type': 'object'}, ++ 'lxd-profile': {'$ref': '#/definitions/CharmLXDProfile'}, ++ 'meta': {'$ref': '#/definitions/CharmMeta'}, ++ 'metrics': {'$ref': '#/definitions/CharmMetrics'}, ++ 'revision': {'type': 'integer'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['revision', 'url', 'config'], ++ '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'}, ++ 'CharmMeta': {'additionalProperties': False, ++ 'properties': {'categories': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ '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'}, ++ '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'}, ++ 'CharmsList': {'additionalProperties': False, ++ 'properties': {'names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['names'], ++ 'type': 'object'}, ++ 'CharmsListResult': {'additionalProperties': False, ++ 'properties': {'charm-urls': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['charm-urls'], ++ 'type': 'object'}, ++ 'IsMeteredResult': {'additionalProperties': False, ++ 'properties': {'metered': {'type': 'boolean'}}, ++ 'required': ['metered'], ++ 'type': 'object'}}, ++ 'properties': {'CharmInfo': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'}, ++ 'Result': {'$ref': '#/definitions/CharmInfo'}}, ++ 'type': 'object'}, ++ 'IsMetered': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'}, ++ 'Result': {'$ref': '#/definitions/IsMeteredResult'}}, ++ 'type': 'object'}, ++ 'List': {'properties': {'Params': {'$ref': '#/definitions/CharmsList'}, ++ 'Result': {'$ref': '#/definitions/CharmsListResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(CharmInfo) ++ async def CharmInfo(self, url): ++ ''' ++ url : str ++ Returns -> typing.Union[_ForwardRef('CharmActions'), typing.Mapping[str, ~CharmOption], _ForwardRef('CharmMeta'), _ForwardRef('CharmMetrics'), int, str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Charms', ++ request='CharmInfo', ++ version=2, ++ params=_params) ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(IsMeteredResult) ++ async def IsMetered(self, url): ++ ''' ++ url : str ++ Returns -> bool ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Charms', ++ request='IsMetered', ++ version=2, ++ params=_params) ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CharmsListResult) ++ async def List(self, names): ++ ''' ++ names : typing.Sequence[str] ++ Returns -> typing.Sequence[str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Charms', ++ request='List', ++ version=2, ++ params=_params) ++ _params['names'] = names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CleanerFacade(Type): ++ name = 'Cleaner' ++ version = 2 ++ schema = {'definitions': {'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ 'type': 'object'}}, ++ 'properties': {'Cleanup': {'type': 'object'}, ++ 'WatchCleanups': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(None) ++ async def Cleanup(self): ++ ''' ++ ++ 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 ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchCleanups(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # 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 ++ ++ ++ ++class ClientFacade(Type): ++ name = 'Client' ++ version = 2 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'AddCharm': {'additionalProperties': False, ++ 'properties': {'channel': {'type': 'string'}, ++ 'force': {'type': 'boolean'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', 'channel', 'force'], ++ 'type': 'object'}, ++ 'AddCharmWithAuthorization': {'additionalProperties': False, ++ 'properties': {'channel': {'type': 'string'}, ++ 'force': {'type': 'boolean'}, ++ 'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'url': {'type': 'string'}}, ++ 'required': ['url', ++ 'channel', ++ 'macaroon', ++ 'force'], ++ 'type': 'object'}, ++ 'AddMachineParams': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, ++ 'type': 'array'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'container-type': {'type': 'string'}, ++ 'disks': {'items': {'$ref': '#/definitions/Constraints'}, ++ 'type': 'array'}, ++ 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, ++ 'instance-id': {'type': 'string'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'nonce': {'type': 'string'}, ++ 'parent-id': {'type': 'string'}, ++ 'placement': {'$ref': '#/definitions/Placement'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['series', ++ 'constraints', ++ 'jobs', ++ 'parent-id', ++ 'container-type', ++ 'instance-id', ++ 'nonce', ++ 'hardware-characteristics', ++ 'addresses'], ++ 'type': 'object'}, ++ 'AddMachines': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'AddMachinesResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'machine': {'type': 'string'}}, ++ 'required': ['machine'], ++ 'type': 'object'}, ++ 'AddMachinesResults': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, ++ 'type': 'array'}}, ++ 'required': ['machines'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'AgentVersionResult': {'additionalProperties': False, ++ 'properties': {'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['version'], ++ 'type': 'object'}, ++ 'AllWatcherId': {'additionalProperties': False, ++ 'properties': {'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id'], ++ 'type': 'object'}, ++ 'ApplicationOfferStatus': {'additionalProperties': False, ++ 'properties': {'active-connected-count': {'type': 'integer'}, ++ 'application-name': {'type': 'string'}, ++ 'charm': {'type': 'string'}, ++ 'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteEndpoint'}}, ++ 'type': 'object'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'offer-name': {'type': 'string'}, ++ 'total-connected-count': {'type': 'integer'}}, ++ 'required': ['offer-name', ++ 'application-name', ++ 'charm', ++ 'endpoints', ++ 'active-connected-count', ++ 'total-connected-count'], ++ 'type': 'object'}, ++ 'ApplicationStatus': {'additionalProperties': False, ++ 'properties': {'can-upgrade-to': {'type': 'string'}, ++ 'charm': {'type': 'string'}, ++ 'charm-verion': {'type': 'string'}, ++ 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'exposed': {'type': 'boolean'}, ++ 'int': {'type': 'integer'}, ++ 'life': {'type': 'string'}, ++ 'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}}, ++ 'type': 'object'}, ++ 'provider-id': {'type': 'string'}, ++ 'public-address': {'type': 'string'}, ++ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'series': {'type': 'string'}, ++ 'status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'string': {'type': 'string'}, ++ 'subordinate-to': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, ++ 'type': 'object'}, ++ 'workload-version': {'type': 'string'}}, ++ 'required': ['charm', ++ 'series', ++ 'exposed', ++ 'life', ++ 'relations', ++ 'can-upgrade-to', ++ 'subordinate-to', ++ 'units', ++ 'meter-statuses', ++ 'status', ++ 'workload-version', ++ 'charm-verion', ++ 'endpoint-bindings', ++ 'public-address'], ++ 'type': 'object'}, ++ 'Binary': {'additionalProperties': False, ++ 'properties': {'Arch': {'type': 'string'}, ++ 'Number': {'$ref': '#/definitions/Number'}, ++ 'Series': {'type': 'string'}}, ++ 'required': ['Number', 'Series', 'Arch'], ++ 'type': 'object'}, ++ 'BundleChange': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'type': 'array'}, ++ 'id': {'type': 'string'}, ++ 'method': {'type': 'string'}, ++ 'requires': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['id', ++ 'method', ++ 'args', ++ 'requires'], ++ 'type': 'object'}, ++ 'BundleChangesParams': {'additionalProperties': False, ++ 'properties': {'bundleURL': {'type': 'string'}, ++ 'yaml': {'type': 'string'}}, ++ 'required': ['yaml', 'bundleURL'], ++ 'type': 'object'}, ++ 'BundleChangesResults': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'}, ++ 'type': 'array'}, ++ 'errors': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'BytesResult': {'additionalProperties': False, ++ 'properties': {'result': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'ConfigValue': {'additionalProperties': False, ++ 'properties': {'source': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['value', 'source'], ++ 'type': 'object'}, ++ 'Constraints': {'additionalProperties': False, ++ 'properties': {'Count': {'type': 'integer'}, ++ 'Pool': {'type': 'string'}, ++ 'Size': {'type': 'integer'}}, ++ 'required': ['Pool', 'Size', 'Count'], ++ 'type': 'object'}, ++ 'DestroyMachines': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'machine-names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['machine-names', 'force'], ++ 'type': 'object'}, ++ 'DetailedStatus': {'additionalProperties': False, ++ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'info': {'type': 'string'}, ++ 'kind': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'since': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'version': {'type': 'string'}}, ++ 'required': ['status', ++ 'info', ++ 'data', ++ 'since', ++ 'kind', ++ 'version', ++ 'life'], ++ 'type': 'object'}, ++ 'EndpointStatus': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'role': {'type': 'string'}, ++ 'subordinate': {'type': 'boolean'}}, ++ 'required': ['application', ++ 'name', ++ 'role', ++ 'subordinate'], ++ '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'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'FindToolsParams': {'additionalProperties': False, ++ 'properties': {'agentstream': {'type': 'string'}, ++ 'arch': {'type': 'string'}, ++ 'major': {'type': 'integer'}, ++ 'minor': {'type': 'integer'}, ++ 'number': {'$ref': '#/definitions/Number'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['number', ++ 'major', ++ 'minor', ++ 'arch', ++ 'series', ++ 'agentstream'], ++ 'type': 'object'}, ++ 'FindToolsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'list': {'items': {'$ref': '#/definitions/Tools'}, ++ 'type': 'array'}}, ++ 'required': ['list'], ++ 'type': 'object'}, ++ 'FullStatus': {'additionalProperties': False, ++ 'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}}, ++ 'type': 'object'}, ++ 'controller-timestamp': {'format': 'date-time', ++ 'type': 'string'}, ++ 'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, ++ 'type': 'object'}, ++ 'model': {'$ref': '#/definitions/ModelStatusInfo'}, ++ 'offers': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationOfferStatus'}}, ++ 'type': 'object'}, ++ 'relations': {'items': {'$ref': '#/definitions/RelationStatus'}, ++ 'type': 'array'}, ++ 'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}}, ++ 'type': 'object'}}, ++ 'required': ['model', ++ 'machines', ++ 'applications', ++ 'remote-applications', ++ 'offers', ++ 'relations', ++ 'controller-timestamp'], ++ 'type': 'object'}, ++ 'GetConstraintsResults': {'additionalProperties': False, ++ 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'HardwareCharacteristics': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'History': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'}, ++ 'type': 'array'}}, ++ 'required': ['statuses'], ++ 'type': 'object'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ 'type': 'object'}, ++ 'LXDProfile': {'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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineHardware': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'MachineStatus': {'additionalProperties': False, ++ 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'constraints': {'type': 'string'}, ++ 'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}}, ++ 'type': 'object'}, ++ 'dns-name': {'type': 'string'}, ++ 'hardware': {'type': 'string'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'instance-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'ip-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'lxd-profiles': {'patternProperties': {'.*': {'$ref': '#/definitions/LXDProfile'}}, ++ 'type': 'object'}, ++ 'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}}, ++ 'type': 'object'}, ++ 'series': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['agent-status', ++ 'instance-status', ++ 'dns-name', ++ 'instance-id', ++ 'series', ++ 'id', ++ 'containers', ++ 'constraints', ++ 'hardware', ++ 'jobs', ++ 'has-vote', ++ 'wants-vote'], ++ 'type': 'object'}, ++ 'MeterStatus': {'additionalProperties': False, ++ 'properties': {'color': {'type': 'string'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['color', 'message'], ++ 'type': 'object'}, ++ 'ModelConfigResults': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelInfo': {'additionalProperties': False, ++ 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, ++ 'cloud-credential-tag': {'type': 'string'}, ++ 'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'controller-uuid': {'type': 'string'}, ++ 'default-series': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, ++ 'type': 'array'}, ++ 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'provider-type': {'type': 'string'}, ++ 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'type': {'type': 'string'}, ++ 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, ++ 'type': 'array'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', ++ 'type', ++ 'uuid', ++ 'controller-uuid', ++ 'cloud-tag', ++ 'owner-tag', ++ 'life', ++ 'users', ++ 'machines', ++ 'sla', ++ 'agent-version'], ++ 'type': 'object'}, ++ 'ModelMachineInfo': {'additionalProperties': False, ++ 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelMigrationStatus': {'additionalProperties': False, ++ 'properties': {'end': {'format': 'date-time', ++ 'type': 'string'}, ++ 'start': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['status', 'start'], ++ 'type': 'object'}, ++ 'ModelSLA': {'additionalProperties': False, ++ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'creds': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['ModelSLAInfo', 'creds'], ++ 'type': 'object'}, ++ 'ModelSLAInfo': {'additionalProperties': False, ++ 'properties': {'level': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['level', 'owner'], ++ 'type': 'object'}, ++ 'ModelSet': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelStatusInfo': {'additionalProperties': False, ++ 'properties': {'available-version': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'meter-status': {'$ref': '#/definitions/MeterStatus'}, ++ 'model-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ 'sla': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'version': {'type': 'string'}}, ++ 'required': ['name', ++ 'type', ++ 'cloud-tag', ++ 'version', ++ 'available-version', ++ 'model-status', ++ 'meter-status', ++ 'sla'], ++ 'type': 'object'}, ++ 'ModelUnset': {'additionalProperties': False, ++ 'properties': {'keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'ModelUserInfo': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'last-connection', ++ 'access'], ++ 'type': 'object'}, ++ 'ModelUserInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ModelUserInfo'}}, ++ 'type': 'object'}, ++ 'ModelUserInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ModelUserInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'NetworkInterface': {'additionalProperties': False, ++ 'properties': {'dns-nameservers': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'gateway': {'type': 'string'}, ++ 'ip-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'is-up': {'type': 'boolean'}, ++ 'mac-address': {'type': 'string'}, ++ 'space': {'type': 'string'}}, ++ 'required': ['ip-addresses', ++ 'mac-address', ++ 'is-up'], ++ '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'}, ++ 'Placement': {'additionalProperties': False, ++ 'properties': {'directive': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['scope', 'directive'], ++ 'type': 'object'}, ++ 'PrivateAddress': {'additionalProperties': False, ++ 'properties': {'target': {'type': 'string'}}, ++ 'required': ['target'], ++ 'type': 'object'}, ++ 'PrivateAddressResults': {'additionalProperties': False, ++ 'properties': {'private-address': {'type': 'string'}}, ++ 'required': ['private-address'], ++ 'type': 'object'}, ++ 'ProvisioningScriptParams': {'additionalProperties': False, ++ 'properties': {'data-dir': {'type': 'string'}, ++ 'disable-package-commands': {'type': 'boolean'}, ++ 'machine-id': {'type': 'string'}, ++ 'nonce': {'type': 'string'}}, ++ 'required': ['machine-id', ++ 'nonce', ++ 'data-dir', ++ 'disable-package-commands'], ++ 'type': 'object'}, ++ 'ProvisioningScriptResult': {'additionalProperties': False, ++ 'properties': {'script': {'type': 'string'}}, ++ 'required': ['script'], ++ 'type': 'object'}, ++ 'PublicAddress': {'additionalProperties': False, ++ 'properties': {'target': {'type': 'string'}}, ++ 'required': ['target'], ++ 'type': 'object'}, ++ 'PublicAddressResults': {'additionalProperties': False, ++ 'properties': {'public-address': {'type': 'string'}}, ++ 'required': ['public-address'], ++ 'type': 'object'}, ++ 'RelationStatus': {'additionalProperties': False, ++ 'properties': {'endpoints': {'items': {'$ref': '#/definitions/EndpointStatus'}, ++ 'type': 'array'}, ++ 'id': {'type': 'integer'}, ++ 'interface': {'type': 'string'}, ++ 'key': {'type': 'string'}, ++ 'scope': {'type': 'string'}, ++ 'status': {'$ref': '#/definitions/DetailedStatus'}}, ++ 'required': ['id', ++ 'key', ++ 'interface', ++ 'scope', ++ 'endpoints', ++ 'status'], ++ 'type': 'object'}, ++ 'RemoteApplicationStatus': {'additionalProperties': False, ++ 'properties': {'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, ++ 'type': 'array'}, ++ 'err': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'life': {'type': 'string'}, ++ 'offer-name': {'type': 'string'}, ++ 'offer-url': {'type': 'string'}, ++ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'status': {'$ref': '#/definitions/DetailedStatus'}}, ++ 'required': ['offer-url', ++ 'offer-name', ++ 'endpoints', ++ 'life', ++ 'relations', ++ 'status'], ++ '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'}, ++ 'ResolveCharmResult': {'additionalProperties': False, ++ 'properties': {'error': {'type': 'string'}, ++ 'url': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ResolveCharmResults': {'additionalProperties': False, ++ 'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'}, ++ 'type': 'array'}}, ++ 'required': ['urls'], ++ 'type': 'object'}, ++ 'ResolveCharms': {'additionalProperties': False, ++ 'properties': {'references': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['references'], ++ 'type': 'object'}, ++ 'Resolved': {'additionalProperties': False, ++ 'properties': {'retry': {'type': 'boolean'}, ++ 'unit-name': {'type': 'string'}}, ++ 'required': ['unit-name', 'retry'], ++ 'type': 'object'}, ++ 'SetConstraints': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}}, ++ 'required': ['application', 'constraints'], ++ 'type': 'object'}, ++ 'SetModelAgentVersion': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'version': {'$ref': '#/definitions/Number'}}, ++ 'required': ['version'], ++ 'type': 'object'}, ++ 'StatusHistoryFilter': {'additionalProperties': False, ++ 'properties': {'date': {'format': 'date-time', ++ 'type': 'string'}, ++ 'delta': {'type': 'integer'}, ++ 'exclude': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'size': {'type': 'integer'}}, ++ 'required': ['size', ++ 'date', ++ 'delta', ++ 'exclude'], ++ 'type': 'object'}, ++ 'StatusHistoryRequest': {'additionalProperties': False, ++ 'properties': {'filter': {'$ref': '#/definitions/StatusHistoryFilter'}, ++ 'historyKind': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['historyKind', ++ 'size', ++ 'filter', ++ 'tag'], ++ 'type': 'object'}, ++ 'StatusHistoryRequests': {'additionalProperties': False, ++ 'properties': {'requests': {'items': {'$ref': '#/definitions/StatusHistoryRequest'}, ++ 'type': 'array'}}, ++ 'required': ['requests'], ++ 'type': 'object'}, ++ 'StatusHistoryResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'history': {'$ref': '#/definitions/History'}}, ++ 'required': ['history'], ++ 'type': 'object'}, ++ 'StatusHistoryResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'StatusParams': {'additionalProperties': False, ++ 'properties': {'patterns': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['patterns'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'Tools': {'additionalProperties': False, ++ 'properties': {'sha256': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'url': {'type': 'string'}, ++ 'version': {'$ref': '#/definitions/Binary'}}, ++ 'required': ['version', 'url', 'size'], ++ 'type': 'object'}, ++ 'UnitStatus': {'additionalProperties': False, ++ 'properties': {'address': {'type': 'string'}, ++ 'agent-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'charm': {'type': 'string'}, ++ 'leader': {'type': 'boolean'}, ++ 'machine': {'type': 'string'}, ++ 'opened-ports': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'provider-id': {'type': 'string'}, ++ 'public-address': {'type': 'string'}, ++ 'subordinates': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}}, ++ 'type': 'object'}, ++ 'workload-status': {'$ref': '#/definitions/DetailedStatus'}, ++ 'workload-version': {'type': 'string'}}, ++ 'required': ['agent-status', ++ 'workload-status', ++ 'workload-version', ++ 'machine', ++ 'opened-ports', ++ 'public-address', ++ 'charm', ++ 'subordinates'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ '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': {'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'AbortCurrentUpgrade': {'type': 'object'}, ++ 'AddCharm': {'properties': {'Params': {'$ref': '#/definitions/AddCharm'}}, ++ 'type': 'object'}, ++ 'AddCharmWithAuthorization': {'properties': {'Params': {'$ref': '#/definitions/AddCharmWithAuthorization'}}, ++ 'type': 'object'}, ++ 'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'AddMachinesV2': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'AgentVersion': {'properties': {'Result': {'$ref': '#/definitions/AgentVersionResult'}}, ++ 'type': 'object'}, ++ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'type': 'object'}, ++ 'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}}, ++ 'type': 'object'}, ++ 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'}, ++ 'Result': {'$ref': '#/definitions/FindToolsResult'}}, ++ 'type': 'object'}, ++ 'FullStatus': {'properties': {'Params': {'$ref': '#/definitions/StatusParams'}, ++ 'Result': {'$ref': '#/definitions/FullStatus'}}, ++ 'type': 'object'}, ++ 'GetBundleChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'}, ++ 'Result': {'$ref': '#/definitions/BundleChangesResults'}}, ++ 'type': 'object'}, ++ 'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, ++ 'type': 'object'}, ++ 'InjectMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, ++ 'type': 'object'}, ++ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelInfo'}}, ++ 'type': 'object'}, ++ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, ++ 'type': 'object'}, ++ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, ++ 'type': 'object'}, ++ 'ModelUserInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelUserInfoResults'}}, ++ 'type': 'object'}, ++ 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/PrivateAddress'}, ++ 'Result': {'$ref': '#/definitions/PrivateAddressResults'}}, ++ 'type': 'object'}, ++ 'ProvisioningScript': {'properties': {'Params': {'$ref': '#/definitions/ProvisioningScriptParams'}, ++ 'Result': {'$ref': '#/definitions/ProvisioningScriptResult'}}, ++ 'type': 'object'}, ++ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/PublicAddress'}, ++ 'Result': {'$ref': '#/definitions/PublicAddressResults'}}, ++ 'type': 'object'}, ++ 'ResolveCharms': {'properties': {'Params': {'$ref': '#/definitions/ResolveCharms'}, ++ 'Result': {'$ref': '#/definitions/ResolveCharmResults'}}, ++ 'type': 'object'}, ++ 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Resolved'}}, ++ 'type': 'object'}, ++ 'RetryProvisioning': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'SetModelAgentVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelAgentVersion'}}, ++ 'type': 'object'}, ++ 'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, ++ 'type': 'object'}, ++ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, ++ 'type': 'object'}, ++ 'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'}, ++ 'Result': {'$ref': '#/definitions/StatusHistoryResults'}}, ++ 'type': 'object'}, ++ 'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='APIHostPorts', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AbortCurrentUpgrade(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AbortCurrentUpgrade', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AddCharm(self, channel, url): ++ ''' ++ channel : str ++ url : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddCharm', ++ version=2, ++ params=_params) ++ _params['channel'] = channel ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def AddCharmWithAuthorization(self, channel, macaroon, url): ++ ''' ++ channel : str ++ macaroon : Macaroon ++ url : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddCharmWithAuthorization', ++ version=2, ++ params=_params) ++ _params['channel'] = channel ++ _params['macaroon'] = macaroon ++ _params['url'] = url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def AddMachines(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddMachines', ++ version=2, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def AddMachinesV2(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AddMachinesV2', ++ version=2, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AgentVersionResult) ++ async def AgentVersion(self): ++ ''' ++ ++ Returns -> Number ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='AgentVersion', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BytesResult) ++ async def CACert(self): ++ ''' ++ ++ Returns -> typing.Sequence[int] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='CACert', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyMachines(self, force, machine_names): ++ ''' ++ force : bool ++ machine_names : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='DestroyMachines', ++ version=2, ++ params=_params) ++ _params['force'] = force ++ _params['machine-names'] = machine_names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FindToolsResult) ++ async def FindTools(self, arch, major, minor, number, series): ++ ''' ++ arch : str ++ major : int ++ minor : int ++ number : Number ++ series : str ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='FindTools', ++ version=2, ++ params=_params) ++ _params['arch'] = arch ++ _params['major'] = major ++ _params['minor'] = minor ++ _params['number'] = number ++ _params['series'] = series ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FullStatus) ++ async def FullStatus(self, patterns): ++ ''' ++ patterns : typing.Sequence[str] ++ Returns -> typing.Union[typing.Mapping[str, ~ApplicationStatus], str, typing.Mapping[str, ~MachineStatus], _ForwardRef('ModelStatusInfo'), typing.Mapping[str, ~ApplicationOfferStatus], typing.Sequence[~RelationStatus], typing.Mapping[str, ~RemoteApplicationStatus]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='FullStatus', ++ version=2, ++ params=_params) ++ _params['patterns'] = patterns ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BundleChangesResults) ++ async def GetBundleChanges(self, yaml): ++ ''' ++ yaml : str ++ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='GetBundleChanges', ++ version=2, ++ params=_params) ++ _params['yaml'] = yaml ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(GetConstraintsResults) ++ async def GetModelConstraints(self): ++ ''' ++ ++ Returns -> Value ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='GetModelConstraints', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def InjectMachines(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='InjectMachines', ++ version=2, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResults) ++ async def ModelGet(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, ~ConfigValue] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelGet', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelInfo) ++ async def ModelInfo(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelInfo', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelSet(self, config): ++ ''' ++ config : typing.Mapping[str, typing.Any] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelSet', ++ version=2, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelUnset(self, keys): ++ ''' ++ keys : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelUnset', ++ version=2, ++ params=_params) ++ _params['keys'] = keys ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelUserInfoResults) ++ async def ModelUserInfo(self): ++ ''' ++ ++ Returns -> typing.Sequence[~ModelUserInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ModelUserInfo', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(PrivateAddressResults) ++ async def PrivateAddress(self, target): ++ ''' ++ target : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='PrivateAddress', ++ version=2, ++ params=_params) ++ _params['target'] = target ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ProvisioningScriptResult) ++ async def ProvisioningScript(self, data_dir, disable_package_commands, machine_id, nonce): ++ ''' ++ data_dir : str ++ disable_package_commands : bool ++ machine_id : str ++ nonce : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ProvisioningScript', ++ version=2, ++ params=_params) ++ _params['data-dir'] = data_dir ++ _params['disable-package-commands'] = disable_package_commands ++ _params['machine-id'] = machine_id ++ _params['nonce'] = nonce ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(PublicAddressResults) ++ async def PublicAddress(self, target): ++ ''' ++ target : str ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='PublicAddress', ++ version=2, ++ params=_params) ++ _params['target'] = target ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ResolveCharmResults) ++ async def ResolveCharms(self, references): ++ ''' ++ references : typing.Sequence[str] ++ Returns -> typing.Sequence[~ResolveCharmResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='ResolveCharms', ++ version=2, ++ params=_params) ++ _params['references'] = references ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Resolved(self, retry, unit_name): ++ ''' ++ retry : bool ++ unit_name : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='Resolved', ++ version=2, ++ params=_params) ++ _params['retry'] = retry ++ _params['unit-name'] = unit_name ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RetryProvisioning(self, entities): + ''' - url : str - Returns -> typing.Union[_ForwardRef('CharmActions'), typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption>, _ForwardRef('CharmMeta'), _ForwardRef('CharmMetrics'), int, str] ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Charms', request='CharmInfo', version=2, params=_params) - _params['url'] = url ++ msg = dict(type='Client', ++ request='RetryProvisioning', ++ version=2, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(IsMeteredResult) - async def IsMetered(self, url): ++ @ReturnMapping(StringResult) ++ async def SLALevel(self): + ''' - url : str - Returns -> bool ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Charms', request='IsMetered', version=2, params=_params) - _params['url'] = url ++ msg = dict(type='Client', ++ request='SLALevel', ++ version=2, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(CharmsListResult) - async def List(self, names): ++ @ReturnMapping(None) ++ async def SetModelAgentVersion(self, version): + ''' - names : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[str] ++ version : Number ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Charms', request='List', version=2, params=_params) - _params['names'] = names ++ msg = dict(type='Client', ++ request='SetModelAgentVersion', ++ version=2, ++ params=_params) ++ _params['version'] = version + reply = await self.rpc(msg) + return reply + + + - class CleanerFacade(Type): - name = 'Cleaner' ++ @ReturnMapping(None) ++ async def SetModelConstraints(self, application, constraints): ++ ''' ++ application : str ++ constraints : Value ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SetModelConstraints', ++ version=2, ++ params=_params) ++ _params['application'] = application ++ _params['constraints'] = constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetSLALevel(self, creds, level): ++ ''' ++ creds : typing.Sequence[int] ++ level : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='SetSLALevel', ++ version=2, ++ params=_params) ++ _params['creds'] = creds ++ _params['level'] = level ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusHistoryResults) ++ async def StatusHistory(self, requests): ++ ''' ++ requests : typing.Sequence[~StatusHistoryRequest] ++ Returns -> typing.Sequence[~StatusHistoryResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='StatusHistory', ++ version=2, ++ params=_params) ++ _params['requests'] = requests ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AllWatcherId) ++ async def WatchAll(self): ++ ''' ++ ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Client', ++ request='WatchAll', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CredentialValidatorFacade(Type): ++ name = 'CredentialValidator' + version = 2 - schema = {'definitions': {'Error': {'additionalProperties': False, ++ schema = {'definitions': {'Entity': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'InvalidateCredentialArg': {'additionalProperties': False, ++ 'properties': {'reason': {'type': 'string'}}, ++ 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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': {'Cleanup': {'type': 'object'}, - 'WatchCleanups': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, - 'type': 'object'}}, ++ 'properties': {'InvalidateModelCredential': {'properties': {'Params': {'$ref': '#/definitions/InvalidateCredentialArg'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}, ++ 'ModelCredential': {'properties': {'Result': {'$ref': '#/definitions/ModelCredential'}}, ++ 'type': 'object'}, ++ 'WatchCredential': {'properties': {'Params': {'$ref': '#/definitions/Entity'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchModelCredential': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, + 'type': 'object'} + + - @ReturnMapping(None) - async def Cleanup(self): ++ @ReturnMapping(ErrorResult) ++ async def InvalidateModelCredential(self, reason): ++ ''' ++ reason : str ++ Returns -> Error ++ ''' ++ # 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 ++ ++ ++ ++ @ReturnMapping(ModelCredential) ++ async def ModelCredential(self): + ''' + - Returns -> None ++ Returns -> typing.Union[str, bool] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cleaner', request='Cleanup', version=2, params=_params) ++ msg = dict(type='CredentialValidator', ++ request='ModelCredential', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) - async def WatchCleanups(self): ++ async def WatchCredential(self, tag): ++ ''' ++ tag : str ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # 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 ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchModelCredential(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Cleaner', request='WatchCleanups', version=2, params=_params) ++ msg = dict(type='CredentialValidator', ++ request='WatchModelCredential', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class DiscoverSpacesFacade(Type): + name = 'DiscoverSpaces' + version = 2 + schema = {'definitions': {'AddSubnetParams': {'additionalProperties': False, + 'properties': {'provider-network-id': {'type': 'string'}, + 'space-tag': {'type': 'string'}, + 'subnet-provider-id': {'type': 'string'}, + 'subnet-tag': {'type': 'string'}, + 'vlan-tag': {'type': 'integer'}, + 'zones': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['space-tag'], + 'type': 'object'}, + 'AddSubnetsParams': {'additionalProperties': False, + 'properties': {'subnets': {'items': {'$ref': '#/definitions/AddSubnetParams'}, + 'type': 'array'}}, + 'required': ['subnets'], + 'type': 'object'}, + 'CreateSpaceParams': {'additionalProperties': False, + 'properties': {'provider-id': {'type': 'string'}, + 'public': {'type': 'boolean'}, + 'space-tag': {'type': 'string'}, + 'subnet-tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['subnet-tags', + 'space-tag', + 'public'], + 'type': 'object'}, + 'CreateSpacesParams': {'additionalProperties': False, + 'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'}, + 'type': 'array'}}, + 'required': ['spaces'], + 'type': 'object'}, + 'DiscoverSpacesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ProviderSpace'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ListSubnetsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/Subnet'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'ModelConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ProviderSpace': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'provider-id': {'type': 'string'}, + 'subnets': {'items': {'$ref': '#/definitions/Subnet'}, + 'type': 'array'}}, + 'required': ['name', + 'provider-id', + 'subnets'], + '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'}, + 'SubnetsFilters': {'additionalProperties': False, + 'properties': {'space-tag': {'type': 'string'}, + 'zone': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddSubnets': {'properties': {'Params': {'$ref': '#/definitions/AddSubnetsParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/DiscoverSpacesResults'}}, + 'type': 'object'}, + 'ListSubnets': {'properties': {'Params': {'$ref': '#/definitions/SubnetsFilters'}, + 'Result': {'$ref': '#/definitions/ListSubnetsResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def AddSubnets(self, subnets): + ''' - subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ subnets : typing.Sequence[~AddSubnetParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiscoverSpaces', request='AddSubnets', version=2, params=_params) ++ msg = dict(type='DiscoverSpaces', ++ request='AddSubnets', ++ version=2, ++ params=_params) + _params['subnets'] = subnets + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def CreateSpaces(self, spaces): + ''' - spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ spaces : typing.Sequence[~CreateSpaceParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiscoverSpaces', request='CreateSpaces', version=2, params=_params) ++ msg = dict(type='DiscoverSpaces', ++ request='CreateSpaces', ++ version=2, ++ params=_params) + _params['spaces'] = spaces + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DiscoverSpacesResults) + async def ListSpaces(self): + ''' + - Returns -> typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace> ++ Returns -> typing.Sequence[~ProviderSpace] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiscoverSpaces', request='ListSpaces', version=2, params=_params) ++ msg = dict(type='DiscoverSpaces', ++ request='ListSpaces', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListSubnetsResults) + async def ListSubnets(self, space_tag, zone): + ''' + space_tag : str + zone : str - Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ Returns -> typing.Sequence[~Subnet] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiscoverSpaces', request='ListSubnets', version=2, params=_params) ++ msg = dict(type='DiscoverSpaces', ++ request='ListSubnets', ++ version=2, ++ params=_params) + _params['space-tag'] = space_tag + _params['zone'] = zone + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiscoverSpaces', request='ModelConfig', version=2, params=_params) ++ msg = dict(type='DiscoverSpaces', ++ request='ModelConfig', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +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'}, + 'Size': {'type': 'integer'}, + 'UUID': {'type': 'string'}, + 'WWN': {'type': 'string'}}, + 'required': ['DeviceName', + 'DeviceLinks', + 'Label', + 'UUID', + 'HardwareId', + 'WWN', + 'BusAddress', + 'Size', + 'FilesystemType', + 'InUse', + 'MountPoint'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, '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'} + + + @ReturnMapping(ErrorResults) + async def SetMachineBlockDevices(self, machine_block_devices): + ''' - machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ machine_block_devices : typing.Sequence[~MachineBlockDevices] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='DiskManager', request='SetMachineBlockDevices', version=2, params=_params) ++ msg = dict(type='DiskManager', ++ request='SetMachineBlockDevices', ++ version=2, ++ params=_params) + _params['machine-block-devices'] = machine_block_devices + reply = await self.rpc(msg) + return reply + + + +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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, + 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/EntitiesWatchResult'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(EntitiesWatchResult) + async def Next(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='EntityWatcher', request='Next', version=2, params=_params) ++ msg = dict(type='EntityWatcher', ++ request='Next', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='EntityWatcher', request='Stop', version=2, params=_params) ++ msg = dict(type='EntityWatcher', ++ request='Stop', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class FilesystemAttachmentsWatcherFacade(Type): + name = 'FilesystemAttachmentsWatcher' + version = 2 + schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(MachineStorageIdsWatchResult) + async def Next(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='FilesystemAttachmentsWatcher', request='Next', version=2, params=_params) ++ msg = dict(type='FilesystemAttachmentsWatcher', ++ request='Next', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='FilesystemAttachmentsWatcher', request='Stop', version=2, params=_params) ++ msg = dict(type='FilesystemAttachmentsWatcher', ++ request='Stop', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class HighAvailabilityFacade(Type): + name = 'HighAvailability' + version = 2 + schema = {'definitions': {'Address': {'additionalProperties': False, + 'properties': {'Scope': {'type': 'string'}, + 'SpaceName': {'type': 'string'}, + 'SpaceProviderId': {'type': 'string'}, + 'Type': {'type': 'string'}, + 'Value': {'type': 'string'}}, + 'required': ['Value', + 'Type', + 'Scope', + 'SpaceName', + 'SpaceProviderId'], + 'type': 'object'}, + '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'}, + 'demoted': {'items': {'type': 'string'}, + 'type': 'array'}, + 'maintained': {'items': {'type': 'string'}, + 'type': 'array'}, + 'promoted': {'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'}, + 'series': {'type': 'string'}}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'HAMember': {'additionalProperties': False, + 'properties': {'public-address': {'$ref': '#/definitions/Address'}, + 'series': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'public-address', 'series'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Member': {'additionalProperties': False, + 'properties': {'Address': {'type': 'string'}, - 'Arbiter': {'type': 'boolean'}, - 'BuildIndexes': {'type': 'boolean'}, - 'Hidden': {'type': 'boolean'}, + 'Id': {'type': 'integer'}, + 'Priority': {'type': 'number'}, - 'SlaveDelay': {'type': 'integer'}, + 'Tags': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'Votes': {'type': 'integer'}}, + 'required': ['Id', + 'Address', - 'Arbiter', - 'BuildIndexes', - 'Hidden', + 'Priority', + 'Tags', - 'SlaveDelay', + 'Votes'], + 'type': 'object'}, + 'MongoUpgradeResults': {'additionalProperties': False, + 'properties': {'ha-members': {'items': {'$ref': '#/definitions/HAMember'}, + 'type': 'array'}, + 'master': {'$ref': '#/definitions/HAMember'}, + 'rs-members': {'items': {'$ref': '#/definitions/Member'}, + 'type': 'array'}}, + 'required': ['rs-members', + 'master', + 'ha-members'], + 'type': 'object'}, + 'MongoVersion': {'additionalProperties': False, + 'properties': {'engine': {'type': 'string'}, + 'major': {'type': 'integer'}, + 'minor': {'type': 'integer'}, + 'patch': {'type': 'string'}}, + 'required': ['major', + 'minor', + 'patch', + 'engine'], + 'type': 'object'}, + 'ResumeReplicationParams': {'additionalProperties': False, + 'properties': {'members': {'items': {'$ref': '#/definitions/Member'}, + 'type': 'array'}}, + 'required': ['members'], + 'type': 'object'}, + 'UpgradeMongoParams': {'additionalProperties': False, + 'properties': {'target': {'$ref': '#/definitions/MongoVersion'}}, + 'required': ['target'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, - 'virt-type': {'type': 'string'}}, ++ 'virt-type': {'type': 'string'}, ++ 'zones': {'items': {'type': 'string'}, ++ 'type': 'array'}}, + 'type': 'object'}}, + 'properties': {'EnableHA': {'properties': {'Params': {'$ref': '#/definitions/ControllersSpecs'}, + 'Result': {'$ref': '#/definitions/ControllersChangeResults'}}, + 'type': 'object'}, + 'ResumeHAReplicationAfterUpgrade': {'properties': {'Params': {'$ref': '#/definitions/ResumeReplicationParams'}}, + 'type': 'object'}, + 'StopHAReplicationForUpgrade': {'properties': {'Params': {'$ref': '#/definitions/UpgradeMongoParams'}, + 'Result': {'$ref': '#/definitions/MongoUpgradeResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ControllersChangeResults) + async def EnableHA(self, specs): + ''' - specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec> - Returns -> typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult> ++ specs : typing.Sequence[~ControllersSpec] ++ Returns -> typing.Sequence[~ControllersChangeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='HighAvailability', request='EnableHA', version=2, params=_params) ++ msg = dict(type='HighAvailability', ++ request='EnableHA', ++ version=2, ++ params=_params) + _params['specs'] = specs + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def ResumeHAReplicationAfterUpgrade(self, members): + ''' - members : typing.Sequence<+T_co>[~Member]<~Member> ++ members : typing.Sequence[~Member] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='HighAvailability', request='ResumeHAReplicationAfterUpgrade', version=2, params=_params) ++ msg = dict(type='HighAvailability', ++ request='ResumeHAReplicationAfterUpgrade', ++ version=2, ++ params=_params) + _params['members'] = members + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MongoUpgradeResults) + async def StopHAReplicationForUpgrade(self, target): + ''' + target : MongoVersion - Returns -> typing.Union[_ForwardRef('HAMember'), typing.Sequence<+T_co>[~Member]<~Member>] ++ Returns -> typing.Union[typing.Sequence[~HAMember], _ForwardRef('HAMember'), typing.Sequence[~Member]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='HighAvailability', request='StopHAReplicationForUpgrade', version=2, params=_params) ++ msg = dict(type='HighAvailability', ++ request='StopHAReplicationForUpgrade', ++ version=2, ++ params=_params) + _params['target'] = target + reply = await self.rpc(msg) + return reply + + + +class ImageManagerFacade(Type): + name = 'ImageManager' + version = 2 + schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ImageFilterParams': {'additionalProperties': False, + 'properties': {'images': {'items': {'$ref': '#/definitions/ImageSpec'}, + 'type': 'array'}}, + 'required': ['images'], + 'type': 'object'}, + 'ImageMetadata': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'created': {'format': 'date-time', + 'type': 'string'}, + 'kind': {'type': 'string'}, + 'series': {'type': 'string'}, + 'url': {'type': 'string'}}, + 'required': ['kind', + 'arch', + 'series', + 'url', + 'created'], + 'type': 'object'}, + 'ImageSpec': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'kind': {'type': 'string'}, + 'series': {'type': 'string'}}, + 'required': ['kind', 'arch', 'series'], + 'type': 'object'}, + 'ListImageResult': {'additionalProperties': False, + 'properties': {'result': {'items': {'$ref': '#/definitions/ImageMetadata'}, + 'type': 'array'}}, + 'required': ['result'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, + 'properties': {'DeleteImages': {'properties': {'Params': {'$ref': '#/definitions/ImageFilterParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ListImages': {'properties': {'Params': {'$ref': '#/definitions/ImageFilterParams'}, + 'Result': {'$ref': '#/definitions/ListImageResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def DeleteImages(self, images): + ''' - images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ images : typing.Sequence[~ImageSpec] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageManager', request='DeleteImages', version=2, params=_params) ++ msg = dict(type='ImageManager', ++ request='DeleteImages', ++ version=2, ++ params=_params) + _params['images'] = images + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListImageResult) + async def ListImages(self, images): + ''' - images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec> - Returns -> typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata> ++ images : typing.Sequence[~ImageSpec] ++ Returns -> typing.Sequence[~ImageMetadata] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageManager', request='ListImages', version=2, params=_params) ++ msg = dict(type='ImageManager', ++ request='ListImages', ++ version=2, ++ params=_params) + _params['images'] = images + reply = await self.rpc(msg) + return reply + + + +class ImageMetadataFacade(Type): + name = 'ImageMetadata' + version = 2 + schema = {'definitions': {'CloudImageMetadata': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'image-id': {'type': 'string'}, + 'priority': {'type': 'integer'}, + 'region': {'type': 'string'}, + 'root-storage-size': {'type': 'integer'}, + 'root-storage-type': {'type': 'string'}, + 'series': {'type': 'string'}, + 'source': {'type': 'string'}, + 'stream': {'type': 'string'}, + 'version': {'type': 'string'}, + 'virt-type': {'type': 'string'}}, + 'required': ['image-id', + 'region', + 'version', + 'series', + 'arch', + 'source', + 'priority'], + 'type': 'object'}, + 'CloudImageMetadataList': {'additionalProperties': False, + 'properties': {'metadata': {'items': {'$ref': '#/definitions/CloudImageMetadata'}, + 'type': 'array'}}, + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ImageMetadataFilter': {'additionalProperties': False, + 'properties': {'arches': {'items': {'type': 'string'}, + 'type': 'array'}, + 'region': {'type': 'string'}, + 'root-storage-type': {'type': 'string'}, + 'series': {'items': {'type': 'string'}, + 'type': 'array'}, + 'stream': {'type': 'string'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}, + 'ListCloudImageMetadataResult': {'additionalProperties': False, + 'properties': {'result': {'items': {'$ref': '#/definitions/CloudImageMetadata'}, + 'type': 'array'}}, + 'required': ['result'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MetadataImageIds': {'additionalProperties': False, + 'properties': {'image-ids': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['image-ids'], + 'type': 'object'}, + 'MetadataSaveParams': {'additionalProperties': False, + 'properties': {'metadata': {'items': {'$ref': '#/definitions/CloudImageMetadataList'}, + 'type': 'array'}}, + 'type': 'object'}}, + 'properties': {'Delete': {'properties': {'Params': {'$ref': '#/definitions/MetadataImageIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'List': {'properties': {'Params': {'$ref': '#/definitions/ImageMetadataFilter'}, + 'Result': {'$ref': '#/definitions/ListCloudImageMetadataResult'}}, + 'type': 'object'}, + 'Save': {'properties': {'Params': {'$ref': '#/definitions/MetadataSaveParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'UpdateFromPublishedImages': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def Delete(self, image_ids): + ''' - image_ids : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ image_ids : typing.Sequence[str] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageMetadata', request='Delete', version=2, params=_params) ++ msg = dict(type='ImageMetadata', ++ request='Delete', ++ version=2, ++ params=_params) + _params['image-ids'] = image_ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListCloudImageMetadataResult) + async def List(self, arches, region, root_storage_type, series, stream, virt_type): + ''' - arches : typing.Sequence<+T_co>[str] ++ arches : typing.Sequence[str] + region : str + root_storage_type : str - series : typing.Sequence<+T_co>[str] ++ series : typing.Sequence[str] + stream : str + virt_type : str - Returns -> typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata> ++ Returns -> typing.Sequence[~CloudImageMetadata] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageMetadata', request='List', version=2, params=_params) ++ msg = dict(type='ImageMetadata', ++ request='List', ++ version=2, ++ params=_params) + _params['arches'] = arches + _params['region'] = region + _params['root-storage-type'] = root_storage_type + _params['series'] = series + _params['stream'] = stream + _params['virt-type'] = virt_type + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Save(self, metadata): + ''' - metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ metadata : typing.Sequence[~CloudImageMetadataList] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageMetadata', request='Save', version=2, params=_params) ++ msg = dict(type='ImageMetadata', ++ request='Save', ++ version=2, ++ params=_params) + _params['metadata'] = metadata + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def UpdateFromPublishedImages(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ImageMetadata', request='UpdateFromPublishedImages', version=2, params=_params) ++ msg = dict(type='ImageMetadata', ++ request='UpdateFromPublishedImages', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'ErrorResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}}, + 'properties': {'BlockUntilLeadershipReleased': {'properties': {'Params': {'$ref': '#/definitions/ApplicationTag'}, + 'Result': {'$ref': '#/definitions/ErrorResult'}}, + 'type': 'object'}, + 'ClaimLeadership': {'properties': {'Params': {'$ref': '#/definitions/ClaimLeadershipBulkParams'}, + 'Result': {'$ref': '#/definitions/ClaimLeadershipBulkResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResult) + async def BlockUntilLeadershipReleased(self, name): + ''' + name : str + Returns -> Error + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LeadershipService', request='BlockUntilLeadershipReleased', version=2, params=_params) ++ msg = dict(type='LeadershipService', ++ request='BlockUntilLeadershipReleased', ++ version=2, ++ params=_params) + _params['Name'] = name + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ClaimLeadershipBulkResults) + async def ClaimLeadership(self, params): + ''' - params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~ClaimLeadershipParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='LeadershipService', request='ClaimLeadership', version=2, params=_params) ++ msg = dict(type='LeadershipService', ++ request='ClaimLeadership', ++ version=2, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + +class MachineManagerFacade(Type): + name = 'MachineManager' + version = 2 + schema = {'definitions': {'AddMachineParams': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, + 'type': 'array'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'container-type': {'type': 'string'}, + 'disks': {'items': {'$ref': '#/definitions/Constraints'}, + 'type': 'array'}, + 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, + 'instance-id': {'type': 'string'}, + 'jobs': {'items': {'type': 'string'}, + 'type': 'array'}, + 'nonce': {'type': 'string'}, + 'parent-id': {'type': 'string'}, + 'placement': {'$ref': '#/definitions/Placement'}, + 'series': {'type': 'string'}}, + 'required': ['series', + 'constraints', + 'jobs', + 'parent-id', + 'container-type', + 'instance-id', + 'nonce', + 'hardware-characteristics', + 'addresses'], + 'type': 'object'}, + 'AddMachines': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'AddMachinesResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'machine': {'type': 'string'}}, + 'required': ['machine'], + 'type': 'object'}, + 'AddMachinesResults': {'additionalProperties': False, + 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, + 'type': 'array'}}, + 'required': ['machines'], + 'type': 'object'}, + 'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + 'type': 'object'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'HardwareCharacteristics': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cpu-cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'InstanceType': {'additionalProperties': False, + 'properties': {'arches': {'items': {'type': 'string'}, + 'type': 'array'}, + 'cost': {'type': 'integer'}, + 'cpu-cores': {'type': 'integer'}, + 'deprecated': {'type': 'boolean'}, + 'memory': {'type': 'integer'}, + 'name': {'type': 'string'}, + 'root-disk': {'type': 'integer'}, + 'virt-type': {'type': 'string'}}, + 'required': ['arches', 'cpu-cores', 'memory'], + 'type': 'object'}, + 'InstanceTypesResult': {'additionalProperties': False, + 'properties': {'cost-currency': {'type': 'string'}, + 'cost-divisor': {'type': 'integer'}, + 'cost-unit': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, + 'type': 'array'}}, + 'type': 'object'}, + 'InstanceTypesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'ModelInstanceTypesConstraint': {'additionalProperties': False, + 'properties': {'value': {'$ref': '#/definitions/Value'}}, + 'type': 'object'}, + 'ModelInstanceTypesConstraints': {'additionalProperties': False, + 'properties': {'constraints': {'items': {'$ref': '#/definitions/ModelInstanceTypesConstraint'}, + 'type': 'array'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, + 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, + 'type': 'object'}, + 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/ModelInstanceTypesConstraints'}, + 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AddMachinesResults) + async def AddMachines(self, params): + ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> - Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='AddMachines', version=2, params=_params) ++ msg = dict(type='MachineManager', ++ request='AddMachines', ++ version=2, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(InstanceTypesResults) + async def InstanceTypes(self, constraints): + ''' - constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint> - Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult> ++ constraints : typing.Sequence[~ModelInstanceTypesConstraint] ++ Returns -> typing.Sequence[~InstanceTypesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='InstanceTypes', version=2, params=_params) ++ msg = dict(type='MachineManager', ++ request='InstanceTypes', ++ version=2, ++ params=_params) + _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + +class MetricsAdderFacade(Type): + name = 'MetricsAdder' + version = 2 + schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def AddMetricBatches(self, batches): + ''' - batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ batches : typing.Sequence[~MetricBatchParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MetricsAdder', request='AddMetricBatches', version=2, params=_params) ++ msg = dict(type='MetricsAdder', ++ request='AddMetricBatches', ++ version=2, ++ params=_params) + _params['batches'] = batches + reply = await self.rpc(msg) + return reply + + + +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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MeterStatusParam': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'type': 'string'}, + 'tag': {'type': 'string'}}, - 'required': ['tag', 'code', 'info'], ++ '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'], ++ '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': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MetricResults'}}, + 'type': 'object'}, + 'SetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/MeterStatusParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(MetricResults) + async def GetMetrics(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~EntityMetrics] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MetricsDebug', request='GetMetrics', version=2, params=_params) ++ msg = dict(type='MetricsDebug', ++ request='GetMetrics', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetMeterStatus(self, statues): + ''' - statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ statues : typing.Sequence[~MeterStatusParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MetricsDebug', request='SetMeterStatus', version=2, params=_params) ++ msg = dict(type='MetricsDebug', ++ request='SetMeterStatus', ++ version=2, ++ params=_params) + _params['statues'] = statues + reply = await self.rpc(msg) + return reply + + + ++class ModelConfigFacade(Type): ++ name = 'ModelConfig' ++ version = 2 ++ schema = {'definitions': {'ConfigValue': {'additionalProperties': False, ++ 'properties': {'source': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['value', 'source'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelConfigResults': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelSLA': {'additionalProperties': False, ++ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'creds': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['ModelSLAInfo', 'creds'], ++ 'type': 'object'}, ++ 'ModelSLAInfo': {'additionalProperties': False, ++ 'properties': {'level': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['level', 'owner'], ++ 'type': 'object'}, ++ 'ModelSequencesResult': {'additionalProperties': False, ++ 'properties': {'sequences': {'patternProperties': {'.*': {'type': 'integer'}}, ++ 'type': 'object'}}, ++ 'required': ['sequences'], ++ 'type': 'object'}, ++ 'ModelSet': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelUnset': {'additionalProperties': False, ++ 'properties': {'keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}}, ++ 'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, ++ 'type': 'object'}, ++ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}}, ++ 'type': 'object'}, ++ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}}, ++ 'type': 'object'}, ++ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'Sequences': {'properties': {'Result': {'$ref': '#/definitions/ModelSequencesResult'}}, ++ 'type': 'object'}, ++ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ModelConfigResults) ++ async def ModelGet(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, ~ConfigValue] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='ModelGet', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelSet(self, config): ++ ''' ++ config : typing.Mapping[str, typing.Any] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='ModelSet', ++ version=2, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ModelUnset(self, keys): ++ ''' ++ keys : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='ModelUnset', ++ version=2, ++ params=_params) ++ _params['keys'] = keys ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def SLALevel(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='SLALevel', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelSequencesResult) ++ async def Sequences(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, int] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='Sequences', ++ version=2, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetSLALevel(self, creds, level): ++ ''' ++ creds : typing.Sequence[int] ++ level : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelConfig', ++ request='SetSLALevel', ++ version=2, ++ params=_params) ++ _params['creds'] = creds ++ _params['level'] = level ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class ModelManagerFacade(Type): + name = 'ModelManager' + 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'}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineHardware': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'MapResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['result'], + 'type': 'object'}, + 'MapResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MapResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Model': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', 'uuid', 'owner-tag'], + 'type': 'object'}, + 'ModelCreateArgs': {'additionalProperties': False, + 'properties': {'cloud-tag': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'credential': {'type': 'string'}, + 'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'region': {'type': 'string'}}, + 'required': ['name', 'owner-tag'], + 'type': 'object'}, + 'ModelDefaultValues': {'additionalProperties': False, + 'properties': {'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelDefaults': {'additionalProperties': False, + 'properties': {'controller': {'additionalProperties': True, + 'type': 'object'}, + 'default': {'additionalProperties': True, + 'type': 'object'}, + 'regions': {'items': {'$ref': '#/definitions/RegionDefaults'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ModelDefaultsResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ModelDefaults'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelInfo': {'additionalProperties': False, + 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, + 'cloud-credential-tag': {'type': 'string'}, + 'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'controller-uuid': {'type': 'string'}, + 'default-series': {'type': 'string'}, + 'life': {'type': 'string'}, + 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, + 'type': 'array'}, + 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, + 'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'provider-type': {'type': 'string'}, + 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, + 'status': {'$ref': '#/definitions/EntityStatus'}, + 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, + 'type': 'array'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', + 'uuid', + 'controller-uuid', + 'cloud-tag', + 'owner-tag', + 'life', + 'users', + 'machines', + 'sla', + 'agent-version'], + 'type': 'object'}, + 'ModelInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/ModelInfo'}}, + 'type': 'object'}, + 'ModelInfoResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ModelInfoResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ModelMachineInfo': {'additionalProperties': False, + 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, + 'has-vote': {'type': 'boolean'}, + 'id': {'type': 'string'}, + 'instance-id': {'type': 'string'}, + 'status': {'type': 'string'}, + 'wants-vote': {'type': 'boolean'}}, + 'required': ['id'], + 'type': 'object'}, + 'ModelMigrationStatus': {'additionalProperties': False, + 'properties': {'end': {'format': 'date-time', + 'type': 'string'}, + 'start': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['status', 'start'], + 'type': 'object'}, + 'ModelSLAInfo': {'additionalProperties': False, + 'properties': {'level': {'type': 'string'}, + 'owner': {'type': 'string'}}, + 'required': ['level', 'owner'], + 'type': 'object'}, + 'ModelStatus': {'additionalProperties': False, + 'properties': {'application-count': {'type': 'integer'}, + 'hosted-machine-count': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, + 'type': 'array'}, + 'model-tag': {'type': 'string'}, + 'owner-tag': {'type': 'string'}}, + 'required': ['model-tag', + 'life', + 'hosted-machine-count', + 'application-count', + 'owner-tag'], + 'type': 'object'}, + 'ModelStatusResults': {'additionalProperties': False, + 'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'}, + 'type': 'array'}}, + 'required': ['models'], + 'type': 'object'}, + 'ModelUnsetKeys': {'additionalProperties': False, + 'properties': {'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'keys': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['keys'], + 'type': 'object'}, + 'ModelUserInfo': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'display-name': {'type': 'string'}, + 'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'user': {'type': 'string'}}, + 'required': ['user', + 'display-name', + 'last-connection', + 'access'], + 'type': 'object'}, + 'ModifyModelAccess': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'action': {'type': 'string'}, + 'model-tag': {'type': 'string'}, + 'user-tag': {'type': 'string'}}, + 'required': ['user-tag', + 'action', + 'access', + 'model-tag'], + 'type': 'object'}, + 'ModifyModelAccessRequest': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyModelAccess'}, + 'type': 'array'}}, + 'required': ['changes'], + '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'}, + 'RegionDefaults': {'additionalProperties': False, + 'properties': {'region-name': {'type': 'string'}, + 'value': {'additionalProperties': True, + 'type': 'object'}}, + 'required': ['region-name', 'value'], + 'type': 'object'}, + 'SetModelDefaults': {'additionalProperties': False, + 'properties': {'config': {'items': {'$ref': '#/definitions/ModelDefaultValues'}, + 'type': 'array'}}, + 'required': ['config'], + 'type': 'object'}, + 'UnsetModelDefaults': {'additionalProperties': False, + 'properties': {'keys': {'items': {'$ref': '#/definitions/ModelUnsetKeys'}, + 'type': 'array'}}, + 'required': ['keys'], + 'type': 'object'}, + 'UserModel': {'additionalProperties': False, + 'properties': {'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'model': {'$ref': '#/definitions/Model'}}, + 'required': ['model', 'last-connection'], + 'type': 'object'}, + 'UserModelList': {'additionalProperties': False, + 'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'}, + 'type': 'array'}}, + 'required': ['user-models'], + 'type': 'object'}}, + 'properties': {'CreateModel': {'properties': {'Params': {'$ref': '#/definitions/ModelCreateArgs'}, + 'Result': {'$ref': '#/definitions/ModelInfo'}}, + 'type': 'object'}, + 'DestroyModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DumpModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MapResults'}}, + 'type': 'object'}, + 'DumpModelsDB': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MapResults'}}, + 'type': 'object'}, + 'ListModels': {'properties': {'Params': {'$ref': '#/definitions/Entity'}, + 'Result': {'$ref': '#/definitions/UserModelList'}}, + 'type': 'object'}, + 'ModelDefaults': {'properties': {'Result': {'$ref': '#/definitions/ModelDefaultsResult'}}, + 'type': 'object'}, + 'ModelInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ModelInfoResults'}}, + 'type': 'object'}, + 'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ModelStatusResults'}}, + 'type': 'object'}, + 'ModifyModelAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyModelAccessRequest'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/SetModelDefaults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'UnsetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/UnsetModelDefaults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ModelInfo) + async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region): + ''' + cloud_tag : str - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + credential : str + name : str + owner_tag : str + region : str - Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>] ++ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='CreateModel', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='CreateModel', ++ version=2, ++ params=_params) + _params['cloud-tag'] = cloud_tag + _params['config'] = config + _params['credential'] = credential + _params['name'] = name + _params['owner-tag'] = owner_tag + _params['region'] = region + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyModels(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DestroyModels', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='DestroyModels', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MapResults) + async def DumpModels(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MapResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DumpModels', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='DumpModels', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MapResults) + async def DumpModelsDB(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MapResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DumpModelsDB', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='DumpModelsDB', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(UserModelList) + async def ListModels(self, tag): + ''' + tag : str - Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel> ++ Returns -> typing.Sequence[~UserModel] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ListModels', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='ListModels', ++ version=2, ++ params=_params) + _params['tag'] = tag + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelDefaultsResult) + async def ModelDefaults(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults> ++ Returns -> typing.Mapping[str, ~ModelDefaults] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelDefaults', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModelDefaults', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelInfoResults) + async def ModelInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelInfo', version=2, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModelInfo', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelStatusResults) + async def ModelStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelStatus] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModelStatus', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ModifyModelAccess(self, changes): ++ ''' ++ changes : typing.Sequence[~ModifyModelAccess] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModifyModelAccess', ++ version=2, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetModelDefaults(self, config): ++ ''' ++ config : typing.Sequence[~ModelDefaultValues] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelStatus', version=2, params=_params) - _params['entities'] = entities ++ msg = dict(type='ModelManager', ++ request='SetModelDefaults', ++ version=2, ++ params=_params) ++ _params['config'] = config + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def ModifyModelAccess(self, changes): ++ async def UnsetModelDefaults(self, keys): + ''' - changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ keys : typing.Sequence[~ModelUnsetKeys] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModifyModelAccess', version=2, params=_params) - _params['changes'] = changes ++ msg = dict(type='ModelManager', ++ request='UnsetModelDefaults', ++ version=2, ++ params=_params) ++ _params['keys'] = keys + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def SetModelDefaults(self, config): ++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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'Macaroon': {'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'}, ++ '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-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'}}, ++ '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': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ProxyConfigResults'}}, ++ 'type': 'object'}, ++ 'WatchForProxyConfigAndAPIHostPortChanges': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ProxyConfigResults) ++ async def ProxyConfig(self, entities): + ''' - config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProxyConfigResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='SetModelDefaults', version=2, params=_params) - _params['config'] = config ++ msg = dict(type='ProxyUpdater', ++ request='ProxyConfig', ++ version=2, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def UnsetModelDefaults(self, keys): ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities): + ''' - keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='UnsetModelDefaults', version=2, params=_params) - _params['keys'] = keys ++ msg = dict(type='ProxyUpdater', ++ request='WatchForProxyConfigAndAPIHostPortChanges', ++ version=2, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + +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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'GetRebootAction': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/RebootActionResults'}}, + 'type': 'object'}, + 'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'WatchForRebootEvent': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def ClearReboot(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Reboot', request='ClearReboot', version=2, params=_params) ++ msg = dict(type='Reboot', ++ request='ClearReboot', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RebootActionResults) + async def GetRebootAction(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RebootActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Reboot', request='GetRebootAction', version=2, params=_params) ++ msg = dict(type='Reboot', ++ request='GetRebootAction', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RequestReboot(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Reboot', request='RequestReboot', version=2, params=_params) ++ msg = dict(type='Reboot', ++ request='RequestReboot', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForRebootEvent(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Reboot', request='WatchForRebootEvent', version=2, params=_params) ++ msg = dict(type='Reboot', ++ request='WatchForRebootEvent', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class ResumerFacade(Type): + name = 'Resumer' + version = 2 + schema = {'properties': {'ResumeTransactions': {'type': 'object'}}, 'type': 'object'} + + + @ReturnMapping(None) + async def ResumeTransactions(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Resumer', request='ResumeTransactions', version=2, params=_params) ++ msg = dict(type='Resumer', ++ request='ResumeTransactions', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class SSHClientFacade(Type): + name = 'SSHClient' + 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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'SSHAddressResult': {'additionalProperties': False, + 'properties': {'address': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'type': 'object'}, + 'SSHAddressResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'SSHAddressesResult': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'type': 'string'}, + 'type': 'array'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['addresses'], + 'type': 'object'}, + 'SSHAddressesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressesResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'SSHProxyResult': {'additionalProperties': False, + 'properties': {'use-proxy': {'type': 'boolean'}}, + 'required': ['use-proxy'], + 'type': 'object'}, + 'SSHPublicKeysResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'public-keys': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'SSHPublicKeysResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}}, + 'properties': {'AllAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/SSHAddressesResults'}}, + 'type': 'object'}, + 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, + 'type': 'object'}, + 'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}}, + 'type': 'object'}, + 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/SSHAddressResults'}}, + 'type': 'object'}, + 'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(SSHAddressesResults) + async def AllAddresses(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHAddressesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='AllAddresses', version=2, params=_params) ++ msg = dict(type='SSHClient', ++ request='AllAddresses', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SSHAddressResults) + async def PrivateAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHAddressResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PrivateAddress', version=2, params=_params) ++ msg = dict(type='SSHClient', ++ request='PrivateAddress', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SSHProxyResult) + async def Proxy(self): + ''' + + Returns -> bool + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='Proxy', version=2, params=_params) ++ msg = dict(type='SSHClient', ++ request='Proxy', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SSHAddressResults) + async def PublicAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHAddressResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PublicAddress', version=2, params=_params) ++ msg = dict(type='SSHClient', ++ request='PublicAddress', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SSHPublicKeysResults) + async def PublicKeys(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~SSHPublicKeysResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='SSHClient', ++ request='PublicKeys', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Claim(self, claims): ++ ''' ++ claims : typing.Sequence[~SingularClaim] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # 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 ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Wait(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='SSHClient', request='PublicKeys', version=2, params=_params) ++ msg = dict(type='Singular', ++ request='Wait', ++ version=2, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + +class SpacesFacade(Type): + name = 'Spaces' + version = 2 + schema = {'definitions': {'CreateSpaceParams': {'additionalProperties': False, + 'properties': {'provider-id': {'type': 'string'}, + 'public': {'type': 'boolean'}, + 'space-tag': {'type': 'string'}, + 'subnet-tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['subnet-tags', + 'space-tag', + 'public'], + 'type': 'object'}, + 'CreateSpacesParams': {'additionalProperties': False, + 'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'}, + 'type': 'array'}}, + 'required': ['spaces'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ListSpacesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/Space'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Space': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'subnets': {'items': {'$ref': '#/definitions/Subnet'}, + 'type': 'array'}}, + 'required': ['name', 'subnets'], + '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'}}, + 'properties': {'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/ListSpacesResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def CreateSpaces(self, spaces): + ''' - spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ spaces : typing.Sequence[~CreateSpaceParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Spaces', request='CreateSpaces', version=2, params=_params) ++ msg = dict(type='Spaces', ++ request='CreateSpaces', ++ version=2, ++ params=_params) + _params['spaces'] = spaces + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListSpacesResults) + async def ListSpaces(self): + ''' + - Returns -> typing.Sequence<+T_co>[~Space]<~Space> ++ Returns -> typing.Sequence[~Space] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Spaces', request='ListSpaces', version=2, params=_params) ++ msg = dict(type='Spaces', ++ request='ListSpaces', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class StatusHistoryFacade(Type): + name = 'StatusHistory' + version = 2 + schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'Prune': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryPruneArgs'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StatusHistory', request='ModelConfig', version=2, params=_params) ++ msg = dict(type='StatusHistory', ++ request='ModelConfig', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Prune(self, max_history_mb, max_history_time): + ''' + max_history_mb : int + max_history_time : int + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StatusHistory', request='Prune', version=2, params=_params) ++ 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 + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StatusHistory', request='WatchForModelConfigChanges', version=2, params=_params) ++ msg = dict(type='StatusHistory', ++ request='WatchForModelConfigChanges', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class SubnetsFacade(Type): + name = 'Subnets' + version = 2 + schema = {'definitions': {'AddSubnetParams': {'additionalProperties': False, + 'properties': {'provider-network-id': {'type': 'string'}, + 'space-tag': {'type': 'string'}, + 'subnet-provider-id': {'type': 'string'}, + 'subnet-tag': {'type': 'string'}, + 'vlan-tag': {'type': 'integer'}, + 'zones': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['space-tag'], + 'type': 'object'}, + 'AddSubnetsParams': {'additionalProperties': False, + 'properties': {'subnets': {'items': {'$ref': '#/definitions/AddSubnetParams'}, + 'type': 'array'}}, + 'required': ['subnets'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ListSubnetsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/Subnet'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'SpaceResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'SpaceResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SpaceResult'}, + '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'}, + 'SubnetsFilters': {'additionalProperties': False, + 'properties': {'space-tag': {'type': 'string'}, + 'zone': {'type': 'string'}}, + 'type': 'object'}, + 'ZoneResult': {'additionalProperties': False, + 'properties': {'available': {'type': 'boolean'}, + 'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}}, + 'required': ['name', 'available'], + 'type': 'object'}, + 'ZoneResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ZoneResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}}, + 'properties': {'AddSubnets': {'properties': {'Params': {'$ref': '#/definitions/AddSubnetsParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'AllSpaces': {'properties': {'Result': {'$ref': '#/definitions/SpaceResults'}}, + 'type': 'object'}, + 'AllZones': {'properties': {'Result': {'$ref': '#/definitions/ZoneResults'}}, + 'type': 'object'}, + 'ListSubnets': {'properties': {'Params': {'$ref': '#/definitions/SubnetsFilters'}, + 'Result': {'$ref': '#/definitions/ListSubnetsResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def AddSubnets(self, subnets): + ''' - subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ subnets : typing.Sequence[~AddSubnetParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Subnets', request='AddSubnets', version=2, params=_params) ++ msg = dict(type='Subnets', ++ request='AddSubnets', ++ version=2, ++ params=_params) + _params['subnets'] = subnets + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SpaceResults) + async def AllSpaces(self): + ''' + - Returns -> typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult> ++ Returns -> typing.Sequence[~SpaceResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Subnets', request='AllSpaces', version=2, params=_params) ++ msg = dict(type='Subnets', ++ request='AllSpaces', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ZoneResults) + async def AllZones(self): + ''' + - Returns -> typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult> ++ Returns -> typing.Sequence[~ZoneResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Subnets', request='AllZones', version=2, params=_params) ++ msg = dict(type='Subnets', ++ request='AllZones', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListSubnetsResults) + async def ListSubnets(self, space_tag, zone): + ''' + space_tag : str + zone : str - Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ Returns -> typing.Sequence[~Subnet] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Subnets', request='ListSubnets', version=2, params=_params) ++ msg = dict(type='Subnets', ++ request='ListSubnets', ++ version=2, ++ params=_params) + _params['space-tag'] = space_tag + _params['zone'] = zone + reply = await self.rpc(msg) + return reply + + + ++class UserManagerFacade(Type): ++ name = 'UserManager' ++ version = 2 ++ schema = {'definitions': {'AddUser': {'additionalProperties': False, ++ 'properties': {'display-name': {'type': 'string'}, ++ 'password': {'type': 'string'}, ++ 'username': {'type': 'string'}}, ++ 'required': ['username', 'display-name'], ++ 'type': 'object'}, ++ 'AddUserResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'secret-key': {'items': {'type': 'integer'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'AddUserResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/AddUserResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'AddUsers': {'additionalProperties': False, ++ 'properties': {'users': {'items': {'$ref': '#/definitions/AddUser'}, ++ 'type': 'array'}}, ++ 'required': ['users'], ++ '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'}, ++ 'EntityPassword': {'additionalProperties': False, ++ 'properties': {'password': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'password'], ++ 'type': 'object'}, ++ 'EntityPasswords': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'UserInfo': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'created-by': {'type': 'string'}, ++ 'date-created': {'format': 'date-time', ++ 'type': 'string'}, ++ 'disabled': {'type': 'boolean'}, ++ 'display-name': {'type': 'string'}, ++ 'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'username': {'type': 'string'}}, ++ 'required': ['username', ++ 'display-name', ++ 'access', ++ 'created-by', ++ 'date-created', ++ 'disabled'], ++ 'type': 'object'}, ++ 'UserInfoRequest': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'include-disabled': {'type': 'boolean'}}, ++ 'required': ['entities', ++ 'include-disabled'], ++ 'type': 'object'}, ++ 'UserInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/UserInfo'}}, ++ 'type': 'object'}, ++ 'UserInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/UserInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}}, ++ 'properties': {'AddUser': {'properties': {'Params': {'$ref': '#/definitions/AddUsers'}, ++ 'Result': {'$ref': '#/definitions/AddUserResults'}}, ++ 'type': 'object'}, ++ 'DisableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'EnableUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveUser': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ResetPassword': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/AddUserResults'}}, ++ 'type': 'object'}, ++ 'SetPassword': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UserInfo': {'properties': {'Params': {'$ref': '#/definitions/UserInfoRequest'}, ++ 'Result': {'$ref': '#/definitions/UserInfoResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(AddUserResults) ++ async def AddUser(self, users): ++ ''' ++ users : typing.Sequence[~AddUser] ++ Returns -> typing.Sequence[~AddUserResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='AddUser', ++ version=2, ++ params=_params) ++ _params['users'] = users ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def DisableUser(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='DisableUser', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnableUser(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='EnableUser', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RemoveUser(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='RemoveUser', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddUserResults) ++ async def ResetPassword(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~AddUserResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='ResetPassword', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetPassword(self, changes): ++ ''' ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='SetPassword', ++ version=2, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UserInfoResults) ++ async def UserInfo(self, entities, include_disabled): ++ ''' ++ entities : typing.Sequence[~Entity] ++ include_disabled : bool ++ Returns -> typing.Sequence[~UserInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='UserManager', ++ request='UserInfo', ++ version=2, ++ params=_params) ++ _params['entities'] = entities ++ _params['include-disabled'] = include_disabled ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class VolumeAttachmentsWatcherFacade(Type): + name = 'VolumeAttachmentsWatcher' + version = 2 + schema = {'definitions': {'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, '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': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}}, + 'type': 'object'}, + 'Stop': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(MachineStorageIdsWatchResult) + async def Next(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='VolumeAttachmentsWatcher', request='Next', version=2, params=_params) ++ msg = dict(type='VolumeAttachmentsWatcher', ++ request='Next', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Stop(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='VolumeAttachmentsWatcher', request='Stop', version=2, params=_params) ++ msg = dict(type='VolumeAttachmentsWatcher', ++ request='Stop', ++ version=2, ++ params=_params) + + reply = await self.rpc(msg) + return reply diff --cc modules/libjuju/juju/client/_client3.py index b5f4b9d,0000000..67840db mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client3.py +++ b/modules/libjuju/juju/client/_client3.py @@@ -1,5218 -1,0 +1,6749 @@@ +# 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._definitions import * +from juju.client.facade import ReturnMapping, Type + + ++class ActionFacade(Type): ++ name = 'Action' ++ version = 3 ++ schema = {'definitions': {'Action': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'receiver': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'receiver', 'name'], ++ 'type': 'object'}, ++ 'ActionResult': {'additionalProperties': False, ++ 'properties': {'action': {'$ref': '#/definitions/Action'}, ++ 'completed': {'format': 'date-time', ++ 'type': 'string'}, ++ 'enqueued': {'format': 'date-time', ++ 'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'message': {'type': 'string'}, ++ 'output': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'started': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ActionResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ActionSpec': {'additionalProperties': False, ++ 'properties': {'description': {'type': 'string'}, ++ 'params': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['description', 'params'], ++ 'type': 'object'}, ++ 'Actions': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/Action'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ActionsByName': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'name': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ActionsByNames': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByName'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ActionsByReceiver': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'receiver': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ActionsByReceivers': {'additionalProperties': False, ++ 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ApplicationCharmActionsResult': {'additionalProperties': False, ++ 'properties': {'actions': {'patternProperties': {'.*': {'$ref': '#/definitions/ActionSpec'}}, ++ 'type': 'object'}, ++ 'application-tag': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'ApplicationsCharmActionsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationCharmActionsResult'}, ++ 'type': 'array'}}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'FindActionsByNames': {'additionalProperties': False, ++ 'properties': {'names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FindTags': {'additionalProperties': False, ++ 'properties': {'prefixes': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['prefixes'], ++ 'type': 'object'}, ++ 'FindTagsResults': {'additionalProperties': False, ++ 'properties': {'matches': {'patternProperties': {'.*': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'type': 'object'}}, ++ 'required': ['matches'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'RunParams': {'additionalProperties': False, ++ 'properties': {'applications': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'commands': {'type': 'string'}, ++ 'machines': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'timeout': {'type': 'integer'}, ++ 'units': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['commands', 'timeout'], ++ 'type': 'object'}}, ++ 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}, ++ 'ApplicationsCharmsActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationsCharmActionsResults'}}, ++ 'type': 'object'}, ++ 'Cancel': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}, ++ 'Enqueue': {'properties': {'Params': {'$ref': '#/definitions/Actions'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}, ++ 'FindActionTagsByPrefix': {'properties': {'Params': {'$ref': '#/definitions/FindTags'}, ++ 'Result': {'$ref': '#/definitions/FindTagsResults'}}, ++ 'type': 'object'}, ++ 'FindActionsByNames': {'properties': {'Params': {'$ref': '#/definitions/FindActionsByNames'}, ++ 'Result': {'$ref': '#/definitions/ActionsByNames'}}, ++ 'type': 'object'}, ++ 'ListAll': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, ++ 'type': 'object'}, ++ 'ListCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, ++ 'type': 'object'}, ++ 'ListPending': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, ++ 'type': 'object'}, ++ 'ListRunning': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}}, ++ 'type': 'object'}, ++ 'Run': {'properties': {'Params': {'$ref': '#/definitions/RunParams'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}, ++ 'RunOnAllMachines': {'properties': {'Params': {'$ref': '#/definitions/RunParams'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ActionResults) ++ async def Actions(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='Actions', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationsCharmActionsResults) ++ async def ApplicationsCharmsActions(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationCharmActionsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='ApplicationsCharmsActions', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionResults) ++ async def Cancel(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='Cancel', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionResults) ++ async def Enqueue(self, actions): ++ ''' ++ actions : typing.Sequence[~Action] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='Enqueue', ++ version=3, ++ params=_params) ++ _params['actions'] = actions ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FindTagsResults) ++ async def FindActionTagsByPrefix(self, prefixes): ++ ''' ++ prefixes : typing.Sequence[str] ++ Returns -> typing.Sequence[~Entity] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='FindActionTagsByPrefix', ++ version=3, ++ params=_params) ++ _params['prefixes'] = prefixes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionsByNames) ++ async def FindActionsByNames(self, names): ++ ''' ++ names : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionsByName] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='FindActionsByNames', ++ version=3, ++ params=_params) ++ _params['names'] = names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionsByReceivers) ++ async def ListAll(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='ListAll', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionsByReceivers) ++ async def ListCompleted(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='ListCompleted', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionsByReceivers) ++ async def ListPending(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='ListPending', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionsByReceivers) ++ async def ListRunning(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionsByReceiver] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='ListRunning', ++ version=3, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionResults) ++ async def Run(self, applications, commands, machines, timeout, units): ++ ''' ++ applications : typing.Sequence[str] ++ commands : str ++ machines : typing.Sequence[str] ++ timeout : int ++ units : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='Run', ++ version=3, ++ params=_params) ++ _params['applications'] = applications ++ _params['commands'] = commands ++ _params['machines'] = machines ++ _params['timeout'] = timeout ++ _params['units'] = units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionResults) ++ async def RunOnAllMachines(self, applications, commands, machines, timeout, units): ++ ''' ++ applications : typing.Sequence[str] ++ commands : str ++ machines : typing.Sequence[str] ++ timeout : int ++ units : typing.Sequence[str] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Action', ++ request='RunOnAllMachines', ++ version=3, ++ params=_params) ++ _params['applications'] = applications ++ _params['commands'] = commands ++ _params['machines'] = machines ++ _params['timeout'] = timeout ++ _params['units'] = units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class ApplicationFacade(Type): + name = 'Application' + version = 3 + schema = {'definitions': {'AddApplicationUnits': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}}, + 'required': ['application', + 'num-units', + 'placement'], + 'type': 'object'}, + 'AddApplicationUnitsResults': {'additionalProperties': False, + 'properties': {'units': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['units'], + 'type': 'object'}, + 'AddRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'AddRelationResults': {'additionalProperties': False, + 'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}}, + 'type': 'object'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'ApplicationCharmRelations': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationCharmRelationsResults': {'additionalProperties': False, + 'properties': {'charm-relations': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['charm-relations'], + 'type': 'object'}, + 'ApplicationDeploy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-yaml': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}, + 'resources': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'series': {'type': 'string'}, + 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'series', + 'charm-url', + 'channel', + 'num-units', + 'config-yaml', + 'constraints'], + 'type': 'object'}, + 'ApplicationDestroy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationExpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGetResults': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'series': {'type': 'string'}}, + 'required': ['application', + 'charm', + 'config', + 'constraints', + 'series'], + 'type': 'object'}, + 'ApplicationMetricCredential': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'metrics-credentials': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['application', + 'metrics-credentials'], + 'type': 'object'}, + 'ApplicationMetricCredentials': {'additionalProperties': False, + 'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'}, + 'type': 'array'}}, + 'required': ['creds'], + 'type': 'object'}, + 'ApplicationSet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationSetCharm': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config-settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-settings-yaml': {'type': 'string'}, + 'force-series': {'type': 'boolean'}, + 'force-units': {'type': 'boolean'}, + 'resource-ids': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'charm-url', + 'channel', + 'force-units', + 'force-series'], + 'type': 'object'}, + 'ApplicationUnexpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationUnset': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationUpdate': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'force-charm-url': {'type': 'boolean'}, + 'force-series': {'type': 'boolean'}, + 'min-units': {'type': 'integer'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'settings-yaml': {'type': 'string'}}, + 'required': ['application', + 'charm-url', + 'force-charm-url', + 'force-series', + 'settings-yaml'], + 'type': 'object'}, + 'ApplicationsDeploy': {'additionalProperties': False, + 'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'}, + 'type': 'array'}}, + 'required': ['applications'], + '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'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'DestroyApplicationUnits': {'additionalProperties': False, + 'properties': {'unit-names': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['unit-names'], + 'type': 'object'}, + 'DestroyRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetApplicationConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'GetConstraintsResults': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'SetConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['application', 'constraints'], + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StringResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'type': 'string'}}, + 'required': ['result'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, - 'virt-type': {'type': 'string'}}, ++ 'virt-type': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, ++ 'Result': {'$ref': '#/definitions/AddRelationResults'}}, ++ 'type': 'object'}, ++ 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, ++ 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, ++ 'type': 'object'}, ++ 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, ++ 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, ++ 'type': 'object'}, ++ 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, ++ 'type': 'object'}, ++ 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, ++ 'type': 'object'}, ++ 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, ++ 'type': 'object'}, ++ 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, ++ 'type': 'object'}, ++ 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, ++ 'type': 'object'}, ++ 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, ++ 'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'}, ++ 'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, ++ 'type': 'object'}, ++ 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, ++ 'type': 'object'}, ++ 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, ++ 'type': 'object'}, ++ 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, ++ 'type': 'object'}, ++ 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, ++ 'type': 'object'}, ++ 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, ++ 'type': 'object'}, ++ 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(AddRelationResults) ++ async def AddRelation(self, endpoints): ++ ''' ++ endpoints : typing.Sequence[str] ++ Returns -> typing.Mapping[str, ~CharmRelation] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='AddRelation', ++ version=3, ++ params=_params) ++ _params['endpoints'] = endpoints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddApplicationUnitsResults) ++ async def AddUnits(self, application, num_units, placement): ++ ''' ++ application : str ++ num_units : int ++ placement : typing.Sequence[~Placement] ++ Returns -> typing.Sequence[str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='AddUnits', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['num-units'] = num_units ++ _params['placement'] = placement ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationCharmRelationsResults) ++ async def CharmRelations(self, application): ++ ''' ++ application : str ++ Returns -> typing.Sequence[str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='CharmRelations', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Deploy(self, applications): ++ ''' ++ applications : typing.Sequence[~ApplicationDeploy] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Deploy', ++ version=3, ++ params=_params) ++ _params['applications'] = applications ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Destroy(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Destroy', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyRelation(self, endpoints): ++ ''' ++ endpoints : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyRelation', ++ version=3, ++ params=_params) ++ _params['endpoints'] = endpoints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyUnits(self, unit_names): ++ ''' ++ unit_names : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyUnits', ++ version=3, ++ params=_params) ++ _params['unit-names'] = unit_names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Expose(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Expose', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationGetResults) ++ async def Get(self, application): ++ ''' ++ application : str ++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Get', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def GetCharmURL(self, application): ++ ''' ++ application : str ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetCharmURL', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(GetConstraintsResults) ++ async def GetConstraints(self, application): ++ ''' ++ application : str ++ Returns -> Value ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetConstraints', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Set(self, application, options): ++ ''' ++ application : str ++ options : typing.Mapping[str, str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Set', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['options'] = options ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): ++ ''' ++ application : str ++ channel : str ++ charm_url : str ++ config_settings : typing.Mapping[str, str] ++ config_settings_yaml : str ++ force_series : bool ++ force_units : bool ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetCharm', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['channel'] = channel ++ _params['charm-url'] = charm_url ++ _params['config-settings'] = config_settings ++ _params['config-settings-yaml'] = config_settings_yaml ++ _params['force-series'] = force_series ++ _params['force-units'] = force_units ++ _params['resource-ids'] = resource_ids ++ _params['storage-constraints'] = storage_constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetConstraints(self, application, constraints): ++ ''' ++ application : str ++ constraints : Value ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetConstraints', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['constraints'] = constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetMetricCredentials(self, creds): ++ ''' ++ creds : typing.Sequence[~ApplicationMetricCredential] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetMetricCredentials', ++ version=3, ++ params=_params) ++ _params['creds'] = creds ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Unexpose(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Unexpose', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Unset(self, application, options): ++ ''' ++ application : str ++ options : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Unset', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['options'] = options ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): ++ ''' ++ application : str ++ charm_url : str ++ constraints : Value ++ force_charm_url : bool ++ force_series : bool ++ min_units : int ++ settings : typing.Mapping[str, str] ++ settings_yaml : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Update', ++ version=3, ++ params=_params) ++ _params['application'] = application ++ _params['charm-url'] = charm_url ++ _params['constraints'] = constraints ++ _params['force-charm-url'] = force_charm_url ++ _params['force-series'] = force_series ++ _params['min-units'] = min_units ++ _params['settings'] = settings ++ _params['settings-yaml'] = settings_yaml ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class CloudFacade(Type): ++ name = 'Cloud' ++ version = 3 ++ schema = {'definitions': {'AddCloudArgs': {'additionalProperties': False, ++ 'properties': {'cloud': {'$ref': '#/definitions/Cloud'}, ++ 'name': {'type': 'string'}}, ++ 'required': ['cloud', 'name'], ++ 'type': 'object'}, ++ 'Cloud': {'additionalProperties': False, ++ 'properties': {'auth-types': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'ca-certificates': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'endpoint': {'type': 'string'}, ++ 'identity-endpoint': {'type': 'string'}, ++ 'regions': {'items': {'$ref': '#/definitions/CloudRegion'}, ++ 'type': 'array'}, ++ 'storage-endpoint': {'type': 'string'}, ++ 'type': {'type': 'string'}}, ++ 'required': ['type'], ++ 'type': 'object'}, ++ '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'}, ++ 'CloudCredentialArg': {'additionalProperties': False, ++ 'properties': {'cloud-name': {'type': 'string'}, ++ 'credential-name': {'type': 'string'}}, ++ 'required': ['cloud-name', ++ 'credential-name'], ++ 'type': 'object'}, ++ 'CloudCredentialArgs': {'additionalProperties': False, ++ 'properties': {'credentials': {'items': {'$ref': '#/definitions/CloudCredentialArg'}, ++ 'type': 'array'}, ++ 'include-secrets': {'type': 'boolean'}}, ++ 'required': ['include-secrets'], ++ 'type': 'object'}, ++ 'CloudCredentialResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/CloudCredential'}}, ++ 'type': 'object'}, ++ 'CloudCredentialResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudCredentialResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'CloudDetails': {'additionalProperties': False, ++ 'properties': {'auth-types': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'endpoint': {'type': 'string'}, ++ 'identity-endpoint': {'type': 'string'}, ++ 'regions': {'items': {'$ref': '#/definitions/CloudRegion'}, ++ 'type': 'array'}, ++ 'storage-endpoint': {'type': 'string'}, ++ 'type': {'type': 'string'}}, ++ 'required': ['type'], ++ 'type': 'object'}, ++ 'CloudInfo': {'additionalProperties': False, ++ 'properties': {'CloudDetails': {'$ref': '#/definitions/CloudDetails'}, ++ 'users': {'items': {'$ref': '#/definitions/CloudUserInfo'}, ++ 'type': 'array'}}, ++ 'required': ['CloudDetails', 'users'], ++ 'type': 'object'}, ++ 'CloudInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/CloudInfo'}}, ++ 'type': 'object'}, ++ 'CloudInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'CloudInstanceTypesConstraint': {'additionalProperties': False, ++ 'properties': {'cloud-tag': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'region': {'type': 'string'}}, ++ 'required': ['cloud-tag', ++ 'region'], ++ 'type': 'object'}, ++ 'CloudInstanceTypesConstraints': {'additionalProperties': False, ++ 'properties': {'constraints': {'items': {'$ref': '#/definitions/CloudInstanceTypesConstraint'}, ++ 'type': 'array'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'CloudRegion': {'additionalProperties': False, ++ 'properties': {'endpoint': {'type': 'string'}, ++ 'identity-endpoint': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'storage-endpoint': {'type': 'string'}}, ++ 'required': ['name'], ++ 'type': 'object'}, ++ 'CloudResult': {'additionalProperties': False, ++ 'properties': {'cloud': {'$ref': '#/definitions/Cloud'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'CloudResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'CloudUserInfo': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'access'], ++ 'type': 'object'}, ++ 'CloudsResult': {'additionalProperties': False, ++ 'properties': {'clouds': {'patternProperties': {'.*': {'$ref': '#/definitions/Cloud'}}, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'ControllerCredentialInfo': {'additionalProperties': False, ++ 'properties': {'content': {'$ref': '#/definitions/CredentialContent'}, ++ 'models': {'items': {'$ref': '#/definitions/ModelAccess'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'CredentialContent': {'additionalProperties': False, ++ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'auth-type': {'type': 'string'}, ++ 'cloud': {'type': 'string'}, ++ 'name': {'type': 'string'}}, ++ 'required': ['name', ++ 'cloud', ++ 'auth-type'], ++ 'type': 'object'}, ++ 'CredentialContentResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ControllerCredentialInfo'}}, ++ 'type': 'object'}, ++ 'CredentialContentResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/CredentialContentResult'}, ++ 'type': 'array'}}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'InstanceType': {'additionalProperties': False, ++ 'properties': {'arches': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'cost': {'type': 'integer'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'deprecated': {'type': 'boolean'}, ++ 'memory': {'type': 'integer'}, ++ 'name': {'type': 'string'}, ++ 'root-disk': {'type': 'integer'}, ++ 'virt-type': {'type': 'string'}}, ++ 'required': ['arches', 'cpu-cores', 'memory'], ++ 'type': 'object'}, ++ 'InstanceTypesResult': {'additionalProperties': False, ++ 'properties': {'cost-currency': {'type': 'string'}, ++ 'cost-divisor': {'type': 'integer'}, ++ 'cost-unit': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'InstanceTypesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ListCloudInfo': {'additionalProperties': False, ++ 'properties': {'CloudDetails': {'$ref': '#/definitions/CloudDetails'}, ++ 'user-access': {'type': 'string'}}, ++ 'required': ['CloudDetails', 'user-access'], ++ 'type': 'object'}, ++ 'ListCloudInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ListCloudInfo'}}, ++ 'type': 'object'}, ++ 'ListCloudInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ListCloudInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ListCloudsRequest': {'additionalProperties': False, ++ 'properties': {'all': {'type': 'boolean'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'model': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ModifyCloudAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'action': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', ++ 'cloud-tag', ++ 'action', ++ 'access'], ++ 'type': 'object'}, ++ 'ModifyCloudAccessRequest': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyCloudAccess'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ 'type': 'object'}, ++ 'RevokeCredentialArg': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'force'], ++ 'type': 'object'}, ++ 'RevokeCredentialArgs': {'additionalProperties': False, ++ 'properties': {'credentials': {'items': {'$ref': '#/definitions/RevokeCredentialArg'}, ++ 'type': 'array'}}, ++ 'required': ['credentials'], ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'TaggedCredential': {'additionalProperties': False, ++ 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'credential'], ++ 'type': 'object'}, ++ 'TaggedCredentials': {'additionalProperties': False, ++ 'properties': {'credentials': {'items': {'$ref': '#/definitions/TaggedCredential'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'UpdateCredentialArgs': {'additionalProperties': False, ++ 'properties': {'credentials': {'items': {'$ref': '#/definitions/TaggedCredential'}, ++ 'type': 'array'}, ++ 'force': {'type': 'boolean'}}, ++ 'required': ['credentials', 'force'], ++ 'type': 'object'}, ++ 'UpdateCredentialModelResult': {'additionalProperties': False, ++ 'properties': {'errors': {'items': {'$ref': '#/definitions/ErrorResult'}, ++ 'type': 'array'}, ++ 'name': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['uuid', 'name'], ++ 'type': 'object'}, ++ 'UpdateCredentialResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'models': {'items': {'$ref': '#/definitions/UpdateCredentialModelResult'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ 'type': 'object'}, ++ 'UpdateCredentialResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/UpdateCredentialResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'UserCloud': {'additionalProperties': False, ++ 'properties': {'cloud-tag': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', 'cloud-tag'], ++ 'type': 'object'}, ++ 'UserClouds': {'additionalProperties': False, ++ 'properties': {'user-clouds': {'items': {'$ref': '#/definitions/UserCloud'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ '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': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, - 'Result': {'$ref': '#/definitions/AddRelationResults'}}, - 'type': 'object'}, - 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, - 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, ++ 'properties': {'AddCloud': {'properties': {'Params': {'$ref': '#/definitions/AddCloudArgs'}}, + 'type': 'object'}, - 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, - 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, ++ 'AddCredentials': {'properties': {'Params': {'$ref': '#/definitions/TaggedCredentials'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, - 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'CheckCredentialsModels': {'properties': {'Params': {'$ref': '#/definitions/TaggedCredentials'}, ++ 'Result': {'$ref': '#/definitions/UpdateCredentialResults'}}, ++ 'type': 'object'}, ++ 'Cloud': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudResults'}}, ++ 'type': 'object'}, ++ 'CloudInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudInfoResults'}}, ++ 'type': 'object'}, ++ 'Clouds': {'properties': {'Result': {'$ref': '#/definitions/CloudsResult'}}, + 'type': 'object'}, - 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, - 'type': 'object'}, - 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, - 'type': 'object'}, - 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, ++ 'Credential': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudCredentialResults'}}, ++ 'type': 'object'}, ++ 'CredentialContents': {'properties': {'Params': {'$ref': '#/definitions/CloudCredentialArgs'}, ++ 'Result': {'$ref': '#/definitions/CredentialContentResults'}}, ++ 'type': 'object'}, ++ 'DefaultCloud': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, - 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, - 'type': 'object'}, - 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, - 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, - 'type': 'object'}, - 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, - 'Result': {'$ref': '#/definitions/StringResult'}}, - 'type': 'object'}, - 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'}, - 'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, - 'type': 'object'}, - 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, - 'type': 'object'}, - 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, - 'type': 'object'}, - 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, - 'type': 'object'}, - 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, - 'Result': {'$ref': '#/definitions/ErrorResults'}}, - 'type': 'object'}, - 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, - 'type': 'object'}, - 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, - 'type': 'object'}, - 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, - 'type': 'object'}}, ++ 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/CloudInstanceTypesConstraints'}, ++ 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, ++ 'type': 'object'}, ++ 'ListCloudInfo': {'properties': {'Params': {'$ref': '#/definitions/ListCloudsRequest'}, ++ 'Result': {'$ref': '#/definitions/ListCloudInfoResults'}}, ++ 'type': 'object'}, ++ 'ModifyCloudAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyCloudAccessRequest'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveClouds': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RevokeCredentialsCheckModels': {'properties': {'Params': {'$ref': '#/definitions/RevokeCredentialArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateCredentialsCheckModels': {'properties': {'Params': {'$ref': '#/definitions/UpdateCredentialArgs'}, ++ 'Result': {'$ref': '#/definitions/UpdateCredentialResults'}}, ++ 'type': 'object'}, ++ 'UserCredentials': {'properties': {'Params': {'$ref': '#/definitions/UserClouds'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}}, + 'type': 'object'} + + - @ReturnMapping(AddRelationResults) - async def AddRelation(self, endpoints): ++ @ReturnMapping(None) ++ async def AddCloud(self, cloud, name): + ''' - endpoints : typing.Sequence<+T_co>[str] - Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> ++ cloud : Cloud ++ name : str ++ Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddRelation', version=3, params=_params) - _params['endpoints'] = endpoints ++ msg = dict(type='Cloud', ++ request='AddCloud', ++ version=3, ++ params=_params) ++ _params['cloud'] = cloud ++ _params['name'] = name + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(AddApplicationUnitsResults) - async def AddUnits(self, application, num_units, placement): ++ @ReturnMapping(ErrorResults) ++ async def AddCredentials(self, credentials): + ''' - application : str - num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> - Returns -> typing.Sequence<+T_co>[str] ++ credentials : typing.Sequence[~TaggedCredential] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddUnits', version=3, params=_params) - _params['application'] = application - _params['num-units'] = num_units - _params['placement'] = placement ++ msg = dict(type='Cloud', ++ request='AddCredentials', ++ version=3, ++ params=_params) ++ _params['credentials'] = credentials + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ApplicationCharmRelationsResults) - async def CharmRelations(self, application): ++ @ReturnMapping(UpdateCredentialResults) ++ async def CheckCredentialsModels(self, credentials): + ''' - application : str - Returns -> typing.Sequence<+T_co>[str] ++ credentials : typing.Sequence[~TaggedCredential] ++ Returns -> typing.Sequence[~UpdateCredentialResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='CharmRelations', version=3, params=_params) - _params['application'] = application ++ msg = dict(type='Cloud', ++ request='CheckCredentialsModels', ++ version=3, ++ params=_params) ++ _params['credentials'] = credentials + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ErrorResults) - async def Deploy(self, applications): ++ @ReturnMapping(CloudResults) ++ async def Cloud(self, entities): + ''' - applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Deploy', version=3, params=_params) - _params['applications'] = applications ++ msg = dict(type='Cloud', ++ request='Cloud', ++ version=3, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Destroy(self, application): ++ @ReturnMapping(CloudInfoResults) ++ async def CloudInfo(self, entities): + ''' - application : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Destroy', version=3, params=_params) - _params['application'] = application ++ msg = dict(type='Cloud', ++ request='CloudInfo', ++ version=3, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def DestroyRelation(self, endpoints): - ''' - endpoints : typing.Sequence<+T_co>[str] - Returns -> None ++ @ReturnMapping(CloudsResult) ++ async def Clouds(self): + ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Application', request='DestroyRelation', version=3, params=_params) - _params['endpoints'] = endpoints - reply = await self.rpc(msg) - return reply + - - - @ReturnMapping(None) - async def DestroyUnits(self, unit_names): - ''' - unit_names : typing.Sequence<+T_co>[str] - Returns -> None ++ Returns -> typing.Mapping[str, ~Cloud] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnits', version=3, params=_params) - _params['unit-names'] = unit_names ++ msg = dict(type='Cloud', ++ request='Clouds', ++ version=3, ++ params=_params) ++ + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Expose(self, application): ++ @ReturnMapping(CloudCredentialResults) ++ async def Credential(self, entities): + ''' - application : str - Returns -> None ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudCredentialResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Expose', version=3, params=_params) - _params['application'] = application ++ msg = dict(type='Cloud', ++ request='Credential', ++ version=3, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(ApplicationGetResults) - async def Get(self, application): ++ @ReturnMapping(CredentialContentResults) ++ async def CredentialContents(self, credentials, include_secrets): + ''' - application : str - Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')] ++ credentials : typing.Sequence[~CloudCredentialArg] ++ include_secrets : bool ++ Returns -> typing.Sequence[~CredentialContentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Get', version=3, params=_params) - _params['application'] = application ++ msg = dict(type='Cloud', ++ request='CredentialContents', ++ version=3, ++ params=_params) ++ _params['credentials'] = credentials ++ _params['include-secrets'] = include_secrets + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) - async def GetCharmURL(self, application): ++ async def DefaultCloud(self): + ''' - application : str ++ + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetCharmURL', version=3, params=_params) - _params['application'] = application - reply = await self.rpc(msg) - return reply ++ msg = dict(type='Cloud', ++ request='DefaultCloud', ++ version=3, ++ params=_params) + - - - @ReturnMapping(GetConstraintsResults) - async def GetConstraints(self, application): - ''' - application : str - Returns -> Value - ''' - # map input types to rpc msg - _params = dict() - msg = dict(type='Application', request='GetConstraints', version=3, params=_params) - _params['application'] = application + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Set(self, application, options): ++ @ReturnMapping(InstanceTypesResults) ++ async def InstanceTypes(self, constraints): + ''' - application : str - options : typing.Mapping<~KT, +VT_co>[str, str] - Returns -> None ++ constraints : typing.Sequence[~CloudInstanceTypesConstraint] ++ Returns -> typing.Sequence[~InstanceTypesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Set', version=3, params=_params) - _params['application'] = application - _params['options'] = options ++ msg = dict(type='Cloud', ++ request='InstanceTypes', ++ version=3, ++ params=_params) ++ _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): ++ @ReturnMapping(ListCloudInfoResults) ++ async def ListCloudInfo(self, all_, user_tag): + ''' - application : str - channel : str - charm_url : str - config_settings : typing.Mapping<~KT, +VT_co>[str, str] - config_settings_yaml : str - force_series : bool - force_units : bool - resource_ids : typing.Mapping<~KT, +VT_co>[str, str] - storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints> - Returns -> None ++ all_ : bool ++ user_tag : str ++ Returns -> typing.Sequence[~ListCloudInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetCharm', version=3, params=_params) - _params['application'] = application - _params['channel'] = channel - _params['charm-url'] = charm_url - _params['config-settings'] = config_settings - _params['config-settings-yaml'] = config_settings_yaml - _params['force-series'] = force_series - _params['force-units'] = force_units - _params['resource-ids'] = resource_ids - _params['storage-constraints'] = storage_constraints ++ msg = dict(type='Cloud', ++ request='ListCloudInfo', ++ version=3, ++ params=_params) ++ _params['all'] = all_ ++ _params['user-tag'] = user_tag + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def SetConstraints(self, application, constraints): ++ @ReturnMapping(ErrorResults) ++ async def ModifyCloudAccess(self, changes): + ''' - application : str - constraints : Value - Returns -> None ++ changes : typing.Sequence[~ModifyCloudAccess] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetConstraints', version=3, params=_params) - _params['application'] = application - _params['constraints'] = constraints ++ msg = dict(type='Cloud', ++ request='ModifyCloudAccess', ++ version=3, ++ params=_params) ++ _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) - async def SetMetricCredentials(self, creds): ++ async def RemoveClouds(self, entities): + ''' - creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetMetricCredentials', version=3, params=_params) - _params['creds'] = creds ++ msg = dict(type='Cloud', ++ request='RemoveClouds', ++ version=3, ++ params=_params) ++ _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Unexpose(self, application): ++ @ReturnMapping(ErrorResults) ++ async def RevokeCredentialsCheckModels(self, credentials): + ''' - application : str - Returns -> None ++ credentials : typing.Sequence[~RevokeCredentialArg] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unexpose', version=3, params=_params) - _params['application'] = application ++ msg = dict(type='Cloud', ++ request='RevokeCredentialsCheckModels', ++ version=3, ++ params=_params) ++ _params['credentials'] = credentials + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Unset(self, application, options): ++ @ReturnMapping(UpdateCredentialResults) ++ async def UpdateCredentialsCheckModels(self, credentials, force): + ''' - application : str - options : typing.Sequence<+T_co>[str] - Returns -> None ++ credentials : typing.Sequence[~TaggedCredential] ++ force : bool ++ Returns -> typing.Sequence[~UpdateCredentialResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unset', version=3, params=_params) - _params['application'] = application - _params['options'] = options ++ msg = dict(type='Cloud', ++ request='UpdateCredentialsCheckModels', ++ version=3, ++ params=_params) ++ _params['credentials'] = credentials ++ _params['force'] = force + reply = await self.rpc(msg) + return reply + + + - @ReturnMapping(None) - async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): ++ @ReturnMapping(StringsResults) ++ async def UserCredentials(self, user_clouds): + ''' - application : str - charm_url : str - constraints : Value - force_charm_url : bool - force_series : bool - min_units : int - settings : typing.Mapping<~KT, +VT_co>[str, str] - settings_yaml : str - Returns -> None ++ user_clouds : typing.Sequence[~UserCloud] ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Update', version=3, params=_params) - _params['application'] = application - _params['charm-url'] = charm_url - _params['constraints'] = constraints - _params['force-charm-url'] = force_charm_url - _params['force-series'] = force_series - _params['min-units'] = min_units - _params['settings'] = settings - _params['settings-yaml'] = settings_yaml ++ msg = dict(type='Cloud', ++ request='UserCredentials', ++ version=3, ++ params=_params) ++ _params['user-clouds'] = user_clouds + reply = await self.rpc(msg) + return reply + + + +class ControllerFacade(Type): + name = 'Controller' + version = 3 + schema = {'definitions': {'AllWatcherId': {'additionalProperties': False, + 'properties': {'watcher-id': {'type': 'string'}}, + 'required': ['watcher-id'], + 'type': 'object'}, + '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': {'credential': {'$ref': '#/definitions/CloudCredential'}, + 'endpoint': {'type': 'string'}, + 'identity-endpoint': {'type': 'string'}, + 'name': {'type': 'string'}, + 'region': {'type': 'string'}, + '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'}, + 'ConfigValue': {'additionalProperties': False, + 'properties': {'source': {'type': 'string'}, + 'value': {'additionalProperties': True, + 'type': 'object'}}, + 'required': ['value', 'source'], + 'type': 'object'}, + 'ControllerConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'DestroyControllerArgs': {'additionalProperties': False, + 'properties': {'destroy-models': {'type': 'boolean'}}, + 'required': ['destroy-models'], + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'HostedModelConfig': {'additionalProperties': False, + 'properties': {'cloud-spec': {'$ref': '#/definitions/CloudSpec'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'owner': {'type': 'string'}}, + 'required': ['name', 'owner'], + 'type': 'object'}, + 'HostedModelConfigsResults': {'additionalProperties': False, + 'properties': {'models': {'items': {'$ref': '#/definitions/HostedModelConfig'}, + 'type': 'array'}}, + 'required': ['models'], + 'type': 'object'}, + 'InitiateMigrationArgs': {'additionalProperties': False, + 'properties': {'specs': {'items': {'$ref': '#/definitions/MigrationSpec'}, + 'type': 'array'}}, + 'required': ['specs'], + 'type': 'object'}, + 'InitiateMigrationResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'migration-id': {'type': 'string'}, + 'model-tag': {'type': 'string'}}, + 'required': ['model-tag', + 'migration-id'], + 'type': 'object'}, + 'InitiateMigrationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/InitiateMigrationResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineHardware': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'MigrationSpec': {'additionalProperties': False, + 'properties': {'model-tag': {'type': 'string'}, + 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}}, + 'required': ['model-tag', 'target-info'], + 'type': 'object'}, + 'MigrationTargetInfo': {'additionalProperties': False, + 'properties': {'addrs': {'items': {'type': 'string'}, + 'type': 'array'}, + 'auth-tag': {'type': 'string'}, + 'ca-cert': {'type': 'string'}, + 'controller-tag': {'type': 'string'}, + 'macaroons': {'type': 'string'}, + 'password': {'type': 'string'}}, + 'required': ['controller-tag', + 'addrs', + 'ca-cert', + 'auth-tag'], + 'type': 'object'}, + 'Model': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', 'uuid', 'owner-tag'], + 'type': 'object'}, + 'ModelBlockInfo': {'additionalProperties': False, + 'properties': {'blocks': {'items': {'type': 'string'}, + 'type': 'array'}, + 'model-uuid': {'type': 'string'}, + 'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}}, + 'required': ['name', + 'model-uuid', + 'owner-tag', + 'blocks'], + 'type': 'object'}, + 'ModelBlockInfoList': {'additionalProperties': False, + 'properties': {'models': {'items': {'$ref': '#/definitions/ModelBlockInfo'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ModelConfigResults': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelMachineInfo': {'additionalProperties': False, + 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, + 'has-vote': {'type': 'boolean'}, + 'id': {'type': 'string'}, + 'instance-id': {'type': 'string'}, + 'status': {'type': 'string'}, + 'wants-vote': {'type': 'boolean'}}, + 'required': ['id'], + 'type': 'object'}, + 'ModelStatus': {'additionalProperties': False, + 'properties': {'application-count': {'type': 'integer'}, + 'hosted-machine-count': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, + 'type': 'array'}, + 'model-tag': {'type': 'string'}, + 'owner-tag': {'type': 'string'}}, + 'required': ['model-tag', + 'life', + 'hosted-machine-count', + 'application-count', + 'owner-tag'], + 'type': 'object'}, + 'ModelStatusResults': {'additionalProperties': False, + 'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'}, + 'type': 'array'}}, + 'required': ['models'], + 'type': 'object'}, + 'ModelTag': {'additionalProperties': False, 'type': 'object'}, + 'ModifyControllerAccess': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'action': {'type': 'string'}, + 'user-tag': {'type': 'string'}}, + 'required': ['user-tag', + 'action', + 'access'], + 'type': 'object'}, + 'ModifyControllerAccessRequest': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyControllerAccess'}, + 'type': 'array'}}, + 'required': ['changes'], + 'type': 'object'}, + 'RemoveBlocksArgs': {'additionalProperties': False, + 'properties': {'all': {'type': 'boolean'}}, + 'required': ['all'], + 'type': 'object'}, + 'UserAccess': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'user-tag': {'type': 'string'}}, + 'required': ['user-tag', 'access'], + 'type': 'object'}, + 'UserAccessResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/UserAccess'}}, + 'type': 'object'}, + 'UserAccessResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/UserAccessResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'UserModel': {'additionalProperties': False, + 'properties': {'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'model': {'$ref': '#/definitions/Model'}}, + 'required': ['model', 'last-connection'], + 'type': 'object'}, + 'UserModelList': {'additionalProperties': False, + 'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'}, + 'type': 'array'}}, + 'required': ['user-models'], + 'type': 'object'}}, + 'properties': {'AllModels': {'properties': {'Result': {'$ref': '#/definitions/UserModelList'}}, + 'type': 'object'}, + 'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, + 'type': 'object'}, + 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, + 'type': 'object'}, + 'DestroyController': {'properties': {'Params': {'$ref': '#/definitions/DestroyControllerArgs'}}, + 'type': 'object'}, + 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, + 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, + 'type': 'object'}, + 'GetControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/UserAccessResults'}}, + 'type': 'object'}, + 'HostedModelConfigs': {'properties': {'Result': {'$ref': '#/definitions/HostedModelConfigsResults'}}, + 'type': 'object'}, + 'InitiateMigration': {'properties': {'Params': {'$ref': '#/definitions/InitiateMigrationArgs'}, + 'Result': {'$ref': '#/definitions/InitiateMigrationResults'}}, + 'type': 'object'}, + 'ListBlockedModels': {'properties': {'Result': {'$ref': '#/definitions/ModelBlockInfoList'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, + 'type': 'object'}, + 'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ModelStatusResults'}}, + 'type': 'object'}, + 'ModifyControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyControllerAccessRequest'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'RemoveBlocks': {'properties': {'Params': {'$ref': '#/definitions/RemoveBlocksArgs'}}, + 'type': 'object'}, + 'WatchAllModels': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(UserModelList) + async def AllModels(self): + ''' + - Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel> ++ Returns -> typing.Sequence[~UserModel] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='AllModels', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='AllModels', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(CloudSpecResults) + async def CloudSpec(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='CloudSpec', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='CloudSpec', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ControllerConfigResult) + async def ControllerConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='ControllerConfig', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='ControllerConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyController(self, destroy_models): + ''' + destroy_models : bool + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='DestroyController', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='DestroyController', ++ version=3, ++ params=_params) + _params['destroy-models'] = destroy_models + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(CloudSpecResult) + async def GetCloudSpec(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='GetCloudSpec', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='GetCloudSpec', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(UserAccessResults) + async def GetControllerAccess(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UserAccessResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='GetControllerAccess', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='GetControllerAccess', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(HostedModelConfigsResults) + async def HostedModelConfigs(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig> ++ Returns -> typing.Sequence[~HostedModelConfig] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='HostedModelConfigs', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='HostedModelConfigs', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(InitiateMigrationResults) + async def InitiateMigration(self, specs): + ''' - specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec> - Returns -> typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult> ++ specs : typing.Sequence[~MigrationSpec] ++ Returns -> typing.Sequence[~InitiateMigrationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='InitiateMigration', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='InitiateMigration', ++ version=3, ++ params=_params) + _params['specs'] = specs + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelBlockInfoList) + async def ListBlockedModels(self): + ''' + - Returns -> typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo> ++ Returns -> typing.Sequence[~ModelBlockInfo] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='ListBlockedModels', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='ListBlockedModels', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResults) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue> ++ Returns -> typing.Mapping[str, ~ConfigValue] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='ModelConfig', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='ModelConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelStatusResults) + async def ModelStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelStatus] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='ModelStatus', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='ModelStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ModifyControllerAccess(self, changes): + ''' - changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ changes : typing.Sequence[~ModifyControllerAccess] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='ModifyControllerAccess', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='ModifyControllerAccess', ++ version=3, ++ params=_params) + _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def RemoveBlocks(self, all_): + ''' + all_ : bool + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='RemoveBlocks', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='RemoveBlocks', ++ version=3, ++ params=_params) + _params['all'] = all_ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(AllWatcherId) + async def WatchAllModels(self): + ''' + + Returns -> str + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Controller', request='WatchAllModels', version=3, params=_params) ++ msg = dict(type='Controller', ++ request='WatchAllModels', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class FirewallerFacade(Type): + name = 'Firewaller' + version = 3 + schema = {'definitions': {'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'}, + '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': {'credential': {'$ref': '#/definitions/CloudCredential'}, + 'endpoint': {'type': 'string'}, + 'identity-endpoint': {'type': 'string'}, + 'name': {'type': 'string'}, + 'region': {'type': 'string'}, + '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'}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachinePortRange': {'additionalProperties': False, + 'properties': {'port-range': {'$ref': '#/definitions/PortRange'}, + 'relation-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['unit-tag', + 'relation-tag', + 'port-range'], + 'type': 'object'}, + 'MachinePorts': {'additionalProperties': False, + 'properties': {'machine-tag': {'type': 'string'}, + 'subnet-tag': {'type': 'string'}}, + 'required': ['machine-tag', 'subnet-tag'], + 'type': 'object'}, + 'MachinePortsParams': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/MachinePorts'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'MachinePortsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'ports': {'items': {'$ref': '#/definitions/MachinePortRange'}, + 'type': 'array'}}, + 'required': ['ports'], + 'type': 'object'}, + 'MachinePortsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'PortRange': {'additionalProperties': False, + 'properties': {'from-port': {'type': 'integer'}, + 'protocol': {'type': 'string'}, + 'to-port': {'type': 'integer'}}, + 'required': ['from-port', 'to-port', 'protocol'], + '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'}, + 'StringsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StringsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, + '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'}}, + 'properties': {'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, + 'type': 'object'}, + 'GetAssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, + 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, + 'type': 'object'}, + 'GetExposed': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/BoolResults'}}, + 'type': 'object'}, + 'GetMachineActiveSubnets': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsResults'}}, + 'type': 'object'}, + 'GetMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/MachinePortsParams'}, + 'Result': {'$ref': '#/definitions/MachinePortsResults'}}, + 'type': 'object'}, + 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, + 'type': 'object'}, + 'WatchOpenedPorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(CloudSpecResults) + async def CloudSpec(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='CloudSpec', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='CloudSpec', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def GetAssignedMachine(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='GetAssignedMachine', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='GetAssignedMachine', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(CloudSpecResult) + async def GetCloudSpec(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='GetCloudSpec', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='GetCloudSpec', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BoolResults) + async def GetExposed(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='GetExposed', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='GetExposed', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsResults) + async def GetMachineActiveSubnets(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='GetMachineActiveSubnets', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='GetMachineActiveSubnets', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachinePortsResults) + async def GetMachinePorts(self, params): + ''' - params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts> - Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult> ++ params : typing.Sequence[~MachinePorts] ++ Returns -> typing.Sequence[~MachinePortsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='GetMachinePorts', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='GetMachinePorts', ++ version=3, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def InstanceId(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='InstanceId', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='InstanceId', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='Life', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='Life', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='ModelConfig', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='ModelConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def Watch(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='Watch', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='Watch', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='WatchForModelConfigChanges', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='WatchForModelConfigChanges', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResult) + async def WatchModelMachines(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='WatchModelMachines', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='WatchModelMachines', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchOpenedPorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='WatchOpenedPorts', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='WatchOpenedPorts', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchUnits(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Firewaller', request='WatchUnits', version=3, params=_params) ++ msg = dict(type='Firewaller', ++ request='WatchUnits', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + ++class ImageMetadataFacade(Type): ++ name = 'ImageMetadata' ++ version = 3 ++ schema = {'properties': {'UpdateFromPublishedImages': {'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(None) ++ async def UpdateFromPublishedImages(self): ++ ''' ++ ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ImageMetadata', ++ request='UpdateFromPublishedImages', ++ version=3, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class InstancePollerFacade(Type): + name = 'InstancePoller' + version = 3 + schema = {'definitions': {'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + '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'}, + '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'}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineAddresses': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, + 'type': 'array'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'addresses'], + 'type': 'object'}, + 'MachineAddressesResult': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, + 'type': 'array'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['addresses'], + 'type': 'object'}, + 'MachineAddressesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachineAddressesResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'SetMachinesAddresses': {'additionalProperties': False, + 'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'}, + 'type': 'array'}}, + 'required': ['machine-addresses'], + 'type': 'object'}, + 'SetStatus': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'StatusResult': {'additionalProperties': False, + 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'string'}, + 'info': {'type': 'string'}, + 'life': {'type': 'string'}, + 'since': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['id', + 'life', + 'status', + 'info', + 'data', + 'since'], + 'type': 'object'}, + 'StatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}}, + 'properties': {'AreManuallyProvisioned': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/BoolResults'}}, + 'type': 'object'}, + 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'InstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'ProviderAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachineAddressesResults'}}, + 'type': 'object'}, + 'SetInstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetProviderAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Status': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(BoolResults) + async def AreManuallyProvisioned(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='AreManuallyProvisioned', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='AreManuallyProvisioned', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def InstanceId(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='InstanceId', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='InstanceId', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def InstanceStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='InstanceStatus', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='InstanceStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='Life', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='Life', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='ModelConfig', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='ModelConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachineAddressesResults) + async def ProviderAddresses(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineAddressesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='ProviderAddresses', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='ProviderAddresses', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetInstanceStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='SetInstanceStatus', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='SetInstanceStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetProviderAddresses(self, machine_addresses): + ''' - machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ machine_addresses : typing.Sequence[~MachineAddresses] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='SetProviderAddresses', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='SetProviderAddresses', ++ version=3, ++ params=_params) + _params['machine-addresses'] = machine_addresses + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def Status(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='Status', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='Status', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='WatchForModelConfigChanges', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='WatchForModelConfigChanges', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResult) + async def WatchModelMachines(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='InstancePoller', request='WatchModelMachines', version=3, params=_params) ++ msg = dict(type='InstancePoller', ++ request='WatchModelMachines', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class MachineManagerFacade(Type): + name = 'MachineManager' + version = 3 + schema = {'definitions': {'AddMachineParams': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, + 'type': 'array'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'container-type': {'type': 'string'}, + 'disks': {'items': {'$ref': '#/definitions/Constraints'}, + 'type': 'array'}, + 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, + 'instance-id': {'type': 'string'}, + 'jobs': {'items': {'type': 'string'}, + 'type': 'array'}, + 'nonce': {'type': 'string'}, + 'parent-id': {'type': 'string'}, + 'placement': {'$ref': '#/definitions/Placement'}, + 'series': {'type': 'string'}}, + 'required': ['series', + 'constraints', + 'jobs', + 'parent-id', + 'container-type', + 'instance-id', + 'nonce', + 'hardware-characteristics', + 'addresses'], + 'type': 'object'}, + 'AddMachines': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'AddMachinesResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'machine': {'type': 'string'}}, + 'required': ['machine'], + 'type': 'object'}, + 'AddMachinesResults': {'additionalProperties': False, + 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, + 'type': 'array'}}, + 'required': ['machines'], + 'type': 'object'}, + 'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + 'type': 'object'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'DestroyMachineInfo': {'additionalProperties': False, + 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'destroyed-units': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyMachineResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'$ref': '#/definitions/DestroyMachineInfo'}}, + 'type': 'object'}, + 'DestroyMachineResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyMachineResult'}, + 'type': 'array'}}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + 'type': 'object'}, + 'HardwareCharacteristics': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cpu-cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'InstanceType': {'additionalProperties': False, + 'properties': {'arches': {'items': {'type': 'string'}, + 'type': 'array'}, + 'cost': {'type': 'integer'}, + 'cpu-cores': {'type': 'integer'}, + 'deprecated': {'type': 'boolean'}, + 'memory': {'type': 'integer'}, + 'name': {'type': 'string'}, + 'root-disk': {'type': 'integer'}, + 'virt-type': {'type': 'string'}}, + 'required': ['arches', 'cpu-cores', 'memory'], + 'type': 'object'}, + 'InstanceTypesResult': {'additionalProperties': False, + 'properties': {'cost-currency': {'type': 'string'}, + 'cost-divisor': {'type': 'integer'}, + 'cost-unit': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, + 'type': 'array'}}, + 'type': 'object'}, + 'InstanceTypesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'ModelInstanceTypesConstraint': {'additionalProperties': False, + 'properties': {'value': {'$ref': '#/definitions/Value'}}, + 'type': 'object'}, + 'ModelInstanceTypesConstraints': {'additionalProperties': False, + 'properties': {'constraints': {'items': {'$ref': '#/definitions/ModelInstanceTypesConstraint'}, + 'type': 'array'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, + 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, + 'type': 'object'}, + 'DestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyMachineResults'}}, + 'type': 'object'}, + 'ForceDestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyMachineResults'}}, + 'type': 'object'}, + 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/ModelInstanceTypesConstraints'}, + 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AddMachinesResults) + async def AddMachines(self, params): + ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> - Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='AddMachines', version=3, params=_params) ++ msg = dict(type='MachineManager', ++ request='AddMachines', ++ version=3, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyMachineResults) + async def DestroyMachine(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyMachineResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='DestroyMachine', version=3, params=_params) ++ msg = dict(type='MachineManager', ++ request='DestroyMachine', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyMachineResults) + async def ForceDestroyMachine(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyMachineResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='ForceDestroyMachine', version=3, params=_params) ++ msg = dict(type='MachineManager', ++ request='ForceDestroyMachine', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(InstanceTypesResults) + async def InstanceTypes(self, constraints): + ''' - constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint> - Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult> ++ constraints : typing.Sequence[~ModelInstanceTypesConstraint] ++ Returns -> typing.Sequence[~InstanceTypesResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='MachineManager', request='InstanceTypes', version=3, params=_params) ++ msg = dict(type='MachineManager', ++ request='InstanceTypes', ++ version=3, ++ params=_params) + _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + +class ModelManagerFacade(Type): + name = 'ModelManager' + version = 3 + schema = {'definitions': {'DumpModelRequest': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'simplified': {'type': 'boolean'}}, + 'required': ['entities', 'simplified'], + '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'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineHardware': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'MapResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['result'], + 'type': 'object'}, + 'MapResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MapResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Model': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', 'uuid', 'owner-tag'], + 'type': 'object'}, + 'ModelCreateArgs': {'additionalProperties': False, + 'properties': {'cloud-tag': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'credential': {'type': 'string'}, + 'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'region': {'type': 'string'}}, + 'required': ['name', 'owner-tag'], + 'type': 'object'}, + 'ModelDefaultValues': {'additionalProperties': False, + 'properties': {'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelDefaults': {'additionalProperties': False, + 'properties': {'controller': {'additionalProperties': True, + 'type': 'object'}, + 'default': {'additionalProperties': True, + 'type': 'object'}, + 'regions': {'items': {'$ref': '#/definitions/RegionDefaults'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ModelDefaultsResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ModelDefaults'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelInfo': {'additionalProperties': False, + 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, + 'cloud-credential-tag': {'type': 'string'}, + 'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'controller-uuid': {'type': 'string'}, + 'default-series': {'type': 'string'}, + 'life': {'type': 'string'}, + 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, + 'type': 'array'}, + 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, + 'name': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'provider-type': {'type': 'string'}, + 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, + 'status': {'$ref': '#/definitions/EntityStatus'}, + 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, + 'type': 'array'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', + 'uuid', + 'controller-uuid', + 'cloud-tag', + 'owner-tag', + 'life', + 'users', + 'machines', + 'sla', + 'agent-version'], + 'type': 'object'}, + 'ModelInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/ModelInfo'}}, + 'type': 'object'}, + 'ModelInfoResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ModelInfoResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ModelMachineInfo': {'additionalProperties': False, + 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, + 'has-vote': {'type': 'boolean'}, + 'id': {'type': 'string'}, + 'instance-id': {'type': 'string'}, + 'status': {'type': 'string'}, + 'wants-vote': {'type': 'boolean'}}, + 'required': ['id'], + 'type': 'object'}, + 'ModelMigrationStatus': {'additionalProperties': False, + 'properties': {'end': {'format': 'date-time', + 'type': 'string'}, + 'start': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['status', 'start'], + 'type': 'object'}, + 'ModelSLAInfo': {'additionalProperties': False, + 'properties': {'level': {'type': 'string'}, + 'owner': {'type': 'string'}}, + 'required': ['level', 'owner'], + 'type': 'object'}, + 'ModelStatus': {'additionalProperties': False, + 'properties': {'application-count': {'type': 'integer'}, + 'hosted-machine-count': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, + 'type': 'array'}, + 'model-tag': {'type': 'string'}, + 'owner-tag': {'type': 'string'}}, + 'required': ['model-tag', + 'life', + 'hosted-machine-count', + 'application-count', + 'owner-tag'], + 'type': 'object'}, + 'ModelStatusResults': {'additionalProperties': False, + 'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'}, + 'type': 'array'}}, + 'required': ['models'], + 'type': 'object'}, + 'ModelUnsetKeys': {'additionalProperties': False, + 'properties': {'cloud-region': {'type': 'string'}, + 'cloud-tag': {'type': 'string'}, + 'keys': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['keys'], + 'type': 'object'}, + 'ModelUserInfo': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'display-name': {'type': 'string'}, + 'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'user': {'type': 'string'}}, + 'required': ['user', + 'display-name', + 'last-connection', + 'access'], + 'type': 'object'}, + 'ModifyModelAccess': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'action': {'type': 'string'}, + 'model-tag': {'type': 'string'}, + 'user-tag': {'type': 'string'}}, + 'required': ['user-tag', + 'action', + 'access', + 'model-tag'], + 'type': 'object'}, + 'ModifyModelAccessRequest': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyModelAccess'}, + 'type': 'array'}}, + 'required': ['changes'], + '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'}, + 'RegionDefaults': {'additionalProperties': False, + 'properties': {'region-name': {'type': 'string'}, + 'value': {'additionalProperties': True, + 'type': 'object'}}, + 'required': ['region-name', 'value'], + 'type': 'object'}, + 'SetModelDefaults': {'additionalProperties': False, + 'properties': {'config': {'items': {'$ref': '#/definitions/ModelDefaultValues'}, + 'type': 'array'}}, + 'required': ['config'], + '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'}, + 'UnsetModelDefaults': {'additionalProperties': False, + 'properties': {'keys': {'items': {'$ref': '#/definitions/ModelUnsetKeys'}, + 'type': 'array'}}, + 'required': ['keys'], + 'type': 'object'}, + 'UserModel': {'additionalProperties': False, + 'properties': {'last-connection': {'format': 'date-time', + 'type': 'string'}, + 'model': {'$ref': '#/definitions/Model'}}, + 'required': ['model', 'last-connection'], + 'type': 'object'}, + 'UserModelList': {'additionalProperties': False, + 'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'}, + 'type': 'array'}}, + 'required': ['user-models'], + 'type': 'object'}}, + 'properties': {'CreateModel': {'properties': {'Params': {'$ref': '#/definitions/ModelCreateArgs'}, + 'Result': {'$ref': '#/definitions/ModelInfo'}}, + 'type': 'object'}, + 'DestroyModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DumpModels': {'properties': {'Params': {'$ref': '#/definitions/DumpModelRequest'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'DumpModelsDB': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MapResults'}}, + 'type': 'object'}, + 'ListModels': {'properties': {'Params': {'$ref': '#/definitions/Entity'}, + 'Result': {'$ref': '#/definitions/UserModelList'}}, + 'type': 'object'}, + 'ModelDefaults': {'properties': {'Result': {'$ref': '#/definitions/ModelDefaultsResult'}}, + 'type': 'object'}, + 'ModelInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ModelInfoResults'}}, + 'type': 'object'}, + 'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ModelStatusResults'}}, + 'type': 'object'}, + 'ModifyModelAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyModelAccessRequest'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/SetModelDefaults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'UnsetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/UnsetModelDefaults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ModelInfo) + async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region): + ''' + cloud_tag : str - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + credential : str + name : str + owner_tag : str + region : str - Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>] ++ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='CreateModel', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='CreateModel', ++ version=3, ++ params=_params) + _params['cloud-tag'] = cloud_tag + _params['config'] = config + _params['credential'] = credential + _params['name'] = name + _params['owner-tag'] = owner_tag + _params['region'] = region + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyModels(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DestroyModels', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='DestroyModels', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def DumpModels(self, entities, simplified): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + simplified : bool - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DumpModels', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='DumpModels', ++ version=3, ++ params=_params) + _params['entities'] = entities + _params['simplified'] = simplified + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MapResults) + async def DumpModelsDB(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MapResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='DumpModelsDB', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='DumpModelsDB', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(UserModelList) + async def ListModels(self, tag): + ''' + tag : str - Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel> ++ Returns -> typing.Sequence[~UserModel] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ListModels', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='ListModels', ++ version=3, ++ params=_params) + _params['tag'] = tag + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelDefaultsResult) + async def ModelDefaults(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults> ++ Returns -> typing.Mapping[str, ~ModelDefaults] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelDefaults', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModelDefaults', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelInfoResults) + async def ModelInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelInfo', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModelInfo', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelStatusResults) + async def ModelStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelStatus] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModelStatus', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModelStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ModifyModelAccess(self, changes): + ''' - changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ changes : typing.Sequence[~ModifyModelAccess] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='ModifyModelAccess', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='ModifyModelAccess', ++ version=3, ++ params=_params) + _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetModelDefaults(self, config): + ''' - config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ config : typing.Sequence[~ModelDefaultValues] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='SetModelDefaults', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='SetModelDefaults', ++ version=3, ++ params=_params) + _params['config'] = config + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def UnsetModelDefaults(self, keys): + ''' - keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ keys : typing.Sequence[~ModelUnsetKeys] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='ModelManager', request='UnsetModelDefaults', version=3, params=_params) ++ msg = dict(type='ModelManager', ++ request='UnsetModelDefaults', ++ version=3, ++ params=_params) + _params['keys'] = keys + reply = await self.rpc(msg) + return reply + + + +class ProvisionerFacade(Type): + name = 'Provisioner' + version = 3 + schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, + 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, + 'type': 'array'}, + 'type': 'array'}}, + 'required': ['servers'], + 'type': 'object'}, + 'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + 'type': 'object'}, + 'Binary': {'additionalProperties': False, + 'properties': {'Arch': {'type': 'string'}, + 'Number': {'$ref': '#/definitions/Number'}, + 'Series': {'type': 'string'}}, + 'required': ['Number', 'Series', 'Arch'], + 'type': 'object'}, + 'BytesResult': {'additionalProperties': False, + 'properties': {'result': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['result'], + 'type': 'object'}, + 'CloudImageMetadata': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'image-id': {'type': 'string'}, + 'priority': {'type': 'integer'}, + 'region': {'type': 'string'}, + 'root-storage-size': {'type': 'integer'}, + 'root-storage-type': {'type': 'string'}, + 'series': {'type': 'string'}, + 'source': {'type': 'string'}, + 'stream': {'type': 'string'}, + 'version': {'type': 'string'}, + 'virt-type': {'type': 'string'}}, + 'required': ['image-id', + 'region', + 'version', + 'series', + 'arch', + 'source', + 'priority'], + 'type': 'object'}, + 'ConstraintsResult': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'ConstraintsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ConstraintsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ContainerConfig': {'additionalProperties': False, + 'properties': {'UpdateBehavior': {'$ref': '#/definitions/UpdateBehavior'}, + 'apt-mirror': {'type': 'string'}, + 'apt-proxy': {'$ref': '#/definitions/Settings'}, + 'authorized-keys': {'type': 'string'}, + 'provider-type': {'type': 'string'}, + 'proxy': {'$ref': '#/definitions/Settings'}, + 'ssl-hostname-verification': {'type': 'boolean'}}, + 'required': ['provider-type', + 'authorized-keys', + 'ssl-hostname-verification', + 'proxy', + 'apt-proxy', + 'apt-mirror', + 'UpdateBehavior'], + 'type': 'object'}, + 'ContainerManagerConfig': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ContainerManagerConfigParams': {'additionalProperties': False, + 'properties': {'type': {'type': 'string'}}, + 'required': ['type'], + 'type': 'object'}, + 'ControllerConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'DeviceBridgeInfo': {'additionalProperties': False, + 'properties': {'bridge-name': {'type': 'string'}, + 'host-device-name': {'type': 'string'}}, + 'required': ['host-device-name', + 'bridge-name'], + 'type': 'object'}, + 'DistributionGroupResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['result'], + 'type': 'object'}, + 'DistributionGroupResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DistributionGroupResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'EntityPassword': {'additionalProperties': False, + 'properties': {'password': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'password'], + 'type': 'object'}, + 'EntityPasswords': {'additionalProperties': False, + 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, + 'type': 'array'}}, + 'required': ['changes'], + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'FindToolsParams': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'major': {'type': 'integer'}, + 'minor': {'type': 'integer'}, + 'number': {'$ref': '#/definitions/Number'}, + 'series': {'type': 'string'}}, + 'required': ['number', + 'major', + 'minor', + 'arch', + 'series'], + 'type': 'object'}, + 'FindToolsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'list': {'items': {'$ref': '#/definitions/Tools'}, + 'type': 'array'}}, + 'required': ['list'], + 'type': 'object'}, + 'HardwareCharacteristics': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'availability-zone': {'type': 'string'}, + 'cpu-cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'HostNetworkChange': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'new-bridges': {'items': {'$ref': '#/definitions/DeviceBridgeInfo'}, + 'type': 'array'}, + 'reconfigure-delay': {'type': 'integer'}}, + 'required': ['new-bridges', + 'reconfigure-delay'], + 'type': 'object'}, + 'HostNetworkChangeResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/HostNetworkChange'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'HostPort': {'additionalProperties': False, + 'properties': {'Address': {'$ref': '#/definitions/Address'}, + 'port': {'type': 'integer'}}, + 'required': ['Address', 'port'], + 'type': 'object'}, + 'InstanceInfo': {'additionalProperties': False, + 'properties': {'characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, + 'instance-id': {'type': 'string'}, + 'network-config': {'items': {'$ref': '#/definitions/NetworkConfig'}, + 'type': 'array'}, + 'nonce': {'type': 'string'}, + 'tag': {'type': 'string'}, + 'volume-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentInfo'}}, + 'type': 'object'}, + 'volumes': {'items': {'$ref': '#/definitions/Volume'}, + 'type': 'array'}}, + 'required': ['tag', + 'instance-id', + 'nonce', + 'characteristics', + 'volumes', + 'volume-attachments', + 'network-config'], + 'type': 'object'}, + 'InstancesInfo': {'additionalProperties': False, + 'properties': {'machines': {'items': {'$ref': '#/definitions/InstanceInfo'}, + 'type': 'array'}}, + 'required': ['machines'], + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineContainers': {'additionalProperties': False, + 'properties': {'container-types': {'items': {'type': 'string'}, + 'type': 'array'}, + 'machine-tag': {'type': 'string'}}, + 'required': ['machine-tag', + 'container-types'], + 'type': 'object'}, + 'MachineContainersParams': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/MachineContainers'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'MachineNetworkConfigResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'items': {'$ref': '#/definitions/NetworkConfig'}, + 'type': 'array'}}, + 'required': ['info'], + 'type': 'object'}, + 'MachineNetworkConfigResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachineNetworkConfigResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ModelConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'NetworkConfig': {'additionalProperties': False, + 'properties': {'address': {'type': 'string'}, + 'cidr': {'type': 'string'}, + 'config-type': {'type': 'string'}, + 'device-index': {'type': 'integer'}, + 'disabled': {'type': 'boolean'}, + 'dns-search-domains': {'items': {'type': 'string'}, + 'type': 'array'}, + 'dns-servers': {'items': {'type': 'string'}, + 'type': 'array'}, + 'gateway-address': {'type': 'string'}, + 'interface-name': {'type': 'string'}, + 'interface-type': {'type': 'string'}, + 'mac-address': {'type': 'string'}, + 'mtu': {'type': 'integer'}, + 'no-auto-start': {'type': 'boolean'}, + 'parent-interface-name': {'type': 'string'}, + 'provider-address-id': {'type': 'string'}, + 'provider-id': {'type': 'string'}, + 'provider-space-id': {'type': 'string'}, + 'provider-subnet-id': {'type': 'string'}, + 'provider-vlan-id': {'type': 'string'}, + 'routes': {'items': {'$ref': '#/definitions/NetworkRoute'}, + 'type': 'array'}, + 'vlan-tag': {'type': 'integer'}}, + 'required': ['device-index', + 'mac-address', + 'cidr', + 'mtu', + 'provider-id', + 'provider-subnet-id', + 'provider-space-id', + 'provider-address-id', + 'provider-vlan-id', + 'vlan-tag', + 'interface-name', + 'parent-interface-name', + 'interface-type', + 'disabled'], + 'type': 'object'}, + 'NetworkRoute': {'additionalProperties': False, + 'properties': {'destination-cidr': {'type': 'string'}, + 'gateway-ip': {'type': 'string'}, + 'metric': {'type': 'integer'}}, + 'required': ['destination-cidr', + 'gateway-ip', + 'metric'], + 'type': 'object'}, + 'NotifyWatchResult': {'additionalProperties': False, + 'properties': {'NotifyWatcherId': {'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}}, + 'required': ['NotifyWatcherId'], + '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'}, + 'ProvisioningInfo': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}, + 'controller-config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'image-metadata': {'items': {'$ref': '#/definitions/CloudImageMetadata'}, + 'type': 'array'}, + 'jobs': {'items': {'type': 'string'}, + 'type': 'array'}, + 'placement': {'type': 'string'}, + 'series': {'type': 'string'}, + 'subnets-to-zones': {'patternProperties': {'.*': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'tags': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachmentParams'}, + 'type': 'array'}, + 'volumes': {'items': {'$ref': '#/definitions/VolumeParams'}, + 'type': 'array'}}, + 'required': ['constraints', + 'series', + 'placement', + 'jobs'], + 'type': 'object'}, + 'ProvisioningInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/ProvisioningInfo'}}, + 'required': ['result'], + 'type': 'object'}, + 'ProvisioningInfoResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ProvisioningInfoResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'SetMachineNetworkConfig': {'additionalProperties': False, + 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'}, + 'type': 'array'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'config'], + 'type': 'object'}, + 'SetStatus': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'Settings': {'additionalProperties': False, + 'properties': {'AutoNoProxy': {'type': 'string'}, + 'Ftp': {'type': 'string'}, + 'Http': {'type': 'string'}, + 'Https': {'type': 'string'}, + 'NoProxy': {'type': 'string'}}, + 'required': ['Http', + 'Https', + 'Ftp', + 'NoProxy', + 'AutoNoProxy'], + 'type': 'object'}, + 'StatusResult': {'additionalProperties': False, + 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'string'}, + 'info': {'type': 'string'}, + 'life': {'type': 'string'}, + 'since': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['id', + 'life', + 'status', + 'info', + 'data', + 'since'], + 'type': 'object'}, + 'StatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'StringsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + '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'}, + 'Tools': {'additionalProperties': False, + 'properties': {'sha256': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'url': {'type': 'string'}, + 'version': {'$ref': '#/definitions/Binary'}}, + 'required': ['version', 'url', 'size'], + 'type': 'object'}, + 'ToolsResult': {'additionalProperties': False, + 'properties': {'disable-ssl-hostname-verification': {'type': 'boolean'}, + 'error': {'$ref': '#/definitions/Error'}, + 'tools': {'items': {'$ref': '#/definitions/Tools'}, + 'type': 'array'}}, + 'required': ['tools', + 'disable-ssl-hostname-verification'], + 'type': 'object'}, + 'ToolsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ToolsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'UpdateBehavior': {'additionalProperties': False, + 'properties': {'enable-os-refresh-update': {'type': 'boolean'}, + 'enable-os-upgrade': {'type': 'boolean'}}, + 'required': ['enable-os-refresh-update', + 'enable-os-upgrade'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}, + 'Volume': {'additionalProperties': False, + 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', 'info'], + 'type': 'object'}, + 'VolumeAttachmentInfo': {'additionalProperties': False, + 'properties': {'bus-address': {'type': 'string'}, + 'device-link': {'type': 'string'}, + 'device-name': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'type': 'object'}, + 'VolumeAttachmentParams': {'additionalProperties': False, + 'properties': {'instance-id': {'type': 'string'}, + 'machine-tag': {'type': 'string'}, + 'provider': {'type': 'string'}, + 'read-only': {'type': 'boolean'}, + 'volume-id': {'type': 'string'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', + 'machine-tag', + 'provider'], + 'type': 'object'}, + 'VolumeInfo': {'additionalProperties': False, + 'properties': {'hardware-id': {'type': 'string'}, + 'persistent': {'type': 'boolean'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'volume-id': {'type': 'string'}, + 'wwn': {'type': 'string'}}, + 'required': ['volume-id', 'size', 'persistent'], + 'type': 'object'}, + 'VolumeParams': {'additionalProperties': False, + 'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'}, + 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'provider': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'tags': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', + 'size', + 'provider'], + 'type': 'object'}, + 'WatchContainer': {'additionalProperties': False, + 'properties': {'container-type': {'type': 'string'}, + 'machine-tag': {'type': 'string'}}, + 'required': ['machine-tag', + 'container-type'], + 'type': 'object'}, + 'WatchContainers': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/WatchContainer'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}}, + 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, + 'type': 'object'}, + 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, + 'type': 'object'}, + 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, + 'type': 'object'}, + 'Constraints': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ConstraintsResults'}}, + 'type': 'object'}, + 'ContainerConfig': {'properties': {'Result': {'$ref': '#/definitions/ContainerConfig'}}, + 'type': 'object'}, + 'ContainerManagerConfig': {'properties': {'Params': {'$ref': '#/definitions/ContainerManagerConfigParams'}, + 'Result': {'$ref': '#/definitions/ContainerManagerConfig'}}, + 'type': 'object'}, + 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, + 'type': 'object'}, + 'DistributionGroup': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DistributionGroupResults'}}, + 'type': 'object'}, + 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'}, + 'Result': {'$ref': '#/definitions/FindToolsResult'}}, + 'type': 'object'}, + 'GetContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}}, + 'type': 'object'}, + 'HostChangesForContainers': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/HostNetworkChangeResults'}}, + 'type': 'object'}, + 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'InstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'MachinesWithTransientErrors': {'properties': {'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'MarkMachinesForRemoval': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'PrepareContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}}, + 'type': 'object'}, + 'ProvisioningInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ProvisioningInfoResults'}}, + 'type': 'object'}, + 'ReleaseContainerAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Series': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'SetHostMachineNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, + 'type': 'object'}, + 'SetInstanceInfo': {'properties': {'Params': {'$ref': '#/definitions/InstancesInfo'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetInstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, + 'type': 'object'}, + 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetSupportedContainers': {'properties': {'Params': {'$ref': '#/definitions/MachineContainersParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'StateAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, + 'type': 'object'}, + 'Status': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'Tools': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ToolsResults'}}, + 'type': 'object'}, + 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchAllContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchMachineErrorRetry': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(StringsResult) + async def APIAddresses(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='APIAddresses', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='APIAddresses', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(APIHostPortsResult) + async def APIHostPorts(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ Returns -> typing.Sequence[~HostPort] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='APIHostPorts', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='APIHostPorts', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BytesResult) + async def CACert(self): + ''' + - Returns -> typing.Sequence<+T_co>[int] ++ Returns -> typing.Sequence[int] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='CACert', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='CACert', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ConstraintsResults) + async def Constraints(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConstraintsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Constraints', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Constraints', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ContainerConfig) + async def ContainerConfig(self): + ''' + - Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), _ForwardRef('Settings'), bool] ++ Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), bool] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ContainerConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ContainerConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ContainerManagerConfig) + async def ContainerManagerConfig(self, type_): + ''' + type_ : str - Returns -> typing.Mapping<~KT, +VT_co>[str, str] ++ Returns -> typing.Mapping[str, str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ContainerManagerConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ContainerManagerConfig', ++ version=3, ++ params=_params) + _params['type'] = type_ + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ControllerConfigResult) + async def ControllerConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ControllerConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ControllerConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DistributionGroupResults) + async def DistributionGroup(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DistributionGroupResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='DistributionGroup', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='DistributionGroup', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnsureDead(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='EnsureDead', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='EnsureDead', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FindToolsResult) + async def FindTools(self, arch, major, minor, number, series): + ''' + arch : str + major : int + minor : int + number : Number + series : str - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>] ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='FindTools', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='FindTools', ++ version=3, ++ params=_params) + _params['arch'] = arch + _params['major'] = major + _params['minor'] = minor + _params['number'] = number + _params['series'] = series + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachineNetworkConfigResults) + async def GetContainerInterfaceInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineNetworkConfigResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='GetContainerInterfaceInfo', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='GetContainerInterfaceInfo', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(HostNetworkChangeResults) + async def HostChangesForContainers(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~HostNetworkChange] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='HostChangesForContainers', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='HostChangesForContainers', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def InstanceId(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='InstanceId', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='InstanceId', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def InstanceStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='InstanceStatus', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='InstanceStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Life', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Life', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def MachinesWithTransientErrors(self): + ''' + - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='MachinesWithTransientErrors', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='MachinesWithTransientErrors', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def MarkMachinesForRemoval(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='MarkMachinesForRemoval', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='MarkMachinesForRemoval', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ModelConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ModelConfig', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def ModelUUID(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ModelUUID', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ModelUUID', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachineNetworkConfigResults) + async def PrepareContainerInterfaceInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineNetworkConfigResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='PrepareContainerInterfaceInfo', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='PrepareContainerInterfaceInfo', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ProvisioningInfoResults) + async def ProvisioningInfo(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProvisioningInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ProvisioningInfo', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ProvisioningInfo', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ReleaseContainerAddresses(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='ReleaseContainerAddresses', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='ReleaseContainerAddresses', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Remove(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Remove', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Remove', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def Series(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Series', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Series', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetHostMachineNetworkConfig(self, config, tag): + ''' - config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ config : typing.Sequence[~NetworkConfig] + tag : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetHostMachineNetworkConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetHostMachineNetworkConfig', ++ version=3, ++ params=_params) + _params['config'] = config + _params['tag'] = tag + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetInstanceInfo(self, machines): + ''' - machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ machines : typing.Sequence[~InstanceInfo] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetInstanceInfo', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetInstanceInfo', ++ version=3, ++ params=_params) + _params['machines'] = machines + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetInstanceStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetInstanceStatus', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetInstanceStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetObservedNetworkConfig(self, config, tag): + ''' - config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ config : typing.Sequence[~NetworkConfig] + tag : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetObservedNetworkConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetObservedNetworkConfig', ++ version=3, ++ params=_params) + _params['config'] = config + _params['tag'] = tag + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetPasswords(self, changes): + ''' - changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetPasswords', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetPasswords', ++ version=3, ++ params=_params) + _params['changes'] = changes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetProviderNetworkConfig(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetProviderNetworkConfig', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetProviderNetworkConfig', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetStatus', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetSupportedContainers(self, params): + ''' - params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~MachineContainers] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='SetSupportedContainers', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='SetSupportedContainers', ++ version=3, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsResult) + async def StateAddresses(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='StateAddresses', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='StateAddresses', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def Status(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Status', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Status', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ToolsResults) + async def Tools(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ToolsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='Tools', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='Tools', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def UpdateStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='UpdateStatus', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='UpdateStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchAPIHostPorts(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchAPIHostPorts', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchAPIHostPorts', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchAllContainers(self, params): + ''' - params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ params : typing.Sequence[~WatchContainer] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchAllContainers', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchAllContainers', ++ version=3, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchContainers(self, params): + ''' - params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ params : typing.Sequence[~WatchContainer] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchContainers', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchContainers', ++ version=3, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchForModelConfigChanges', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchForModelConfigChanges', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchMachineErrorRetry(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchMachineErrorRetry', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchMachineErrorRetry', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResult) + async def WatchModelMachines(self): + ''' + - Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')] ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Provisioner', request='WatchModelMachines', version=3, params=_params) ++ msg = dict(type='Provisioner', ++ request='WatchModelMachines', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class SpacesFacade(Type): + name = 'Spaces' + version = 3 + schema = {'definitions': {'CreateSpaceParams': {'additionalProperties': False, + 'properties': {'provider-id': {'type': 'string'}, + 'public': {'type': 'boolean'}, + 'space-tag': {'type': 'string'}, + 'subnet-tags': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['subnet-tags', + 'space-tag', + 'public'], + 'type': 'object'}, + 'CreateSpacesParams': {'additionalProperties': False, + 'properties': {'spaces': {'items': {'$ref': '#/definitions/CreateSpaceParams'}, + 'type': 'array'}}, + 'required': ['spaces'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'ListSpacesResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/Space'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Space': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'subnets': {'items': {'$ref': '#/definitions/Subnet'}, + 'type': 'array'}}, + 'required': ['name', 'subnets'], + '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'}}, + 'properties': {'CreateSpaces': {'properties': {'Params': {'$ref': '#/definitions/CreateSpacesParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ListSpaces': {'properties': {'Result': {'$ref': '#/definitions/ListSpacesResults'}}, + 'type': 'object'}, + 'ReloadSpaces': {'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def CreateSpaces(self, spaces): + ''' - spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ spaces : typing.Sequence[~CreateSpaceParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Spaces', request='CreateSpaces', version=3, params=_params) ++ msg = dict(type='Spaces', ++ request='CreateSpaces', ++ version=3, ++ params=_params) + _params['spaces'] = spaces + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ListSpacesResults) + async def ListSpaces(self): + ''' + - Returns -> typing.Sequence<+T_co>[~Space]<~Space> ++ Returns -> typing.Sequence[~Space] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Spaces', request='ListSpaces', version=3, params=_params) ++ msg = dict(type='Spaces', ++ request='ListSpaces', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def ReloadSpaces(self): + ''' + + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Spaces', request='ReloadSpaces', version=3, params=_params) ++ msg = dict(type='Spaces', ++ request='ReloadSpaces', ++ version=3, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + +class StorageFacade(Type): + name = 'Storage' + version = 3 + 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'}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'FilesystemAttachmentDetails': {'additionalProperties': False, + 'properties': {'FilesystemAttachmentInfo': {'$ref': '#/definitions/FilesystemAttachmentInfo'}, + 'life': {'type': 'string'}}, + 'required': ['FilesystemAttachmentInfo'], + 'type': 'object'}, + 'FilesystemAttachmentInfo': {'additionalProperties': False, + 'properties': {'mount-point': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'type': 'object'}, + 'FilesystemDetails': {'additionalProperties': False, + 'properties': {'filesystem-tag': {'type': 'string'}, + 'info': {'$ref': '#/definitions/FilesystemInfo'}, + 'life': {'type': 'string'}, + 'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/FilesystemAttachmentDetails'}}, + 'type': 'object'}, + 'status': {'$ref': '#/definitions/EntityStatus'}, + 'storage': {'$ref': '#/definitions/StorageDetails'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['filesystem-tag', + 'info', + 'status'], + 'type': 'object'}, + 'FilesystemDetailsListResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'$ref': '#/definitions/FilesystemDetails'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemDetailsListResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemDetailsListResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemFilter': {'additionalProperties': False, + 'properties': {'machines': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemFilters': {'additionalProperties': False, + 'properties': {'filters': {'items': {'$ref': '#/definitions/FilesystemFilter'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemInfo': {'additionalProperties': False, + 'properties': {'filesystem-id': {'type': 'string'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'required': ['filesystem-id', + 'pool', + 'size'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'StorageAddParams': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'storage': {'$ref': '#/definitions/StorageConstraints'}, + 'unit': {'type': 'string'}}, + 'required': ['unit', 'name', 'storage'], + 'type': 'object'}, + 'StorageAttachmentDetails': {'additionalProperties': False, + 'properties': {'life': {'type': 'string'}, + 'location': {'type': 'string'}, + 'machine-tag': {'type': 'string'}, + 'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'unit-tag', + 'machine-tag'], + 'type': 'object'}, + 'StorageAttachmentId': {'additionalProperties': False, + 'properties': {'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'unit-tag'], + 'type': 'object'}, + 'StorageAttachmentIds': {'additionalProperties': False, + 'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'}, + 'type': 'array'}}, + 'required': ['ids'], + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StorageDetails': {'additionalProperties': False, + 'properties': {'attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageAttachmentDetails'}}, + 'type': 'object'}, + 'kind': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'persistent': {'type': 'boolean'}, + 'status': {'$ref': '#/definitions/EntityStatus'}, + 'storage-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'owner-tag', + 'kind', + 'status', + 'persistent'], + 'type': 'object'}, + 'StorageDetailsListResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'$ref': '#/definitions/StorageDetails'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageDetailsListResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsListResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageDetailsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/StorageDetails'}}, + 'type': 'object'}, + 'StorageDetailsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageFilter': {'additionalProperties': False, + 'type': 'object'}, + 'StorageFilters': {'additionalProperties': False, + 'properties': {'filters': {'items': {'$ref': '#/definitions/StorageFilter'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StoragePool': {'additionalProperties': False, + 'properties': {'attrs': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'name': {'type': 'string'}, + 'provider': {'type': 'string'}}, + 'required': ['name', 'provider', 'attrs'], + 'type': 'object'}, + 'StoragePoolFilter': {'additionalProperties': False, + 'properties': {'names': {'items': {'type': 'string'}, + 'type': 'array'}, + 'providers': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StoragePoolFilters': {'additionalProperties': False, + 'properties': {'filters': {'items': {'$ref': '#/definitions/StoragePoolFilter'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StoragePoolsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'storage-pools': {'items': {'$ref': '#/definitions/StoragePool'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StoragePoolsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StoragePoolsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StoragesAddParams': {'additionalProperties': False, + 'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'}, + 'type': 'array'}}, + 'required': ['storages'], + 'type': 'object'}, + 'VolumeAttachmentDetails': {'additionalProperties': False, + 'properties': {'VolumeAttachmentInfo': {'$ref': '#/definitions/VolumeAttachmentInfo'}, + 'life': {'type': 'string'}}, + 'required': ['VolumeAttachmentInfo'], + 'type': 'object'}, + 'VolumeAttachmentInfo': {'additionalProperties': False, + 'properties': {'bus-address': {'type': 'string'}, + 'device-link': {'type': 'string'}, + 'device-name': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'type': 'object'}, + 'VolumeDetails': {'additionalProperties': False, + 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, + 'life': {'type': 'string'}, + 'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentDetails'}}, + 'type': 'object'}, + 'status': {'$ref': '#/definitions/EntityStatus'}, + 'storage': {'$ref': '#/definitions/StorageDetails'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', 'info', 'status'], + 'type': 'object'}, + 'VolumeDetailsListResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'$ref': '#/definitions/VolumeDetails'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeDetailsListResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeDetailsListResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeFilter': {'additionalProperties': False, + 'properties': {'machines': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeFilters': {'additionalProperties': False, + 'properties': {'filters': {'items': {'$ref': '#/definitions/VolumeFilter'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeInfo': {'additionalProperties': False, + 'properties': {'hardware-id': {'type': 'string'}, + 'persistent': {'type': 'boolean'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'volume-id': {'type': 'string'}, + 'wwn': {'type': 'string'}}, + 'required': ['volume-id', 'size', 'persistent'], + 'type': 'object'}}, + 'properties': {'AddToUnit': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Attach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'CreatePool': {'properties': {'Params': {'$ref': '#/definitions/StoragePool'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Detach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ListFilesystems': {'properties': {'Params': {'$ref': '#/definitions/FilesystemFilters'}, + 'Result': {'$ref': '#/definitions/FilesystemDetailsListResults'}}, + 'type': 'object'}, + 'ListPools': {'properties': {'Params': {'$ref': '#/definitions/StoragePoolFilters'}, + 'Result': {'$ref': '#/definitions/StoragePoolsResults'}}, + 'type': 'object'}, + 'ListStorageDetails': {'properties': {'Params': {'$ref': '#/definitions/StorageFilters'}, + 'Result': {'$ref': '#/definitions/StorageDetailsListResults'}}, + 'type': 'object'}, + 'ListVolumes': {'properties': {'Params': {'$ref': '#/definitions/VolumeFilters'}, + 'Result': {'$ref': '#/definitions/VolumeDetailsListResults'}}, + 'type': 'object'}, + 'StorageDetails': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StorageDetailsResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(ErrorResults) + async def AddToUnit(self, storages): + ''' - storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ storages : typing.Sequence[~StorageAddParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='AddToUnit', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='AddToUnit', ++ version=3, ++ params=_params) + _params['storages'] = storages + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Attach(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='Attach', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='Attach', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def CreatePool(self, attrs, name, provider): + ''' - attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ attrs : typing.Mapping[str, typing.Any] + name : str + provider : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='CreatePool', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='CreatePool', ++ version=3, ++ params=_params) + _params['attrs'] = attrs + _params['name'] = name + _params['provider'] = provider + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Destroy(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='Destroy', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='Destroy', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Detach(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='Detach', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='Detach', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FilesystemDetailsListResults) + async def ListFilesystems(self, filters): + ''' - filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter> - Returns -> typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult> ++ filters : typing.Sequence[~FilesystemFilter] ++ Returns -> typing.Sequence[~FilesystemDetailsListResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='ListFilesystems', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='ListFilesystems', ++ version=3, ++ params=_params) + _params['filters'] = filters + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StoragePoolsResults) + async def ListPools(self, filters): + ''' - filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter> - Returns -> typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult> ++ filters : typing.Sequence[~StoragePoolFilter] ++ Returns -> typing.Sequence[~StoragePoolsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='ListPools', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='ListPools', ++ version=3, ++ params=_params) + _params['filters'] = filters + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageDetailsListResults) + async def ListStorageDetails(self, filters): + ''' - filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter> - Returns -> typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult> ++ filters : typing.Sequence[~StorageFilter] ++ Returns -> typing.Sequence[~StorageDetailsListResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='ListStorageDetails', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='ListStorageDetails', ++ version=3, ++ params=_params) + _params['filters'] = filters + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(VolumeDetailsListResults) + async def ListVolumes(self, filters): + ''' - filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter> - Returns -> typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult> ++ filters : typing.Sequence[~VolumeFilter] ++ Returns -> typing.Sequence[~VolumeDetailsListResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='ListVolumes', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='ListVolumes', ++ version=3, ++ params=_params) + _params['filters'] = filters + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageDetailsResults) + async def StorageDetails(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StorageDetailsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Storage', request='StorageDetails', version=3, params=_params) ++ msg = dict(type='Storage', ++ request='StorageDetails', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + +class StorageProvisionerFacade(Type): + name = 'StorageProvisioner' + version = 3 + 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'}, + 'Size': {'type': 'integer'}, + 'UUID': {'type': 'string'}, + 'WWN': {'type': 'string'}}, + 'required': ['DeviceName', + 'DeviceLinks', + 'Label', + 'UUID', + 'HardwareId', + 'WWN', + 'BusAddress', + 'Size', + 'FilesystemType', + 'InUse', + 'MountPoint'], + 'type': 'object'}, + 'BlockDeviceResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/BlockDevice'}}, + 'required': ['result'], + 'type': 'object'}, + 'BlockDeviceResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/BlockDeviceResult'}, + 'type': 'array'}}, + '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'}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'Filesystem': {'additionalProperties': False, + 'properties': {'filesystem-tag': {'type': 'string'}, + 'info': {'$ref': '#/definitions/FilesystemInfo'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['filesystem-tag', 'info'], + 'type': 'object'}, + 'FilesystemAttachment': {'additionalProperties': False, + 'properties': {'filesystem-tag': {'type': 'string'}, + 'info': {'$ref': '#/definitions/FilesystemAttachmentInfo'}, + 'machine-tag': {'type': 'string'}}, + 'required': ['filesystem-tag', + 'machine-tag', + 'info'], + 'type': 'object'}, + 'FilesystemAttachmentInfo': {'additionalProperties': False, + 'properties': {'mount-point': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'type': 'object'}, + 'FilesystemAttachmentParams': {'additionalProperties': False, + 'properties': {'filesystem-id': {'type': 'string'}, + 'filesystem-tag': {'type': 'string'}, + 'instance-id': {'type': 'string'}, + 'machine-tag': {'type': 'string'}, + 'mount-point': {'type': 'string'}, + 'provider': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'required': ['filesystem-tag', + 'machine-tag', + 'provider'], + 'type': 'object'}, + 'FilesystemAttachmentParamsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/FilesystemAttachmentParams'}}, + 'required': ['result'], + 'type': 'object'}, + 'FilesystemAttachmentParamsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentParamsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemAttachmentResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/FilesystemAttachment'}}, + 'required': ['result'], + 'type': 'object'}, + 'FilesystemAttachmentResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemAttachments': {'additionalProperties': False, + 'properties': {'filesystem-attachments': {'items': {'$ref': '#/definitions/FilesystemAttachment'}, + 'type': 'array'}}, + 'required': ['filesystem-attachments'], + 'type': 'object'}, + 'FilesystemInfo': {'additionalProperties': False, + 'properties': {'filesystem-id': {'type': 'string'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'required': ['filesystem-id', + 'pool', + 'size'], + 'type': 'object'}, + 'FilesystemParams': {'additionalProperties': False, + 'properties': {'attachment': {'$ref': '#/definitions/FilesystemAttachmentParams'}, + 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'filesystem-tag': {'type': 'string'}, + 'provider': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'tags': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['filesystem-tag', + 'size', + 'provider'], + 'type': 'object'}, + 'FilesystemParamsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/FilesystemParams'}}, + 'required': ['result'], + 'type': 'object'}, + 'FilesystemParamsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemParamsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'FilesystemResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/Filesystem'}}, + 'required': ['result'], + 'type': 'object'}, + 'FilesystemResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'Filesystems': {'additionalProperties': False, + 'properties': {'filesystems': {'items': {'$ref': '#/definitions/Filesystem'}, + 'type': 'array'}}, + 'required': ['filesystems'], + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachineStorageId': {'additionalProperties': False, + 'properties': {'attachment-tag': {'type': 'string'}, + 'machine-tag': {'type': 'string'}}, + 'required': ['machine-tag', + 'attachment-tag'], + 'type': 'object'}, + 'MachineStorageIds': {'additionalProperties': False, + 'properties': {'ids': {'items': {'$ref': '#/definitions/MachineStorageId'}, + 'type': 'array'}}, + 'required': ['ids'], + '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'}, + 'MachineStorageIdsWatchResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}, + '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'}, + 'Volume': {'additionalProperties': False, + 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', 'info'], + 'type': 'object'}, + 'VolumeAttachment': {'additionalProperties': False, + 'properties': {'info': {'$ref': '#/definitions/VolumeAttachmentInfo'}, + 'machine-tag': {'type': 'string'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', + 'machine-tag', + 'info'], + 'type': 'object'}, + 'VolumeAttachmentInfo': {'additionalProperties': False, + 'properties': {'bus-address': {'type': 'string'}, + 'device-link': {'type': 'string'}, + 'device-name': {'type': 'string'}, + 'read-only': {'type': 'boolean'}}, + 'type': 'object'}, + 'VolumeAttachmentParams': {'additionalProperties': False, + 'properties': {'instance-id': {'type': 'string'}, + 'machine-tag': {'type': 'string'}, + 'provider': {'type': 'string'}, + 'read-only': {'type': 'boolean'}, + 'volume-id': {'type': 'string'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', + 'machine-tag', + 'provider'], + 'type': 'object'}, + 'VolumeAttachmentParamsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/VolumeAttachmentParams'}}, + 'required': ['result'], + 'type': 'object'}, + 'VolumeAttachmentParamsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentParamsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeAttachmentResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/VolumeAttachment'}}, + 'required': ['result'], + 'type': 'object'}, + 'VolumeAttachmentResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeAttachments': {'additionalProperties': False, + 'properties': {'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachment'}, + 'type': 'array'}}, + 'required': ['volume-attachments'], + 'type': 'object'}, + 'VolumeInfo': {'additionalProperties': False, + 'properties': {'hardware-id': {'type': 'string'}, + 'persistent': {'type': 'boolean'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'volume-id': {'type': 'string'}, + 'wwn': {'type': 'string'}}, + 'required': ['volume-id', 'size', 'persistent'], + 'type': 'object'}, + 'VolumeParams': {'additionalProperties': False, + 'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'}, + 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'provider': {'type': 'string'}, + 'size': {'type': 'integer'}, + 'tags': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'volume-tag': {'type': 'string'}}, + 'required': ['volume-tag', + 'size', + 'provider'], + 'type': 'object'}, + 'VolumeParamsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/VolumeParams'}}, + 'required': ['result'], + 'type': 'object'}, + 'VolumeParamsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeParamsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'VolumeResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/Volume'}}, + 'required': ['result'], + 'type': 'object'}, + 'VolumeResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'Volumes': {'additionalProperties': False, + 'properties': {'volumes': {'items': {'$ref': '#/definitions/Volume'}, + 'type': 'array'}}, + 'required': ['volumes'], + 'type': 'object'}}, + 'properties': {'AttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'FilesystemAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/FilesystemAttachmentParamsResults'}}, + 'type': 'object'}, + 'FilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/FilesystemAttachmentResults'}}, + 'type': 'object'}, + 'FilesystemParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/FilesystemParamsResults'}}, + 'type': 'object'}, + 'Filesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/FilesystemResults'}}, + 'type': 'object'}, + 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'RemoveAttachment': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetFilesystemAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/FilesystemAttachments'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetFilesystemInfo': {'properties': {'Params': {'$ref': '#/definitions/Filesystems'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetVolumeAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/VolumeAttachments'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetVolumeInfo': {'properties': {'Params': {'$ref': '#/definitions/Volumes'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'VolumeAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/VolumeAttachmentParamsResults'}}, + 'type': 'object'}, + 'VolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/VolumeAttachmentResults'}}, + 'type': 'object'}, + 'VolumeBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, + 'Result': {'$ref': '#/definitions/BlockDeviceResults'}}, + 'type': 'object'}, + 'VolumeParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/VolumeParamsResults'}}, + 'type': 'object'}, + 'Volumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/VolumeResults'}}, + 'type': 'object'}, + 'WatchBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchFilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}}, + 'type': 'object'}, + 'WatchFilesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchMachines': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchVolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}}, + 'type': 'object'}, + 'WatchVolumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(LifeResults) + async def AttachmentLife(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='AttachmentLife', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='AttachmentLife', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnsureDead(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='EnsureDead', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='EnsureDead', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FilesystemAttachmentParamsResults) + async def FilesystemAttachmentParams(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~FilesystemAttachmentParamsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='FilesystemAttachmentParams', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemAttachmentParams', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FilesystemAttachmentResults) + async def FilesystemAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~FilesystemAttachmentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='FilesystemAttachments', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemAttachments', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FilesystemParamsResults) + async def FilesystemParams(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~FilesystemParamsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='FilesystemParams', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemParams', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(FilesystemResults) + async def Filesystems(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~FilesystemResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='Filesystems', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='Filesystems', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def InstanceId(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='InstanceId', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='InstanceId', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='Life', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='Life', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Remove(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='Remove', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='Remove', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RemoveAttachment(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='RemoveAttachment', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='RemoveAttachment', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetFilesystemAttachmentInfo(self, filesystem_attachments): + ''' - filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ filesystem_attachments : typing.Sequence[~FilesystemAttachment] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='SetFilesystemAttachmentInfo', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='SetFilesystemAttachmentInfo', ++ version=3, ++ params=_params) + _params['filesystem-attachments'] = filesystem_attachments + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetFilesystemInfo(self, filesystems): + ''' - filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ filesystems : typing.Sequence[~Filesystem] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='SetFilesystemInfo', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='SetFilesystemInfo', ++ version=3, ++ params=_params) + _params['filesystems'] = filesystems + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='SetStatus', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='SetStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetVolumeAttachmentInfo(self, volume_attachments): + ''' - volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ volume_attachments : typing.Sequence[~VolumeAttachment] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='SetVolumeAttachmentInfo', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='SetVolumeAttachmentInfo', ++ version=3, ++ params=_params) + _params['volume-attachments'] = volume_attachments + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetVolumeInfo(self, volumes): + ''' - volumes : typing.Sequence<+T_co>[~Volume]<~Volume> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ volumes : typing.Sequence[~Volume] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='SetVolumeInfo', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='SetVolumeInfo', ++ version=3, ++ params=_params) + _params['volumes'] = volumes + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def UpdateStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='UpdateStatus', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='UpdateStatus', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(VolumeAttachmentParamsResults) + async def VolumeAttachmentParams(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~VolumeAttachmentParamsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='VolumeAttachmentParams', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='VolumeAttachmentParams', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(VolumeAttachmentResults) + async def VolumeAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~VolumeAttachmentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='VolumeAttachments', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='VolumeAttachments', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BlockDeviceResults) + async def VolumeBlockDevices(self, ids): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> - Returns -> typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult> ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~BlockDeviceResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='VolumeBlockDevices', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='VolumeBlockDevices', ++ version=3, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(VolumeParamsResults) + async def VolumeParams(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~VolumeParamsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='VolumeParams', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='VolumeParams', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(VolumeResults) + async def Volumes(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~VolumeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='Volumes', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='Volumes', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchBlockDevices(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchBlockDevices', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchBlockDevices', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachineStorageIdsWatchResults) + async def WatchFilesystemAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchFilesystemAttachments', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchFilesystemAttachments', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchFilesystems(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchFilesystems', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchFilesystems', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchMachines(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchMachines', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchMachines', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachineStorageIdsWatchResults) + async def WatchVolumeAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchVolumeAttachments', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchVolumeAttachments', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchVolumes(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='StorageProvisioner', request='WatchVolumes', version=3, params=_params) ++ msg = dict(type='StorageProvisioner', ++ request='WatchVolumes', ++ version=3, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply diff --cc modules/libjuju/juju/client/_client4.py index 9c47561,0000000..2336d2c mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client4.py +++ b/modules/libjuju/juju/client/_client4.py @@@ -1,2669 -1,0 +1,4626 @@@ +# 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._definitions import * +from juju.client.facade import ReturnMapping, Type + + +class ApplicationFacade(Type): + name = 'Application' + version = 4 + schema = {'definitions': {'AddApplicationUnits': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}}, + 'required': ['application', + 'num-units', + 'placement'], + 'type': 'object'}, + 'AddApplicationUnitsResults': {'additionalProperties': False, + 'properties': {'units': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['units'], + 'type': 'object'}, + 'AddRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'AddRelationResults': {'additionalProperties': False, + 'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}}, + 'type': 'object'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'ApplicationCharmRelations': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationCharmRelationsResults': {'additionalProperties': False, + 'properties': {'charm-relations': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['charm-relations'], + 'type': 'object'}, + 'ApplicationDeploy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-yaml': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}, + 'resources': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'series': {'type': 'string'}, + 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'series', + 'charm-url', + 'channel', + 'num-units', + 'config-yaml', + 'constraints'], + 'type': 'object'}, + 'ApplicationDestroy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationExpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGetResults': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'series': {'type': 'string'}}, + 'required': ['application', + 'charm', + 'config', + 'constraints', + 'series'], + 'type': 'object'}, + 'ApplicationMetricCredential': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'metrics-credentials': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['application', + 'metrics-credentials'], + 'type': 'object'}, + 'ApplicationMetricCredentials': {'additionalProperties': False, + 'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'}, + 'type': 'array'}}, + 'required': ['creds'], + 'type': 'object'}, + 'ApplicationSet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationSetCharm': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config-settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-settings-yaml': {'type': 'string'}, + 'force-series': {'type': 'boolean'}, + 'force-units': {'type': 'boolean'}, + 'resource-ids': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'charm-url', + 'channel', + 'force-units', + 'force-series'], + 'type': 'object'}, + 'ApplicationURLs': {'additionalProperties': False, + 'properties': {'application-urls': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ApplicationUnexpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationUnset': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationUpdate': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'force-charm-url': {'type': 'boolean'}, + 'force-series': {'type': 'boolean'}, + 'min-units': {'type': 'integer'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'settings-yaml': {'type': 'string'}}, + 'required': ['application', + 'charm-url', + 'force-charm-url', + 'force-series', + 'settings-yaml'], + 'type': 'object'}, + 'ApplicationsDeploy': {'additionalProperties': False, + 'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'}, + 'type': 'array'}}, + 'required': ['applications'], + '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'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'ConsumeApplicationArg': {'additionalProperties': False, + 'properties': {'application-alias': {'type': 'string'}, + 'application-url': {'type': 'string'}}, + 'required': ['application-url'], + 'type': 'object'}, + 'ConsumeApplicationArgs': {'additionalProperties': False, + 'properties': {'args': {'items': {'$ref': '#/definitions/ConsumeApplicationArg'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ConsumeApplicationResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'local-name': {'type': 'string'}}, + 'type': 'object'}, + 'ConsumeApplicationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ConsumeApplicationResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'DestroyApplicationInfo': {'additionalProperties': False, + 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'destroyed-units': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyApplicationResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'$ref': '#/definitions/DestroyApplicationInfo'}}, + 'type': 'object'}, + 'DestroyApplicationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyApplicationResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyApplicationUnits': {'additionalProperties': False, + 'properties': {'unit-names': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['unit-names'], + 'type': 'object'}, + 'DestroyRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'DestroyUnitInfo': {'additionalProperties': False, + 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyUnitResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'$ref': '#/definitions/DestroyUnitInfo'}}, + 'type': 'object'}, + 'DestroyUnitResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyUnitResult'}, + 'type': 'array'}}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetApplicationConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'GetConstraintsResults': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'RemoteApplicationInfo': {'additionalProperties': False, + 'properties': {'application-url': {'type': 'string'}, + 'description': {'type': 'string'}, + 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, + 'type': 'array'}, + 'icon-url-path': {'type': 'string'}, + 'model-tag': {'type': 'string'}, + 'name': {'type': 'string'}, + 'source-model-label': {'type': 'string'}}, + 'required': ['model-tag', + 'name', + 'description', + 'application-url', + 'endpoints', + 'icon-url-path'], + 'type': 'object'}, + 'RemoteApplicationInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/RemoteApplicationInfo'}}, + 'type': 'object'}, + 'RemoteApplicationInfoResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationInfoResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'RemoteEndpoint': {'additionalProperties': False, + 'properties': {'interface': {'type': 'string'}, + 'limit': {'type': 'integer'}, + 'name': {'type': 'string'}, + 'role': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['name', + 'role', + 'interface', + 'limit', + 'scope'], + 'type': 'object'}, + 'SetConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['application', 'constraints'], + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StringResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'type': 'string'}}, + 'required': ['result'], + 'type': 'object'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, + 'Result': {'$ref': '#/definitions/AddRelationResults'}}, + 'type': 'object'}, + 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, + 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, + 'type': 'object'}, + 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, + 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, + 'type': 'object'}, + 'Consume': {'properties': {'Params': {'$ref': '#/definitions/ConsumeApplicationArgs'}, + 'Result': {'$ref': '#/definitions/ConsumeApplicationResults'}}, + 'type': 'object'}, + 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, + 'type': 'object'}, + 'DestroyApplication': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyApplicationResults'}}, + 'type': 'object'}, + 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, + 'type': 'object'}, + 'DestroyUnit': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyUnitResults'}}, + 'type': 'object'}, + 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, + 'type': 'object'}, + 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, + 'type': 'object'}, + 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, + 'type': 'object'}, + 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'}, + 'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, + 'type': 'object'}, + 'RemoteApplicationInfo': {'properties': {'Params': {'$ref': '#/definitions/ApplicationURLs'}, + 'Result': {'$ref': '#/definitions/RemoteApplicationInfoResults'}}, + 'type': 'object'}, + 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, + 'type': 'object'}, + 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, + 'type': 'object'}, + 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, + 'type': 'object'}, + 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, + 'type': 'object'}, + 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, + 'type': 'object'}, + 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AddRelationResults) + async def AddRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] - Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> ++ endpoints : typing.Sequence[str] ++ Returns -> typing.Mapping[str, ~CharmRelation] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddRelation', version=4, params=_params) ++ msg = dict(type='Application', ++ request='AddRelation', ++ version=4, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(AddApplicationUnitsResults) + async def AddUnits(self, application, num_units, placement): + ''' + application : str + num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> - Returns -> typing.Sequence<+T_co>[str] ++ placement : typing.Sequence[~Placement] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddUnits', version=4, params=_params) ++ msg = dict(type='Application', ++ request='AddUnits', ++ version=4, ++ params=_params) + _params['application'] = application + _params['num-units'] = num_units + _params['placement'] = placement + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationCharmRelationsResults) + async def CharmRelations(self, application): + ''' + application : str - Returns -> typing.Sequence<+T_co>[str] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='CharmRelations', version=4, params=_params) ++ msg = dict(type='Application', ++ request='CharmRelations', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ConsumeApplicationResults) + async def Consume(self, args): + ''' - args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg> - Returns -> typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult> ++ args : typing.Sequence[~ConsumeApplicationArg] ++ Returns -> typing.Sequence[~ConsumeApplicationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Consume', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Consume', ++ version=4, ++ params=_params) + _params['args'] = args + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Deploy(self, applications): + ''' - applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ applications : typing.Sequence[~ApplicationDeploy] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Deploy', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Deploy', ++ version=4, ++ params=_params) + _params['applications'] = applications + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Destroy(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Destroy', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Destroy', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyApplicationResults) + async def DestroyApplication(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyApplicationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyApplication', version=4, params=_params) ++ msg = dict(type='Application', ++ request='DestroyApplication', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] ++ endpoints : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyRelation', version=4, params=_params) ++ msg = dict(type='Application', ++ request='DestroyRelation', ++ version=4, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyUnitResults) + async def DestroyUnit(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyUnitResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnit', version=4, params=_params) ++ msg = dict(type='Application', ++ request='DestroyUnit', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyUnits(self, unit_names): + ''' - unit_names : typing.Sequence<+T_co>[str] ++ unit_names : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnits', version=4, params=_params) ++ msg = dict(type='Application', ++ request='DestroyUnits', ++ version=4, ++ params=_params) + _params['unit-names'] = unit_names + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Expose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Expose', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Expose', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationGetResults) + async def Get(self, application): + ''' + application : str - Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')] ++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Get', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Get', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def GetCharmURL(self, application): + ''' + application : str + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetCharmURL', version=4, params=_params) ++ msg = dict(type='Application', ++ request='GetCharmURL', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(GetConstraintsResults) + async def GetConstraints(self, application): + ''' + application : str + Returns -> Value + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetConstraints', version=4, params=_params) ++ msg = dict(type='Application', ++ request='GetConstraints', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RemoteApplicationInfoResults) + async def RemoteApplicationInfo(self, application_urls): + ''' - application_urls : typing.Sequence<+T_co>[str] - Returns -> typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult> ++ application_urls : typing.Sequence[str] ++ Returns -> typing.Sequence[~RemoteApplicationInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='RemoteApplicationInfo', version=4, params=_params) ++ msg = dict(type='Application', ++ request='RemoteApplicationInfo', ++ version=4, ++ params=_params) + _params['application-urls'] = application_urls + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Set(self, application, options): + ''' + application : str - options : typing.Mapping<~KT, +VT_co>[str, str] ++ options : typing.Mapping[str, str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Set', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Set', ++ version=4, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): + ''' + application : str + channel : str + charm_url : str - config_settings : typing.Mapping<~KT, +VT_co>[str, str] ++ config_settings : typing.Mapping[str, str] + config_settings_yaml : str + force_series : bool + force_units : bool - resource_ids : typing.Mapping<~KT, +VT_co>[str, str] - storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints> ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetCharm', version=4, params=_params) ++ msg = dict(type='Application', ++ request='SetCharm', ++ version=4, ++ params=_params) + _params['application'] = application + _params['channel'] = channel + _params['charm-url'] = charm_url + _params['config-settings'] = config_settings + _params['config-settings-yaml'] = config_settings_yaml + _params['force-series'] = force_series + _params['force-units'] = force_units + _params['resource-ids'] = resource_ids + _params['storage-constraints'] = storage_constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetConstraints(self, application, constraints): + ''' + application : str + constraints : Value + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetConstraints', version=4, params=_params) ++ msg = dict(type='Application', ++ request='SetConstraints', ++ version=4, ++ params=_params) + _params['application'] = application + _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetMetricCredentials(self, creds): + ''' - creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ creds : typing.Sequence[~ApplicationMetricCredential] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetMetricCredentials', version=4, params=_params) ++ msg = dict(type='Application', ++ request='SetMetricCredentials', ++ version=4, ++ params=_params) + _params['creds'] = creds + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unexpose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unexpose', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Unexpose', ++ version=4, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unset(self, application, options): + ''' + application : str - options : typing.Sequence<+T_co>[str] ++ options : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unset', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Unset', ++ version=4, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): + ''' + application : str + charm_url : str + constraints : Value + force_charm_url : bool + force_series : bool + min_units : int - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + settings_yaml : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Update', version=4, params=_params) ++ msg = dict(type='Application', ++ request='Update', ++ version=4, ++ params=_params) + _params['application'] = application + _params['charm-url'] = charm_url + _params['constraints'] = constraints + _params['force-charm-url'] = force_charm_url + _params['force-series'] = force_series + _params['min-units'] = min_units + _params['settings'] = settings + _params['settings-yaml'] = settings_yaml + reply = await self.rpc(msg) + return reply + + + ++class StorageFacade(Type): ++ name = 'Storage' ++ version = 4 ++ schema = {'definitions': {'AddStorageDetails': {'additionalProperties': False, ++ 'properties': {'storage-tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['storage-tags'], ++ 'type': 'object'}, ++ 'AddStorageResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/AddStorageDetails'}}, ++ 'type': 'object'}, ++ 'AddStorageResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/AddStorageResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'BulkImportStorageParams': {'additionalProperties': False, ++ 'properties': {'storage': {'items': {'$ref': '#/definitions/ImportStorageParams'}, ++ 'type': 'array'}}, ++ 'required': ['storage'], ++ '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'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'FilesystemAttachmentDetails': {'additionalProperties': False, ++ 'properties': {'FilesystemAttachmentInfo': {'$ref': '#/definitions/FilesystemAttachmentInfo'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['FilesystemAttachmentInfo'], ++ 'type': 'object'}, ++ 'FilesystemAttachmentInfo': {'additionalProperties': False, ++ 'properties': {'mount-point': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'FilesystemDetails': {'additionalProperties': False, ++ 'properties': {'filesystem-tag': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/FilesystemInfo'}, ++ 'life': {'type': 'string'}, ++ 'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/FilesystemAttachmentDetails'}}, ++ 'type': 'object'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'storage': {'$ref': '#/definitions/StorageDetails'}, ++ 'unit-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/FilesystemAttachmentDetails'}}, ++ 'type': 'object'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['filesystem-tag', ++ 'info', ++ 'status'], ++ 'type': 'object'}, ++ 'FilesystemDetailsListResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'$ref': '#/definitions/FilesystemDetails'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemDetailsListResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemDetailsListResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemFilter': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemFilters': {'additionalProperties': False, ++ 'properties': {'filters': {'items': {'$ref': '#/definitions/FilesystemFilter'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemInfo': {'additionalProperties': False, ++ 'properties': {'filesystem-id': {'type': 'string'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}}, ++ 'required': ['filesystem-id', ++ 'pool', ++ 'size'], ++ 'type': 'object'}, ++ 'ImportStorageDetails': {'additionalProperties': False, ++ 'properties': {'storage-tag': {'type': 'string'}}, ++ 'required': ['storage-tag'], ++ 'type': 'object'}, ++ 'ImportStorageParams': {'additionalProperties': False, ++ 'properties': {'kind': {'type': 'integer'}, ++ 'pool': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'storage-name': {'type': 'string'}}, ++ 'required': ['kind', ++ 'pool', ++ 'provider-id', ++ 'storage-name'], ++ 'type': 'object'}, ++ 'ImportStorageResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ImportStorageDetails'}}, ++ 'type': 'object'}, ++ 'ImportStorageResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ImportStorageResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'RemoveStorage': {'additionalProperties': False, ++ 'properties': {'storage': {'items': {'$ref': '#/definitions/RemoveStorageInstance'}, ++ 'type': 'array'}}, ++ 'required': ['storage'], ++ 'type': 'object'}, ++ 'RemoveStorageInstance': {'additionalProperties': False, ++ 'properties': {'destroy-attachments': {'type': 'boolean'}, ++ 'destroy-storage': {'type': 'boolean'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ 'type': 'object'}, ++ 'StorageAddParams': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'storage': {'$ref': '#/definitions/StorageConstraints'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['unit', 'name', 'storage'], ++ 'type': 'object'}, ++ 'StorageAttachmentDetails': {'additionalProperties': False, ++ 'properties': {'life': {'type': 'string'}, ++ 'location': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}, ++ 'storage-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['storage-tag', ++ 'unit-tag', ++ 'machine-tag'], ++ 'type': 'object'}, ++ 'StorageAttachmentId': {'additionalProperties': False, ++ 'properties': {'storage-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['storage-tag', ++ 'unit-tag'], ++ 'type': 'object'}, ++ 'StorageAttachmentIds': {'additionalProperties': False, ++ 'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'}, ++ 'type': 'array'}}, ++ 'required': ['ids'], ++ 'type': 'object'}, ++ 'StorageConstraints': {'additionalProperties': False, ++ 'properties': {'count': {'type': 'integer'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}}, ++ 'type': 'object'}, ++ 'StorageDetails': {'additionalProperties': False, ++ 'properties': {'attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageAttachmentDetails'}}, ++ 'type': 'object'}, ++ 'kind': {'type': 'integer'}, ++ 'life': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'persistent': {'type': 'boolean'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'storage-tag': {'type': 'string'}}, ++ 'required': ['storage-tag', ++ 'owner-tag', ++ 'kind', ++ 'status', ++ 'persistent'], ++ 'type': 'object'}, ++ 'StorageDetailsListResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'$ref': '#/definitions/StorageDetails'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StorageDetailsListResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsListResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StorageDetailsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/StorageDetails'}}, ++ 'type': 'object'}, ++ 'StorageDetailsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StorageDetailsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StorageFilter': {'additionalProperties': False, ++ 'type': 'object'}, ++ 'StorageFilters': {'additionalProperties': False, ++ 'properties': {'filters': {'items': {'$ref': '#/definitions/StorageFilter'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StoragePool': {'additionalProperties': False, ++ 'properties': {'attrs': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'name': {'type': 'string'}, ++ 'provider': {'type': 'string'}}, ++ 'required': ['name', 'provider', 'attrs'], ++ 'type': 'object'}, ++ 'StoragePoolFilter': {'additionalProperties': False, ++ 'properties': {'names': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'providers': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StoragePoolFilters': {'additionalProperties': False, ++ 'properties': {'filters': {'items': {'$ref': '#/definitions/StoragePoolFilter'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StoragePoolsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'storage-pools': {'items': {'$ref': '#/definitions/StoragePool'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StoragePoolsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StoragePoolsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StoragesAddParams': {'additionalProperties': False, ++ 'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'}, ++ 'type': 'array'}}, ++ 'required': ['storages'], ++ 'type': 'object'}, ++ 'VolumeAttachmentDetails': {'additionalProperties': False, ++ 'properties': {'VolumeAttachmentInfo': {'$ref': '#/definitions/VolumeAttachmentInfo'}, ++ 'life': {'type': 'string'}}, ++ 'required': ['VolumeAttachmentInfo'], ++ 'type': 'object'}, ++ 'VolumeAttachmentInfo': {'additionalProperties': False, ++ 'properties': {'bus-address': {'type': 'string'}, ++ 'device-link': {'type': 'string'}, ++ 'device-name': {'type': 'string'}, ++ 'plan-info': {'$ref': '#/definitions/VolumeAttachmentPlanInfo'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentPlanInfo': {'additionalProperties': False, ++ 'properties': {'device-attributes': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'device-type': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'VolumeDetails': {'additionalProperties': False, ++ 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, ++ 'life': {'type': 'string'}, ++ 'machine-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentDetails'}}, ++ 'type': 'object'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'storage': {'$ref': '#/definitions/StorageDetails'}, ++ 'unit-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentDetails'}}, ++ 'type': 'object'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', 'info', 'status'], ++ 'type': 'object'}, ++ 'VolumeDetailsListResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'$ref': '#/definitions/VolumeDetails'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeDetailsListResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeDetailsListResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeFilter': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeFilters': {'additionalProperties': False, ++ 'properties': {'filters': {'items': {'$ref': '#/definitions/VolumeFilter'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeInfo': {'additionalProperties': False, ++ 'properties': {'hardware-id': {'type': 'string'}, ++ 'persistent': {'type': 'boolean'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'volume-id': {'type': 'string'}, ++ 'wwn': {'type': 'string'}}, ++ 'required': ['volume-id', 'size', 'persistent'], ++ 'type': 'object'}}, ++ 'properties': {'AddToUnit': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'}, ++ 'Result': {'$ref': '#/definitions/AddStorageResults'}}, ++ 'type': 'object'}, ++ 'Attach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'CreatePool': {'properties': {'Params': {'$ref': '#/definitions/StoragePool'}}, ++ 'type': 'object'}, ++ 'Detach': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Import': {'properties': {'Params': {'$ref': '#/definitions/BulkImportStorageParams'}, ++ 'Result': {'$ref': '#/definitions/ImportStorageResults'}}, ++ 'type': 'object'}, ++ 'ListFilesystems': {'properties': {'Params': {'$ref': '#/definitions/FilesystemFilters'}, ++ 'Result': {'$ref': '#/definitions/FilesystemDetailsListResults'}}, ++ 'type': 'object'}, ++ 'ListPools': {'properties': {'Params': {'$ref': '#/definitions/StoragePoolFilters'}, ++ 'Result': {'$ref': '#/definitions/StoragePoolsResults'}}, ++ 'type': 'object'}, ++ 'ListStorageDetails': {'properties': {'Params': {'$ref': '#/definitions/StorageFilters'}, ++ 'Result': {'$ref': '#/definitions/StorageDetailsListResults'}}, ++ 'type': 'object'}, ++ 'ListVolumes': {'properties': {'Params': {'$ref': '#/definitions/VolumeFilters'}, ++ 'Result': {'$ref': '#/definitions/VolumeDetailsListResults'}}, ++ 'type': 'object'}, ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/RemoveStorage'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'StorageDetails': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StorageDetailsResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(AddStorageResults) ++ async def AddToUnit(self, storages): ++ ''' ++ storages : typing.Sequence[~StorageAddParams] ++ Returns -> typing.Sequence[~AddStorageResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='AddToUnit', ++ version=4, ++ params=_params) ++ _params['storages'] = storages ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Attach(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='Attach', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def CreatePool(self, attrs, name, provider): ++ ''' ++ attrs : typing.Mapping[str, typing.Any] ++ name : str ++ provider : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='CreatePool', ++ version=4, ++ params=_params) ++ _params['attrs'] = attrs ++ _params['name'] = name ++ _params['provider'] = provider ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Detach(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='Detach', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ImportStorageResults) ++ async def Import(self, storage): ++ ''' ++ storage : typing.Sequence[~ImportStorageParams] ++ Returns -> typing.Sequence[~ImportStorageResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='Import', ++ version=4, ++ params=_params) ++ _params['storage'] = storage ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FilesystemDetailsListResults) ++ async def ListFilesystems(self, filters): ++ ''' ++ filters : typing.Sequence[~FilesystemFilter] ++ Returns -> typing.Sequence[~FilesystemDetailsListResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='ListFilesystems', ++ version=4, ++ params=_params) ++ _params['filters'] = filters ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StoragePoolsResults) ++ async def ListPools(self, filters): ++ ''' ++ filters : typing.Sequence[~StoragePoolFilter] ++ Returns -> typing.Sequence[~StoragePoolsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='ListPools', ++ version=4, ++ params=_params) ++ _params['filters'] = filters ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StorageDetailsListResults) ++ async def ListStorageDetails(self, filters): ++ ''' ++ filters : typing.Sequence[~StorageFilter] ++ Returns -> typing.Sequence[~StorageDetailsListResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='ListStorageDetails', ++ version=4, ++ params=_params) ++ _params['filters'] = filters ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeDetailsListResults) ++ async def ListVolumes(self, filters): ++ ''' ++ filters : typing.Sequence[~VolumeFilter] ++ Returns -> typing.Sequence[~VolumeDetailsListResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='ListVolumes', ++ version=4, ++ params=_params) ++ _params['filters'] = filters ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, storage): ++ ''' ++ storage : typing.Sequence[~RemoveStorageInstance] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='Remove', ++ version=4, ++ params=_params) ++ _params['storage'] = storage ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StorageDetailsResults) ++ async def StorageDetails(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StorageDetailsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Storage', ++ request='StorageDetails', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class StorageProvisionerFacade(Type): ++ name = 'StorageProvisioner' ++ version = 4 ++ 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'}, ++ 'Size': {'type': 'integer'}, ++ 'UUID': {'type': 'string'}, ++ 'WWN': {'type': 'string'}}, ++ 'required': ['DeviceName', ++ 'DeviceLinks', ++ 'Label', ++ 'UUID', ++ 'HardwareId', ++ 'WWN', ++ 'BusAddress', ++ 'Size', ++ 'FilesystemType', ++ 'InUse', ++ 'MountPoint'], ++ 'type': 'object'}, ++ 'BlockDeviceResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/BlockDevice'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'BlockDeviceResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/BlockDeviceResult'}, ++ 'type': 'array'}}, ++ '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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Filesystem': {'additionalProperties': False, ++ 'properties': {'filesystem-tag': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/FilesystemInfo'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['filesystem-tag', 'info'], ++ 'type': 'object'}, ++ 'FilesystemAttachment': {'additionalProperties': False, ++ 'properties': {'filesystem-tag': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/FilesystemAttachmentInfo'}, ++ 'machine-tag': {'type': 'string'}}, ++ 'required': ['filesystem-tag', ++ 'machine-tag', ++ 'info'], ++ 'type': 'object'}, ++ 'FilesystemAttachmentInfo': {'additionalProperties': False, ++ 'properties': {'mount-point': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'FilesystemAttachmentParams': {'additionalProperties': False, ++ 'properties': {'filesystem-id': {'type': 'string'}, ++ 'filesystem-tag': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}, ++ 'mount-point': {'type': 'string'}, ++ 'provider': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'required': ['filesystem-tag', ++ 'machine-tag', ++ 'provider'], ++ 'type': 'object'}, ++ 'FilesystemAttachmentParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/FilesystemAttachmentParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'FilesystemAttachmentParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentParamsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemAttachmentResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/FilesystemAttachment'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'FilesystemAttachmentResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemAttachmentResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemAttachments': {'additionalProperties': False, ++ 'properties': {'filesystem-attachments': {'items': {'$ref': '#/definitions/FilesystemAttachment'}, ++ 'type': 'array'}}, ++ 'required': ['filesystem-attachments'], ++ 'type': 'object'}, ++ 'FilesystemInfo': {'additionalProperties': False, ++ 'properties': {'filesystem-id': {'type': 'string'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}}, ++ 'required': ['filesystem-id', ++ 'pool', ++ 'size'], ++ 'type': 'object'}, ++ 'FilesystemParams': {'additionalProperties': False, ++ 'properties': {'attachment': {'$ref': '#/definitions/FilesystemAttachmentParams'}, ++ 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'filesystem-tag': {'type': 'string'}, ++ 'provider': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'tags': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['filesystem-tag', ++ 'size', ++ 'provider'], ++ 'type': 'object'}, ++ 'FilesystemParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/FilesystemParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'FilesystemParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemParamsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'FilesystemResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/Filesystem'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'FilesystemResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/FilesystemResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Filesystems': {'additionalProperties': False, ++ 'properties': {'filesystems': {'items': {'$ref': '#/definitions/Filesystem'}, ++ 'type': 'array'}}, ++ 'required': ['filesystems'], ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineStorageId': {'additionalProperties': False, ++ 'properties': {'attachment-tag': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}}, ++ 'required': ['machine-tag', ++ 'attachment-tag'], ++ 'type': 'object'}, ++ 'MachineStorageIds': {'additionalProperties': False, ++ 'properties': {'ids': {'items': {'$ref': '#/definitions/MachineStorageId'}, ++ 'type': 'array'}}, ++ 'required': ['ids'], ++ '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'}, ++ 'MachineStorageIdsWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}, ++ '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'}, ++ 'RemoveFilesystemParams': {'additionalProperties': False, ++ 'properties': {'destroy': {'type': 'boolean'}, ++ 'filesystem-id': {'type': 'string'}, ++ 'provider': {'type': 'string'}}, ++ 'required': ['provider', ++ 'filesystem-id'], ++ 'type': 'object'}, ++ 'RemoveFilesystemParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/RemoveFilesystemParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'RemoveFilesystemParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoveFilesystemParamsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'RemoveVolumeParams': {'additionalProperties': False, ++ 'properties': {'destroy': {'type': 'boolean'}, ++ 'provider': {'type': 'string'}, ++ 'volume-id': {'type': 'string'}}, ++ 'required': ['provider', 'volume-id'], ++ 'type': 'object'}, ++ 'RemoveVolumeParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/RemoveVolumeParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'RemoveVolumeParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoveVolumeParamsResult'}, ++ 'type': 'array'}}, ++ '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'}, ++ 'Volume': {'additionalProperties': False, ++ 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', 'info'], ++ 'type': 'object'}, ++ 'VolumeAttachment': {'additionalProperties': False, ++ 'properties': {'info': {'$ref': '#/definitions/VolumeAttachmentInfo'}, ++ 'machine-tag': {'type': 'string'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'machine-tag', ++ 'info'], ++ 'type': 'object'}, ++ 'VolumeAttachmentInfo': {'additionalProperties': False, ++ 'properties': {'bus-address': {'type': 'string'}, ++ 'device-link': {'type': 'string'}, ++ 'device-name': {'type': 'string'}, ++ 'plan-info': {'$ref': '#/definitions/VolumeAttachmentPlanInfo'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentParams': {'additionalProperties': False, ++ 'properties': {'instance-id': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}, ++ 'provider': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}, ++ 'volume-id': {'type': 'string'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'machine-tag', ++ 'provider'], ++ 'type': 'object'}, ++ 'VolumeAttachmentParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/VolumeAttachmentParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'VolumeAttachmentParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentParamsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentPlan': {'additionalProperties': False, ++ 'properties': {'block-device': {'$ref': '#/definitions/BlockDevice'}, ++ 'life': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}, ++ 'plan-info': {'$ref': '#/definitions/VolumeAttachmentPlanInfo'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'machine-tag', ++ 'plan-info'], ++ 'type': 'object'}, ++ 'VolumeAttachmentPlanInfo': {'additionalProperties': False, ++ 'properties': {'device-attributes': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'device-type': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentPlanResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/VolumeAttachmentPlan'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'VolumeAttachmentPlanResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentPlanResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentPlans': {'additionalProperties': False, ++ 'properties': {'volume-plans': {'items': {'$ref': '#/definitions/VolumeAttachmentPlan'}, ++ 'type': 'array'}}, ++ 'required': ['volume-plans'], ++ 'type': 'object'}, ++ 'VolumeAttachmentResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/VolumeAttachment'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'VolumeAttachmentResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeAttachmentResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeAttachments': {'additionalProperties': False, ++ 'properties': {'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachment'}, ++ 'type': 'array'}}, ++ 'required': ['volume-attachments'], ++ 'type': 'object'}, ++ 'VolumeInfo': {'additionalProperties': False, ++ 'properties': {'hardware-id': {'type': 'string'}, ++ 'persistent': {'type': 'boolean'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'volume-id': {'type': 'string'}, ++ 'wwn': {'type': 'string'}}, ++ 'required': ['volume-id', 'size', 'persistent'], ++ 'type': 'object'}, ++ 'VolumeParams': {'additionalProperties': False, ++ 'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'}, ++ 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'provider': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'tags': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'size', ++ 'provider'], ++ 'type': 'object'}, ++ 'VolumeParamsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/VolumeParams'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'VolumeParamsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeParamsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'VolumeResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/Volume'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'VolumeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/VolumeResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Volumes': {'additionalProperties': False, ++ 'properties': {'volumes': {'items': {'$ref': '#/definitions/Volume'}, ++ 'type': 'array'}}, ++ 'required': ['volumes'], ++ 'type': 'object'}}, ++ 'properties': {'AttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'CreateVolumeAttachmentPlans': {'properties': {'Params': {'$ref': '#/definitions/VolumeAttachmentPlans'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'FilesystemAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/FilesystemAttachmentParamsResults'}}, ++ 'type': 'object'}, ++ 'FilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/FilesystemAttachmentResults'}}, ++ 'type': 'object'}, ++ 'FilesystemParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/FilesystemParamsResults'}}, ++ 'type': 'object'}, ++ 'Filesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/FilesystemResults'}}, ++ 'type': 'object'}, ++ 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveAttachment': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveFilesystemParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RemoveFilesystemParamsResults'}}, ++ 'type': 'object'}, ++ 'RemoveVolumeAttachmentPlan': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveVolumeParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RemoveVolumeParamsResults'}}, ++ 'type': 'object'}, ++ 'SetFilesystemAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/FilesystemAttachments'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetFilesystemInfo': {'properties': {'Params': {'$ref': '#/definitions/Filesystems'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetVolumeAttachmentInfo': {'properties': {'Params': {'$ref': '#/definitions/VolumeAttachments'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetVolumeAttachmentPlanBlockInfo': {'properties': {'Params': {'$ref': '#/definitions/VolumeAttachmentPlans'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetVolumeInfo': {'properties': {'Params': {'$ref': '#/definitions/Volumes'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentParams': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/VolumeAttachmentParamsResults'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentPlans': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/VolumeAttachmentPlanResults'}}, ++ 'type': 'object'}, ++ 'VolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/VolumeAttachmentResults'}}, ++ 'type': 'object'}, ++ 'VolumeBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/MachineStorageIds'}, ++ 'Result': {'$ref': '#/definitions/BlockDeviceResults'}}, ++ 'type': 'object'}, ++ 'VolumeParams': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/VolumeParamsResults'}}, ++ 'type': 'object'}, ++ 'Volumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/VolumeResults'}}, ++ 'type': 'object'}, ++ 'WatchApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchBlockDevices': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchFilesystemAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchFilesystems': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchMachines': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchVolumeAttachmentPlans': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchVolumeAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchVolumes': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(LifeResults) ++ async def AttachmentLife(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='AttachmentLife', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def CreateVolumeAttachmentPlans(self, volume_plans): ++ ''' ++ volume_plans : typing.Sequence[~VolumeAttachmentPlan] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='CreateVolumeAttachmentPlans', ++ version=4, ++ params=_params) ++ _params['volume-plans'] = volume_plans ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnsureDead(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='EnsureDead', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FilesystemAttachmentParamsResults) ++ async def FilesystemAttachmentParams(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~FilesystemAttachmentParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemAttachmentParams', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FilesystemAttachmentResults) ++ async def FilesystemAttachments(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~FilesystemAttachmentResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemAttachments', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FilesystemParamsResults) ++ async def FilesystemParams(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~FilesystemParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='FilesystemParams', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FilesystemResults) ++ async def Filesystems(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~FilesystemResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='Filesystems', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def InstanceId(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='InstanceId', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='Life', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='Remove', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RemoveAttachment(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='RemoveAttachment', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RemoveFilesystemParamsResults) ++ async def RemoveFilesystemParams(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RemoveFilesystemParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='RemoveFilesystemParams', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RemoveVolumeAttachmentPlan(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='RemoveVolumeAttachmentPlan', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RemoveVolumeParamsResults) ++ async def RemoveVolumeParams(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RemoveVolumeParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='RemoveVolumeParams', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetFilesystemAttachmentInfo(self, filesystem_attachments): ++ ''' ++ filesystem_attachments : typing.Sequence[~FilesystemAttachment] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetFilesystemAttachmentInfo', ++ version=4, ++ params=_params) ++ _params['filesystem-attachments'] = filesystem_attachments ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetFilesystemInfo(self, filesystems): ++ ''' ++ filesystems : typing.Sequence[~Filesystem] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetFilesystemInfo', ++ version=4, ++ params=_params) ++ _params['filesystems'] = filesystems ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetStatus', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetVolumeAttachmentInfo(self, volume_attachments): ++ ''' ++ volume_attachments : typing.Sequence[~VolumeAttachment] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetVolumeAttachmentInfo', ++ version=4, ++ params=_params) ++ _params['volume-attachments'] = volume_attachments ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetVolumeAttachmentPlanBlockInfo(self, volume_plans): ++ ''' ++ volume_plans : typing.Sequence[~VolumeAttachmentPlan] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetVolumeAttachmentPlanBlockInfo', ++ version=4, ++ params=_params) ++ _params['volume-plans'] = volume_plans ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetVolumeInfo(self, volumes): ++ ''' ++ volumes : typing.Sequence[~Volume] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='SetVolumeInfo', ++ version=4, ++ params=_params) ++ _params['volumes'] = volumes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='UpdateStatus', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeAttachmentParamsResults) ++ async def VolumeAttachmentParams(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~VolumeAttachmentParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='VolumeAttachmentParams', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeAttachmentPlanResults) ++ async def VolumeAttachmentPlans(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~VolumeAttachmentPlanResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='VolumeAttachmentPlans', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeAttachmentResults) ++ async def VolumeAttachments(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~VolumeAttachmentResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='VolumeAttachments', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BlockDeviceResults) ++ async def VolumeBlockDevices(self, ids): ++ ''' ++ ids : typing.Sequence[~MachineStorageId] ++ Returns -> typing.Sequence[~BlockDeviceResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='VolumeBlockDevices', ++ version=4, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeParamsResults) ++ async def VolumeParams(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~VolumeParamsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='VolumeParams', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(VolumeResults) ++ async def Volumes(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~VolumeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='Volumes', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchApplications(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchApplications', ++ version=4, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchBlockDevices(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchBlockDevices', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachineStorageIdsWatchResults) ++ async def WatchFilesystemAttachments(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchFilesystemAttachments', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchFilesystems(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchFilesystems', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchMachines(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchMachines', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachineStorageIdsWatchResults) ++ async def WatchVolumeAttachmentPlans(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchVolumeAttachmentPlans', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachineStorageIdsWatchResults) ++ async def WatchVolumeAttachments(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchVolumeAttachments', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchVolumes(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='StorageProvisioner', ++ request='WatchVolumes', ++ version=4, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class UniterFacade(Type): + name = 'Uniter' + version = 4 + schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, + 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, + 'type': 'array'}, + 'type': 'array'}}, + 'required': ['servers'], + 'type': 'object'}, + 'Action': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'receiver': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'receiver', 'name'], + 'type': 'object'}, + 'ActionExecutionResult': {'additionalProperties': False, + 'properties': {'action-tag': {'type': 'string'}, + 'message': {'type': 'string'}, + 'results': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'status': {'type': 'string'}}, + 'required': ['action-tag', 'status'], + 'type': 'object'}, + 'ActionExecutionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ActionResult': {'additionalProperties': False, + 'properties': {'action': {'$ref': '#/definitions/Action'}, + 'completed': {'format': 'date-time', + 'type': 'string'}, + 'enqueued': {'format': 'date-time', + 'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'message': {'type': 'string'}, + 'output': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'started': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'type': 'object'}, + 'ActionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + 'type': 'object'}, + 'ApplicationStatusResult': {'additionalProperties': False, + 'properties': {'application': {'$ref': '#/definitions/StatusResult'}, + 'error': {'$ref': '#/definitions/Error'}, + 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}}, + 'type': 'object'}}, + 'required': ['application', + 'units'], + 'type': 'object'}, + 'ApplicationStatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationStatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'BytesResult': {'additionalProperties': False, + 'properties': {'result': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['result'], + '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'}, + 'CharmURL': {'additionalProperties': False, + 'properties': {'url': {'type': 'string'}}, + 'required': ['url'], + 'type': 'object'}, + 'CharmURLs': {'additionalProperties': False, + 'properties': {'urls': {'items': {'$ref': '#/definitions/CharmURL'}, + 'type': 'array'}}, + 'required': ['urls'], + 'type': 'object'}, + 'ConfigSettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'ConfigSettingsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ConfigSettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Endpoint': {'additionalProperties': False, + 'properties': {'application-name': {'type': 'string'}, + 'relation': {'$ref': '#/definitions/CharmRelation'}}, + 'required': ['application-name', 'relation'], + 'type': 'object'}, + 'Entities': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'EntitiesCharmURL': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityCharmURL'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'EntitiesPortRanges': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityPortRange'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'EntityCharmURL': {'additionalProperties': False, + 'properties': {'charm-url': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'charm-url'], + 'type': 'object'}, + 'EntityPortRange': {'additionalProperties': False, + 'properties': {'from-port': {'type': 'integer'}, + 'protocol': {'type': 'string'}, + 'tag': {'type': 'string'}, + 'to-port': {'type': 'integer'}}, + 'required': ['tag', + 'protocol', + 'from-port', + 'to-port'], + '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'}, + 'EntityWorkloadVersion': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}, + 'workload-version': {'type': 'string'}}, + 'required': ['tag', + 'workload-version'], + 'type': 'object'}, + 'EntityWorkloadVersions': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityWorkloadVersion'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetLeadershipSettingsBulkResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/GetLeadershipSettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'GetLeadershipSettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'HostPort': {'additionalProperties': False, + 'properties': {'Address': {'$ref': '#/definitions/Address'}, + 'port': {'type': 'integer'}}, + 'required': ['Address', 'port'], + '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'}, + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachinePortRange': {'additionalProperties': False, + 'properties': {'port-range': {'$ref': '#/definitions/PortRange'}, + 'relation-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['unit-tag', + 'relation-tag', + 'port-range'], + 'type': 'object'}, + 'MachinePortsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'ports': {'items': {'$ref': '#/definitions/MachinePortRange'}, + 'type': 'array'}}, + 'required': ['ports'], + 'type': 'object'}, + 'MachinePortsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'MergeLeadershipSettingsBulkParams': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/MergeLeadershipSettingsParam'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'MergeLeadershipSettingsParam': {'additionalProperties': False, + 'properties': {'application-tag': {'type': 'string'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application-tag', + 'settings'], + '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'}, + 'Metric': {'additionalProperties': False, + 'properties': {'key': {'type': 'string'}, + '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'}, + 'ModelConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', 'uuid'], + 'type': 'object'}, + 'NetworkConfig': {'additionalProperties': False, + 'properties': {'address': {'type': 'string'}, + 'cidr': {'type': 'string'}, + 'config-type': {'type': 'string'}, + 'device-index': {'type': 'integer'}, + 'disabled': {'type': 'boolean'}, + 'dns-search-domains': {'items': {'type': 'string'}, + 'type': 'array'}, + 'dns-servers': {'items': {'type': 'string'}, + 'type': 'array'}, + 'gateway-address': {'type': 'string'}, + 'interface-name': {'type': 'string'}, + 'interface-type': {'type': 'string'}, + 'mac-address': {'type': 'string'}, + 'mtu': {'type': 'integer'}, + 'no-auto-start': {'type': 'boolean'}, + 'parent-interface-name': {'type': 'string'}, + 'provider-address-id': {'type': 'string'}, + 'provider-id': {'type': 'string'}, + 'provider-space-id': {'type': 'string'}, + 'provider-subnet-id': {'type': 'string'}, + 'provider-vlan-id': {'type': 'string'}, + 'routes': {'items': {'$ref': '#/definitions/NetworkRoute'}, + 'type': 'array'}, + 'vlan-tag': {'type': 'integer'}}, + 'required': ['device-index', + 'mac-address', + 'cidr', + 'mtu', + 'provider-id', + 'provider-subnet-id', + 'provider-space-id', + 'provider-address-id', + 'provider-vlan-id', + 'vlan-tag', + 'interface-name', + 'parent-interface-name', + 'interface-type', + 'disabled'], + 'type': 'object'}, + 'NetworkRoute': {'additionalProperties': False, + 'properties': {'destination-cidr': {'type': 'string'}, + 'gateway-ip': {'type': 'string'}, + 'metric': {'type': 'integer'}}, + 'required': ['destination-cidr', + 'gateway-ip', + 'metric'], + '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'}, + 'PortRange': {'additionalProperties': False, + 'properties': {'from-port': {'type': 'integer'}, + 'protocol': {'type': 'string'}, + 'to-port': {'type': 'integer'}}, + 'required': ['from-port', 'to-port', 'protocol'], + 'type': 'object'}, + 'RelationIds': {'additionalProperties': False, + 'properties': {'relation-ids': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['relation-ids'], + 'type': 'object'}, + 'RelationResult': {'additionalProperties': False, + 'properties': {'endpoint': {'$ref': '#/definitions/Endpoint'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'integer'}, + 'key': {'type': 'string'}, + 'life': {'type': 'string'}}, + 'required': ['life', + 'id', + 'key', + 'endpoint'], + 'type': 'object'}, + 'RelationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/RelationResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'RelationUnit': {'additionalProperties': False, + 'properties': {'relation': {'type': 'string'}, + 'unit': {'type': 'string'}}, + 'required': ['relation', 'unit'], + 'type': 'object'}, + 'RelationUnitPair': {'additionalProperties': False, + 'properties': {'local-unit': {'type': 'string'}, + 'relation': {'type': 'string'}, + 'remote-unit': {'type': 'string'}}, + 'required': ['relation', + 'local-unit', + 'remote-unit'], + 'type': 'object'}, + 'RelationUnitPairs': {'additionalProperties': False, + 'properties': {'relation-unit-pairs': {'items': {'$ref': '#/definitions/RelationUnitPair'}, + 'type': 'array'}}, + 'required': ['relation-unit-pairs'], + 'type': 'object'}, + 'RelationUnitSettings': {'additionalProperties': False, + 'properties': {'relation': {'type': 'string'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'unit': {'type': 'string'}}, + 'required': ['relation', + 'unit', + 'settings'], + 'type': 'object'}, + 'RelationUnits': {'additionalProperties': False, + 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'}, + 'type': 'array'}}, + 'required': ['relation-units'], + 'type': 'object'}, + 'RelationUnitsChange': {'additionalProperties': False, + 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, + 'type': 'object'}, + 'departed': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['changed'], + 'type': 'object'}, + 'RelationUnitsSettings': {'additionalProperties': False, + 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnitSettings'}, + 'type': 'array'}}, + 'required': ['relation-units'], + 'type': 'object'}, + 'RelationUnitsWatchResult': {'additionalProperties': False, + 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, + 'error': {'$ref': '#/definitions/Error'}, + 'watcher-id': {'type': 'string'}}, + 'required': ['watcher-id', + 'changes'], + 'type': 'object'}, + 'RelationUnitsWatchResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ResolvedModeResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'mode': {'type': 'string'}}, + 'required': ['mode'], + 'type': 'object'}, + 'ResolvedModeResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ResolvedModeResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'SetStatus': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'SettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'SettingsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'StatusResult': {'additionalProperties': False, + 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'string'}, + 'info': {'type': 'string'}, + 'life': {'type': 'string'}, + 'since': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['id', + 'life', + 'status', + 'info', + 'data', + 'since'], + 'type': 'object'}, + 'StatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'StorageAddParams': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'storage': {'$ref': '#/definitions/StorageConstraints'}, + 'unit': {'type': 'string'}}, + 'required': ['unit', 'name', 'storage'], + 'type': 'object'}, + 'StorageAttachment': {'additionalProperties': False, + 'properties': {'kind': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'location': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'owner-tag', + 'unit-tag', + 'kind', + 'location', + 'life'], + 'type': 'object'}, + 'StorageAttachmentId': {'additionalProperties': False, + 'properties': {'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'unit-tag'], + 'type': 'object'}, + 'StorageAttachmentIds': {'additionalProperties': False, + 'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'}, + 'type': 'array'}}, + 'required': ['ids'], + 'type': 'object'}, + 'StorageAttachmentIdsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/StorageAttachmentIds'}}, + 'required': ['result'], + 'type': 'object'}, + 'StorageAttachmentIdsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentIdsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageAttachmentResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/StorageAttachment'}}, + 'required': ['result'], + 'type': 'object'}, + 'StorageAttachmentResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StoragesAddParams': {'additionalProperties': False, + 'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'}, + 'type': 'array'}}, + 'required': ['storages'], + 'type': 'object'}, + 'StringBoolResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'ok': {'type': 'boolean'}, + 'result': {'type': 'string'}}, + 'required': ['result', 'ok'], + 'type': 'object'}, + 'StringBoolResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StringBoolResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'StringsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StringsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, + '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'}, + 'UnitNetworkConfig': {'additionalProperties': False, + 'properties': {'binding-name': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['unit-tag', 'binding-name'], + 'type': 'object'}, + 'UnitNetworkConfigResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'items': {'$ref': '#/definitions/NetworkConfig'}, + 'type': 'array'}}, + 'required': ['info'], + 'type': 'object'}, + 'UnitNetworkConfigResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/UnitNetworkConfigResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'UnitSettings': {'additionalProperties': False, + 'properties': {'version': {'type': 'integer'}}, + 'required': ['version'], + 'type': 'object'}, + 'UnitsNetworkConfig': {'additionalProperties': False, + 'properties': {'args': {'items': {'$ref': '#/definitions/UnitNetworkConfig'}, + 'type': 'array'}}, + 'required': ['args'], + 'type': 'object'}}, + 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, + 'type': 'object'}, + 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, + 'type': 'object'}, + 'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'AddUnitStorage': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachinePortsResults'}}, + 'type': 'object'}, + 'ApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ApplicationStatusResults'}}, + 'type': 'object'}, + 'AssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, + 'type': 'object'}, + 'CharmArchiveSha256': {'properties': {'Params': {'$ref': '#/definitions/CharmURLs'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'CharmModifiedVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/IntResults'}}, + 'type': 'object'}, + 'CharmURL': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringBoolResults'}}, + 'type': 'object'}, + 'ClearResolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ClosePorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ConfigSettingsResults'}}, + 'type': 'object'}, + 'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DestroyAllSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DestroyUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'EnterScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MeterStatusResults'}}, + 'type': 'object'}, + 'GetPrincipal': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringBoolResults'}}, + 'type': 'object'}, + 'HasSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/BoolResults'}}, + 'type': 'object'}, + 'JoinedRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsResults'}}, + 'type': 'object'}, + 'LeaveScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'Merge': {'properties': {'Params': {'$ref': '#/definitions/MergeLeadershipSettingsBulkParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'NetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/UnitsNetworkConfig'}, + 'Result': {'$ref': '#/definitions/UnitNetworkConfigResults'}}, + 'type': 'object'}, + 'OpenPorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'ProviderType': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'Read': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/GetLeadershipSettingsBulkResults'}}, + 'type': 'object'}, + 'ReadRemoteSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitPairs'}, + 'Result': {'$ref': '#/definitions/SettingsResults'}}, + 'type': 'object'}, + 'ReadSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/SettingsResults'}}, + 'type': 'object'}, + 'Relation': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/RelationResults'}}, + 'type': 'object'}, + 'RelationById': {'properties': {'Params': {'$ref': '#/definitions/RelationIds'}, + 'Result': {'$ref': '#/definitions/RelationResults'}}, + 'type': 'object'}, + 'RemoveStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ResolvedModeResults'}}, + 'type': 'object'}, + 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/EntitiesCharmURL'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetWorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/EntityWorkloadVersions'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'StorageAttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'StorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/StorageAttachmentResults'}}, + 'type': 'object'}, + 'UnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'UnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StorageAttachmentIdsResults'}}, + 'type': 'object'}, + 'UpdateSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitsSettings'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchApplicationRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchLeadershipSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}}, + 'type': 'object'}, + 'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchUnitAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(StringsResult) + async def APIAddresses(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='APIAddresses', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='APIAddresses', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(APIHostPortsResult) + async def APIHostPorts(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ Returns -> typing.Sequence[~HostPort] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='APIHostPorts', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='APIHostPorts', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def Actions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Actions', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Actions', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def AddMetricBatches(self, batches): + ''' - batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ batches : typing.Sequence[~MetricBatchParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AddMetricBatches', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='AddMetricBatches', ++ version=4, ++ params=_params) + _params['batches'] = batches + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def AddUnitStorage(self, storages): + ''' - storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ storages : typing.Sequence[~StorageAddParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AddUnitStorage', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='AddUnitStorage', ++ version=4, ++ params=_params) + _params['storages'] = storages + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachinePortsResults) + async def AllMachinePorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachinePortsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AllMachinePorts', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='AllMachinePorts', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationStatusResults) + async def ApplicationStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ApplicationStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ApplicationStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def AssignedMachine(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AssignedMachine', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='AssignedMachine', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def AvailabilityZone(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AvailabilityZone', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='AvailabilityZone', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def BeginActions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='BeginActions', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='BeginActions', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BytesResult) + async def CACert(self): + ''' + - Returns -> typing.Sequence<+T_co>[int] ++ Returns -> typing.Sequence[int] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CACert', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='CACert', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def CharmArchiveSha256(self, urls): + ''' - urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ urls : typing.Sequence[~CharmURL] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmArchiveSha256', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmArchiveSha256', ++ version=4, ++ params=_params) + _params['urls'] = urls + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(IntResults) + async def CharmModifiedVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmModifiedVersion', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmModifiedVersion', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringBoolResults) + async def CharmURL(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmURL', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmURL', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ClearResolved(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ClearResolved', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ClearResolved', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ClosePorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ClosePorts', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ClosePorts', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ConfigSettingsResults) + async def ConfigSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigSettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ConfigSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ConfigSettings', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelResult) + async def CurrentModel(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CurrentModel', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='CurrentModel', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Destroy(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Destroy', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Destroy', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyAllSubordinates(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='DestroyAllSubordinates', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='DestroyAllSubordinates', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyUnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='DestroyUnitStorageAttachments', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnsureDead(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='EnsureDead', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='EnsureDead', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnterScope(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='EnterScope', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='EnterScope', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def FinishActions(self, results): + ''' - results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ results : typing.Sequence[~ActionExecutionResult] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='FinishActions', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='FinishActions', ++ version=4, ++ params=_params) + _params['results'] = results + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MeterStatusResults) + async def GetMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MeterStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='GetMeterStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='GetMeterStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringBoolResults) + async def GetPrincipal(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='GetPrincipal', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='GetPrincipal', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BoolResults) + async def HasSubordinates(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='HasSubordinates', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='HasSubordinates', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsResults) + async def JoinedRelations(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='JoinedRelations', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='JoinedRelations', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def LeaveScope(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='LeaveScope', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='LeaveScope', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Life', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Life', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Merge(self, params): + ''' - params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~MergeLeadershipSettingsParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Merge', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Merge', ++ version=4, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ModelConfig', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ModelConfig', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def ModelUUID(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ModelUUID', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ModelUUID', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(UnitNetworkConfigResults) + async def NetworkConfig(self, args): + ''' - args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig> - Returns -> typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult> ++ args : typing.Sequence[~UnitNetworkConfig] ++ Returns -> typing.Sequence[~UnitNetworkConfigResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='NetworkConfig', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='NetworkConfig', ++ version=4, ++ params=_params) + _params['args'] = args + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def OpenPorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='OpenPorts', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='OpenPorts', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def PrivateAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='PrivateAddress', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='PrivateAddress', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def ProviderType(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ProviderType', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ProviderType', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def PublicAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='PublicAddress', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='PublicAddress', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(GetLeadershipSettingsBulkResults) + async def Read(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~GetLeadershipSettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Read', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Read', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SettingsResults) + async def ReadRemoteSettings(self, relation_unit_pairs): + ''' - relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair> - Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult> ++ relation_unit_pairs : typing.Sequence[~RelationUnitPair] ++ Returns -> typing.Sequence[~SettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ReadRemoteSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ReadRemoteSettings', ++ version=4, ++ params=_params) + _params['relation-unit-pairs'] = relation_unit_pairs + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SettingsResults) + async def ReadSettings(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~SettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ReadSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='ReadSettings', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationResults) + async def Relation(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Relation', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Relation', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationResults) + async def RelationById(self, relation_ids): + ''' - relation_ids : typing.Sequence<+T_co>[int] - Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult> ++ relation_ids : typing.Sequence[int] ++ Returns -> typing.Sequence[~RelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RelationById', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='RelationById', ++ version=4, ++ params=_params) + _params['relation-ids'] = relation_ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RemoveStorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RemoveStorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='RemoveStorageAttachments', ++ version=4, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RequestReboot(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RequestReboot', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='RequestReboot', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ResolvedModeResults) + async def Resolved(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ResolvedModeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Resolved', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Resolved', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetAgentStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetAgentStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetAgentStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetApplicationStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetApplicationStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetApplicationStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetCharmURL(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityCharmURL] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetCharmURL', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetCharmURL', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetUnitStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetUnitStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetUnitStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetWorkloadVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityWorkloadVersion] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetWorkloadVersion', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='SetWorkloadVersion', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def StorageAttachmentLife(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='StorageAttachmentLife', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='StorageAttachmentLife', ++ version=4, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageAttachmentResults) + async def StorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~StorageAttachmentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='StorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='StorageAttachments', ++ version=4, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def UnitStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UnitStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='UnitStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageAttachmentIdsResults) + async def UnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StorageAttachmentIdsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UnitStorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='UnitStorageAttachments', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def UpdateSettings(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnitSettings] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UpdateSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='UpdateSettings', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def Watch(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Watch', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='Watch', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchAPIHostPorts(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchAPIHostPorts', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchAPIHostPorts', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchActionNotifications(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchActionNotifications', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchActionNotifications', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchApplicationRelations(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchApplicationRelations', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchApplicationRelations', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchConfigSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchConfigSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchConfigSettings', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchForModelConfigChanges', ++ version=4, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchLeadershipSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchLeadershipSettings', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchLeadershipSettings', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchMeterStatus', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchMeterStatus', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationUnitsWatchResults) + async def WatchRelationUnits(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationUnitsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchRelationUnits', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchRelationUnits', ++ version=4, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchStorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchStorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchStorageAttachments', ++ version=4, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchUnitAddresses(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchUnitAddresses', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchUnitAddresses', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchUnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchUnitStorageAttachments', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def WorkloadVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WorkloadVersion', version=4, params=_params) ++ msg = dict(type='Uniter', ++ request='WorkloadVersion', ++ version=4, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply diff --cc modules/libjuju/juju/client/_client5.py index f0f1282,0000000..415aeae mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_client5.py +++ b/modules/libjuju/juju/client/_client5.py @@@ -1,2652 -1,0 +1,5322 @@@ +# 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._definitions import * +from juju.client.facade import ReturnMapping, Type + + +class ApplicationFacade(Type): + name = 'Application' + version = 5 + schema = {'definitions': {'AddApplicationUnits': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'attach-storage': {'items': {'type': 'string'}, + 'type': 'array'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}}, + 'required': ['application', + 'num-units', + 'placement'], + 'type': 'object'}, + 'AddApplicationUnitsResults': {'additionalProperties': False, + 'properties': {'units': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['units'], + 'type': 'object'}, + 'AddRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'AddRelationResults': {'additionalProperties': False, + 'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}}, + 'type': 'object'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'ApplicationCharmRelations': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationCharmRelationsResults': {'additionalProperties': False, + 'properties': {'charm-relations': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['charm-relations'], + 'type': 'object'}, + 'ApplicationDeploy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'attach-storage': {'items': {'type': 'string'}, + 'type': 'array'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-yaml': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'num-units': {'type': 'integer'}, + 'placement': {'items': {'$ref': '#/definitions/Placement'}, + 'type': 'array'}, + 'resources': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'series': {'type': 'string'}, + 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'series', + 'charm-url', + 'channel', + 'num-units', + 'config-yaml', + 'constraints'], + 'type': 'object'}, + 'ApplicationDestroy': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationExpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationGetResults': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm': {'type': 'string'}, + 'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'series': {'type': 'string'}}, + 'required': ['application', + 'charm', + 'config', + 'constraints', + 'series'], + 'type': 'object'}, + 'ApplicationMetricCredential': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'metrics-credentials': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['application', + 'metrics-credentials'], + 'type': 'object'}, + 'ApplicationMetricCredentials': {'additionalProperties': False, + 'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'}, + 'type': 'array'}}, + 'required': ['creds'], + 'type': 'object'}, + 'ApplicationOffer': {'additionalProperties': False, + 'properties': {'access': {'type': 'string'}, + 'application-description': {'type': 'string'}, + 'bindings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, + 'type': 'array'}, + 'offer-name': {'type': 'string'}, + 'offer-url': {'type': 'string'}, + 'source-model-tag': {'type': 'string'}, + 'spaces': {'items': {'$ref': '#/definitions/RemoteSpace'}, + 'type': 'array'}}, + 'required': ['source-model-tag', + 'offer-url', + 'offer-name', + 'application-description', + 'endpoints', + 'spaces', + 'bindings', + 'access'], + 'type': 'object'}, + 'ApplicationSet': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationSetCharm': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'channel': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'config-settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'config-settings-yaml': {'type': 'string'}, + 'force-series': {'type': 'boolean'}, + 'force-units': {'type': 'boolean'}, + 'resource-ids': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}}, + 'type': 'object'}}, + 'required': ['application', + 'charm-url', + 'channel', + 'force-units', + 'force-series'], + 'type': 'object'}, + 'ApplicationUnexpose': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'ApplicationUnset': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'options': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['application', 'options'], + 'type': 'object'}, + 'ApplicationUpdate': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'charm-url': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}, + 'force-charm-url': {'type': 'boolean'}, + 'force-series': {'type': 'boolean'}, + 'min-units': {'type': 'integer'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'settings-yaml': {'type': 'string'}}, + 'required': ['application', + 'charm-url', + 'force-charm-url', + 'force-series', + 'settings-yaml'], + 'type': 'object'}, + 'ApplicationsDeploy': {'additionalProperties': False, + 'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'}, + 'type': 'array'}}, + 'required': ['applications'], + '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'}, + 'Constraints': {'additionalProperties': False, + 'properties': {'Count': {'type': 'integer'}, + 'Pool': {'type': 'string'}, + 'Size': {'type': 'integer'}}, + 'required': ['Pool', 'Size', 'Count'], + 'type': 'object'}, + 'ConsumeApplicationArg': {'additionalProperties': False, + 'properties': {'ApplicationOffer': {'$ref': '#/definitions/ApplicationOffer'}, + 'application-alias': {'type': 'string'}, + 'macaroon': {'$ref': '#/definitions/Macaroon'}}, + 'required': ['ApplicationOffer'], + 'type': 'object'}, + 'ConsumeApplicationArgs': {'additionalProperties': False, + 'properties': {'args': {'items': {'$ref': '#/definitions/ConsumeApplicationArg'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyApplicationInfo': {'additionalProperties': False, + 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'destroyed-units': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyApplicationResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'$ref': '#/definitions/DestroyApplicationInfo'}}, + 'type': 'object'}, + 'DestroyApplicationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyApplicationResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyApplicationUnits': {'additionalProperties': False, + 'properties': {'unit-names': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['unit-names'], + 'type': 'object'}, + 'DestroyRelation': {'additionalProperties': False, + 'properties': {'endpoints': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['endpoints'], + 'type': 'object'}, + 'DestroyUnitInfo': {'additionalProperties': False, + 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}, + 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'type': 'object'}, + 'DestroyUnitResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'info': {'$ref': '#/definitions/DestroyUnitInfo'}}, + 'type': 'object'}, + 'DestroyUnitResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyUnitResult'}, + 'type': 'array'}}, + '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': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetApplicationConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}}, + 'required': ['application'], + 'type': 'object'}, + 'GetConstraintsResults': {'additionalProperties': False, + 'properties': {'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['constraints'], + 'type': 'object'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'Placement': {'additionalProperties': False, + 'properties': {'directive': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['scope', 'directive'], + 'type': 'object'}, + 'RemoteEndpoint': {'additionalProperties': False, + 'properties': {'interface': {'type': 'string'}, + 'limit': {'type': 'integer'}, + 'name': {'type': 'string'}, + 'role': {'type': 'string'}, + 'scope': {'type': 'string'}}, + 'required': ['name', + 'role', + 'interface', + 'limit', + 'scope'], + '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'}, + 'SetConstraints': {'additionalProperties': False, + 'properties': {'application': {'type': 'string'}, + 'constraints': {'$ref': '#/definitions/Value'}}, + 'required': ['application', 'constraints'], + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StringResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'type': 'string'}}, + 'required': ['result'], + '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'}, + 'Value': {'additionalProperties': False, + 'properties': {'arch': {'type': 'string'}, + 'container': {'type': 'string'}, + 'cores': {'type': 'integer'}, + 'cpu-power': {'type': 'integer'}, + 'instance-type': {'type': 'string'}, + 'mem': {'type': 'integer'}, + 'root-disk': {'type': 'integer'}, + 'spaces': {'items': {'type': 'string'}, + 'type': 'array'}, + 'tags': {'items': {'type': 'string'}, + 'type': 'array'}, + 'virt-type': {'type': 'string'}}, + 'type': 'object'}}, + 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, + 'Result': {'$ref': '#/definitions/AddRelationResults'}}, + 'type': 'object'}, + 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, + 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, + 'type': 'object'}, + 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, + 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, + 'type': 'object'}, + 'Consume': {'properties': {'Params': {'$ref': '#/definitions/ConsumeApplicationArgs'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, + 'type': 'object'}, + 'DestroyApplication': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyApplicationResults'}}, + 'type': 'object'}, + 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, + 'type': 'object'}, + 'DestroyUnit': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/DestroyUnitResults'}}, + 'type': 'object'}, + 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, + 'type': 'object'}, + 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, + 'type': 'object'}, + 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, + 'type': 'object'}, + 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, + 'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'}, + 'Result': {'$ref': '#/definitions/GetConstraintsResults'}}, + 'type': 'object'}, + 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, + 'type': 'object'}, + 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, + 'type': 'object'}, + 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, + 'type': 'object'}, + 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, + 'type': 'object'}, + 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, + 'type': 'object'}, + 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(AddRelationResults) + async def AddRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] - Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> ++ endpoints : typing.Sequence[str] ++ Returns -> typing.Mapping[str, ~CharmRelation] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddRelation', version=5, params=_params) ++ msg = dict(type='Application', ++ request='AddRelation', ++ version=5, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(AddApplicationUnitsResults) + async def AddUnits(self, application, num_units, placement): + ''' + application : str + num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> - Returns -> typing.Sequence<+T_co>[str] ++ placement : typing.Sequence[~Placement] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='AddUnits', version=5, params=_params) ++ msg = dict(type='Application', ++ request='AddUnits', ++ version=5, ++ params=_params) + _params['application'] = application + _params['num-units'] = num_units + _params['placement'] = placement + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationCharmRelationsResults) + async def CharmRelations(self, application): + ''' + application : str - Returns -> typing.Sequence<+T_co>[str] ++ Returns -> typing.Sequence[str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='CharmRelations', version=5, params=_params) ++ msg = dict(type='Application', ++ request='CharmRelations', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Consume(self, args): + ''' - args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ args : typing.Sequence[~ConsumeApplicationArg] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Consume', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Consume', ++ version=5, ++ params=_params) + _params['args'] = args + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Deploy(self, applications): + ''' - applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ applications : typing.Sequence[~ApplicationDeploy] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Deploy', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Deploy', ++ version=5, ++ params=_params) + _params['applications'] = applications + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Destroy(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Destroy', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Destroy', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyApplicationResults) + async def DestroyApplication(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyApplicationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyApplication', version=5, params=_params) ++ msg = dict(type='Application', ++ request='DestroyApplication', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyRelation(self, endpoints): + ''' - endpoints : typing.Sequence<+T_co>[str] ++ endpoints : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyRelation', version=5, params=_params) ++ msg = dict(type='Application', ++ request='DestroyRelation', ++ version=5, ++ params=_params) + _params['endpoints'] = endpoints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(DestroyUnitResults) + async def DestroyUnit(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyUnitResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnit', version=5, params=_params) ++ msg = dict(type='Application', ++ request='DestroyUnit', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def DestroyUnits(self, unit_names): + ''' - unit_names : typing.Sequence<+T_co>[str] ++ unit_names : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='DestroyUnits', version=5, params=_params) ++ msg = dict(type='Application', ++ request='DestroyUnits', ++ version=5, ++ params=_params) + _params['unit-names'] = unit_names + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Expose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Expose', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Expose', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationGetResults) + async def Get(self, application): + ''' + application : str - Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')] ++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Get', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Get', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def GetCharmURL(self, application): + ''' + application : str + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetCharmURL', version=5, params=_params) ++ msg = dict(type='Application', ++ request='GetCharmURL', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(GetConstraintsResults) + async def GetConstraints(self, application): + ''' + application : str + Returns -> Value + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='GetConstraints', version=5, params=_params) ++ msg = dict(type='Application', ++ request='GetConstraints', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Set(self, application, options): + ''' + application : str - options : typing.Mapping<~KT, +VT_co>[str, str] ++ options : typing.Mapping[str, str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Set', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Set', ++ version=5, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): + ''' + application : str + channel : str + charm_url : str - config_settings : typing.Mapping<~KT, +VT_co>[str, str] ++ config_settings : typing.Mapping[str, str] + config_settings_yaml : str + force_series : bool + force_units : bool - resource_ids : typing.Mapping<~KT, +VT_co>[str, str] - storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints> ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetCharm', version=5, params=_params) ++ msg = dict(type='Application', ++ request='SetCharm', ++ version=5, ++ params=_params) + _params['application'] = application + _params['channel'] = channel + _params['charm-url'] = charm_url + _params['config-settings'] = config_settings + _params['config-settings-yaml'] = config_settings_yaml + _params['force-series'] = force_series + _params['force-units'] = force_units + _params['resource-ids'] = resource_ids + _params['storage-constraints'] = storage_constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def SetConstraints(self, application, constraints): + ''' + application : str + constraints : Value + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetConstraints', version=5, params=_params) ++ msg = dict(type='Application', ++ request='SetConstraints', ++ version=5, ++ params=_params) + _params['application'] = application + _params['constraints'] = constraints + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetMetricCredentials(self, creds): + ''' - creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ creds : typing.Sequence[~ApplicationMetricCredential] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='SetMetricCredentials', version=5, params=_params) ++ msg = dict(type='Application', ++ request='SetMetricCredentials', ++ version=5, ++ params=_params) + _params['creds'] = creds + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unexpose(self, application): + ''' + application : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unexpose', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Unexpose', ++ version=5, ++ params=_params) + _params['application'] = application + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Unset(self, application, options): + ''' + application : str - options : typing.Sequence<+T_co>[str] ++ options : typing.Sequence[str] + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Unset', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Unset', ++ version=5, ++ params=_params) + _params['application'] = application + _params['options'] = options + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(None) + async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): + ''' + application : str + charm_url : str + constraints : Value + force_charm_url : bool + force_series : bool + min_units : int - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + settings_yaml : str + Returns -> None + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Application', request='Update', version=5, params=_params) ++ msg = dict(type='Application', ++ request='Update', ++ version=5, ++ params=_params) + _params['application'] = application + _params['charm-url'] = charm_url + _params['constraints'] = constraints + _params['force-charm-url'] = force_charm_url + _params['force-series'] = force_series + _params['min-units'] = min_units + _params['settings'] = settings + _params['settings-yaml'] = settings_yaml + reply = await self.rpc(msg) + return reply + + + ++class ControllerFacade(Type): ++ name = 'Controller' ++ version = 5 ++ schema = {'definitions': {'AllWatcherId': {'additionalProperties': False, ++ 'properties': {'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id'], ++ 'type': 'object'}, ++ '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'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ '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'}, ++ 'ConfigValue': {'additionalProperties': False, ++ 'properties': {'source': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['value', 'source'], ++ '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'}, ++ 'ControllerConfigSet': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'DestroyControllerArgs': {'additionalProperties': False, ++ 'properties': {'destroy-models': {'type': 'boolean'}, ++ 'destroy-storage': {'type': 'boolean'}}, ++ 'required': ['destroy-models'], ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'HostedModelConfig': {'additionalProperties': False, ++ 'properties': {'cloud-spec': {'$ref': '#/definitions/CloudSpec'}, ++ 'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'name': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['name', 'owner'], ++ 'type': 'object'}, ++ 'HostedModelConfigsResults': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/HostedModelConfig'}, ++ 'type': 'array'}}, ++ 'required': ['models'], ++ 'type': 'object'}, ++ 'InitiateMigrationArgs': {'additionalProperties': False, ++ 'properties': {'specs': {'items': {'$ref': '#/definitions/MigrationSpec'}, ++ 'type': 'array'}}, ++ 'required': ['specs'], ++ 'type': 'object'}, ++ 'InitiateMigrationResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'migration-id': {'type': 'string'}, ++ 'model-tag': {'type': 'string'}}, ++ 'required': ['model-tag', ++ 'migration-id'], ++ 'type': 'object'}, ++ 'InitiateMigrationResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/InitiateMigrationResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineHardware': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'MigrationSpec': {'additionalProperties': False, ++ 'properties': {'model-tag': {'type': 'string'}, ++ 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}}, ++ 'required': ['model-tag', 'target-info'], ++ 'type': 'object'}, ++ 'MigrationTargetInfo': {'additionalProperties': False, ++ 'properties': {'addrs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'auth-tag': {'type': 'string'}, ++ 'ca-cert': {'type': 'string'}, ++ 'controller-tag': {'type': 'string'}, ++ 'macaroons': {'type': 'string'}, ++ 'password': {'type': 'string'}}, ++ 'required': ['controller-tag', ++ 'addrs', ++ 'ca-cert', ++ 'auth-tag'], ++ 'type': 'object'}, ++ 'Model': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', 'uuid', 'type', 'owner-tag'], ++ 'type': 'object'}, ++ 'ModelBlockInfo': {'additionalProperties': False, ++ 'properties': {'blocks': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'model-uuid': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}}, ++ 'required': ['name', ++ 'model-uuid', ++ 'owner-tag', ++ 'blocks'], ++ 'type': 'object'}, ++ 'ModelBlockInfoList': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/ModelBlockInfo'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ModelConfigResults': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelFilesystemInfo': {'additionalProperties': False, ++ 'properties': {'detachable': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelMachineInfo': {'additionalProperties': False, ++ 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelStatus': {'additionalProperties': False, ++ 'properties': {'application-count': {'type': 'integer'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'filesystems': {'items': {'$ref': '#/definitions/ModelFilesystemInfo'}, ++ 'type': 'array'}, ++ 'hosted-machine-count': {'type': 'integer'}, ++ 'life': {'type': 'string'}, ++ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, ++ 'type': 'array'}, ++ 'model-tag': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'volumes': {'items': {'$ref': '#/definitions/ModelVolumeInfo'}, ++ 'type': 'array'}}, ++ 'required': ['model-tag', ++ 'life', ++ 'hosted-machine-count', ++ 'application-count', ++ 'owner-tag'], ++ 'type': 'object'}, ++ 'ModelStatusResults': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'}, ++ 'type': 'array'}}, ++ 'required': ['models'], ++ 'type': 'object'}, ++ 'ModelTag': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelVolumeInfo': {'additionalProperties': False, ++ 'properties': {'detachable': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModifyControllerAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'action': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', ++ 'action', ++ 'access'], ++ 'type': 'object'}, ++ 'ModifyControllerAccessRequest': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyControllerAccess'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ 'type': 'object'}, ++ 'RemoveBlocksArgs': {'additionalProperties': False, ++ 'properties': {'all': {'type': 'boolean'}}, ++ 'required': ['all'], ++ 'type': 'object'}, ++ 'UserAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', 'access'], ++ 'type': 'object'}, ++ 'UserAccessResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/UserAccess'}}, ++ 'type': 'object'}, ++ 'UserAccessResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/UserAccessResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'UserModel': {'additionalProperties': False, ++ 'properties': {'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'model': {'$ref': '#/definitions/Model'}}, ++ 'required': ['model', 'last-connection'], ++ 'type': 'object'}, ++ 'UserModelList': {'additionalProperties': False, ++ 'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'}, ++ 'type': 'array'}}, ++ 'required': ['user-models'], ++ 'type': 'object'}}, ++ 'properties': {'AllModels': {'properties': {'Result': {'$ref': '#/definitions/UserModelList'}}, ++ 'type': 'object'}, ++ 'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, ++ 'type': 'object'}, ++ 'ConfigSet': {'properties': {'Params': {'$ref': '#/definitions/ControllerConfigSet'}}, ++ 'type': 'object'}, ++ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, ++ 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, ++ 'type': 'object'}, ++ 'DestroyController': {'properties': {'Params': {'$ref': '#/definitions/DestroyControllerArgs'}}, ++ 'type': 'object'}, ++ 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, ++ 'type': 'object'}, ++ 'GetControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/UserAccessResults'}}, ++ 'type': 'object'}, ++ 'HostedModelConfigs': {'properties': {'Result': {'$ref': '#/definitions/HostedModelConfigsResults'}}, ++ 'type': 'object'}, ++ 'InitiateMigration': {'properties': {'Params': {'$ref': '#/definitions/InitiateMigrationArgs'}, ++ 'Result': {'$ref': '#/definitions/InitiateMigrationResults'}}, ++ 'type': 'object'}, ++ 'ListBlockedModels': {'properties': {'Result': {'$ref': '#/definitions/ModelBlockInfoList'}}, ++ 'type': 'object'}, ++ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}}, ++ 'type': 'object'}, ++ 'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ModelStatusResults'}}, ++ 'type': 'object'}, ++ 'ModifyControllerAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyControllerAccessRequest'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveBlocks': {'properties': {'Params': {'$ref': '#/definitions/RemoveBlocksArgs'}}, ++ 'type': 'object'}, ++ 'WatchAllModels': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(UserModelList) ++ async def AllModels(self): ++ ''' ++ ++ Returns -> typing.Sequence[~UserModel] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='AllModels', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResults) ++ async def CloudSpec(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='CloudSpec', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def ConfigSet(self, config): ++ ''' ++ config : typing.Mapping[str, typing.Any] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ConfigSet', ++ version=5, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerAPIInfoForModels(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ControllerAPIInfoForModels', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerConfigResult) ++ async def ControllerConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ControllerConfig', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyController(self, destroy_models): ++ ''' ++ destroy_models : bool ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='DestroyController', ++ version=5, ++ params=_params) ++ _params['destroy-models'] = destroy_models ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResult) ++ async def GetCloudSpec(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='GetCloudSpec', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UserAccessResults) ++ async def GetControllerAccess(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UserAccessResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='GetControllerAccess', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(HostedModelConfigsResults) ++ async def HostedModelConfigs(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostedModelConfig] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='HostedModelConfigs', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(InitiateMigrationResults) ++ async def InitiateMigration(self, specs): ++ ''' ++ specs : typing.Sequence[~MigrationSpec] ++ Returns -> typing.Sequence[~InitiateMigrationResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='InitiateMigration', ++ version=5, ++ params=_params) ++ _params['specs'] = specs ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelBlockInfoList) ++ async def ListBlockedModels(self): ++ ''' ++ ++ Returns -> typing.Sequence[~ModelBlockInfo] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ListBlockedModels', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResults) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, ~ConfigValue] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ModelConfig', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelStatusResults) ++ async def ModelStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelStatus] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ModelStatus', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ModifyControllerAccess(self, changes): ++ ''' ++ changes : typing.Sequence[~ModifyControllerAccess] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='ModifyControllerAccess', ++ version=5, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def RemoveBlocks(self, all_): ++ ''' ++ all_ : bool ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='RemoveBlocks', ++ version=5, ++ params=_params) ++ _params['all'] = all_ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AllWatcherId) ++ async def WatchAllModels(self): ++ ''' ++ ++ Returns -> str ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Controller', ++ request='WatchAllModels', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class FirewallerFacade(Type): ++ name = 'Firewaller' ++ version = 5 ++ schema = {'definitions': {'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'}, ++ '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'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ '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'}, ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'FirewallRule': {'additionalProperties': False, ++ 'properties': {'known-service': {'type': 'string'}, ++ 'whitelist-cidrs': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['known-service'], ++ 'type': 'object'}, ++ 'KnownServiceArgs': {'additionalProperties': False, ++ 'properties': {'known-services': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['known-services'], ++ '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'}, ++ 'ListFirewallRulesResults': {'additionalProperties': False, ++ 'properties': {'Rules': {'items': {'$ref': '#/definitions/FirewallRule'}, ++ 'type': 'array'}}, ++ 'required': ['Rules'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MacaroonResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/Macaroon'}}, ++ 'type': 'object'}, ++ 'MacaroonResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MacaroonResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'MachinePortRange': {'additionalProperties': False, ++ 'properties': {'port-range': {'$ref': '#/definitions/PortRange'}, ++ 'relation-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['unit-tag', ++ 'relation-tag', ++ 'port-range'], ++ 'type': 'object'}, ++ 'MachinePorts': {'additionalProperties': False, ++ 'properties': {'machine-tag': {'type': 'string'}, ++ 'subnet-tag': {'type': 'string'}}, ++ 'required': ['machine-tag', 'subnet-tag'], ++ 'type': 'object'}, ++ 'MachinePortsParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/MachinePorts'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'MachinePortsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'ports': {'items': {'$ref': '#/definitions/MachinePortRange'}, ++ 'type': 'array'}}, ++ 'required': ['ports'], ++ 'type': 'object'}, ++ 'MachinePortsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'PortRange': {'additionalProperties': False, ++ 'properties': {'from-port': {'type': 'integer'}, ++ 'protocol': {'type': 'string'}, ++ 'to-port': {'type': 'integer'}}, ++ 'required': ['from-port', 'to-port', 'protocol'], ++ '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'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ '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'}}, ++ 'properties': {'AreManuallyProvisioned': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/BoolResults'}}, ++ 'type': 'object'}, ++ 'CloudSpec': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResults'}}, ++ 'type': 'object'}, ++ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, ++ 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, ++ 'type': 'object'}, ++ 'FirewallRules': {'properties': {'Params': {'$ref': '#/definitions/KnownServiceArgs'}, ++ 'Result': {'$ref': '#/definitions/ListFirewallRulesResults'}}, ++ 'type': 'object'}, ++ 'GetAssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'GetCloudSpec': {'properties': {'Params': {'$ref': '#/definitions/ModelTag'}, ++ 'Result': {'$ref': '#/definitions/CloudSpecResult'}}, ++ 'type': 'object'}, ++ 'GetExposed': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/BoolResults'}}, ++ 'type': 'object'}, ++ 'GetMachineActiveSubnets': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}, ++ 'GetMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/MachinePortsParams'}, ++ 'Result': {'$ref': '#/definitions/MachinePortsResults'}}, ++ 'type': 'object'}, ++ 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'MacaroonForRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MacaroonResults'}}, ++ 'type': 'object'}, ++ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'SetRelationsStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchEgressAddressesForRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchIngressAddressesForRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchOpenedPorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(BoolResults) ++ async def AreManuallyProvisioned(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='AreManuallyProvisioned', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResults) ++ async def CloudSpec(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~CloudSpecResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='CloudSpec', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerAPIInfoForModels(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='ControllerAPIInfoForModels', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerConfigResult) ++ async def ControllerConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='ControllerConfig', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ListFirewallRulesResults) ++ async def FirewallRules(self, known_services): ++ ''' ++ known_services : typing.Sequence[str] ++ Returns -> typing.Sequence[~FirewallRule] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='FirewallRules', ++ version=5, ++ params=_params) ++ _params['known-services'] = known_services ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def GetAssignedMachine(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='GetAssignedMachine', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResult) ++ async def GetCloudSpec(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='GetCloudSpec', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BoolResults) ++ async def GetExposed(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='GetExposed', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsResults) ++ async def GetMachineActiveSubnets(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='GetMachineActiveSubnets', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachinePortsResults) ++ async def GetMachinePorts(self, params): ++ ''' ++ params : typing.Sequence[~MachinePorts] ++ Returns -> typing.Sequence[~MachinePortsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='GetMachinePorts', ++ version=5, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def InstanceId(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='InstanceId', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='Life', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MacaroonResults) ++ async def MacaroonForRelations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MacaroonResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='MacaroonForRelations', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='ModelConfig', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetRelationsStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='SetRelationsStatus', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='Watch', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchEgressAddressesForRelations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchEgressAddressesForRelations', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForModelConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchForModelConfigChanges', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchIngressAddressesForRelations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchIngressAddressesForRelations', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchModelMachines(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchModelMachines', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchOpenedPorts(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchOpenedPorts', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnits(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Firewaller', ++ request='WatchUnits', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class MachineManagerFacade(Type): ++ name = 'MachineManager' ++ version = 5 ++ schema = {'definitions': {'AddMachineParams': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'}, ++ 'type': 'array'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'container-type': {'type': 'string'}, ++ 'disks': {'items': {'$ref': '#/definitions/Constraints'}, ++ 'type': 'array'}, ++ 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, ++ 'instance-id': {'type': 'string'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'nonce': {'type': 'string'}, ++ 'parent-id': {'type': 'string'}, ++ 'placement': {'$ref': '#/definitions/Placement'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['series', ++ 'constraints', ++ 'jobs', ++ 'parent-id', ++ 'container-type', ++ 'instance-id', ++ 'nonce', ++ 'hardware-characteristics', ++ 'addresses'], ++ 'type': 'object'}, ++ 'AddMachines': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'AddMachinesResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'machine': {'type': 'string'}}, ++ 'required': ['machine'], ++ 'type': 'object'}, ++ 'AddMachinesResults': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'}, ++ 'type': 'array'}}, ++ 'required': ['machines'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'Constraints': {'additionalProperties': False, ++ 'properties': {'Count': {'type': 'integer'}, ++ 'Pool': {'type': 'string'}, ++ 'Size': {'type': 'integer'}}, ++ 'required': ['Pool', 'Size', 'Count'], ++ 'type': 'object'}, ++ 'DestroyMachineInfo': {'additionalProperties': False, ++ 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'destroyed-units': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyMachineResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'info': {'$ref': '#/definitions/DestroyMachineInfo'}}, ++ 'type': 'object'}, ++ 'DestroyMachineResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyMachineResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyMachinesParams': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'keep': {'type': 'boolean'}, ++ 'machine-tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['machine-tags'], ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ErrorResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}}, ++ 'type': 'object'}, ++ 'HardwareCharacteristics': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'InstanceType': {'additionalProperties': False, ++ 'properties': {'arches': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'cost': {'type': 'integer'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'deprecated': {'type': 'boolean'}, ++ 'memory': {'type': 'integer'}, ++ 'name': {'type': 'string'}, ++ 'root-disk': {'type': 'integer'}, ++ 'virt-type': {'type': 'string'}}, ++ 'required': ['arches', 'cpu-cores', 'memory'], ++ 'type': 'object'}, ++ 'InstanceTypesResult': {'additionalProperties': False, ++ 'properties': {'cost-currency': {'type': 'string'}, ++ 'cost-divisor': {'type': 'integer'}, ++ 'cost-unit': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'InstanceTypesResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'ModelInstanceTypesConstraint': {'additionalProperties': False, ++ 'properties': {'value': {'$ref': '#/definitions/Value'}}, ++ 'type': 'object'}, ++ 'ModelInstanceTypesConstraints': {'additionalProperties': False, ++ 'properties': {'constraints': {'items': {'$ref': '#/definitions/ModelInstanceTypesConstraint'}, ++ 'type': 'array'}}, ++ 'required': ['constraints'], ++ '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'}, ++ 'Placement': {'additionalProperties': False, ++ 'properties': {'directive': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['scope', 'directive'], ++ 'type': 'object'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'UpdateSeriesArg': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'series': {'type': 'string'}, ++ 'tag': {'$ref': '#/definitions/Entity'}}, ++ 'required': ['tag', 'force', 'series'], ++ 'type': 'object'}, ++ 'UpdateSeriesArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/UpdateSeriesArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'UpgradeSeriesNotificationParam': {'additionalProperties': False, ++ 'properties': {'entity': {'$ref': '#/definitions/Entity'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['entity', ++ 'watcher-id'], ++ 'type': 'object'}, ++ 'UpgradeSeriesNotificationParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/UpgradeSeriesNotificationParam'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'UpgradeSeriesUnitsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'unit-names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['unit-names'], ++ 'type': 'object'}, ++ 'UpgradeSeriesUnitsResults': {'additionalProperties': False, ++ 'properties': {'Results': {'items': {'$ref': '#/definitions/UpgradeSeriesUnitsResult'}, ++ 'type': 'array'}}, ++ 'required': ['Results'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ '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': {'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'}, ++ 'Result': {'$ref': '#/definitions/AddMachinesResults'}}, ++ 'type': 'object'}, ++ 'DestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/DestroyMachineResults'}}, ++ 'type': 'object'}, ++ 'DestroyMachineWithParams': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachinesParams'}, ++ 'Result': {'$ref': '#/definitions/DestroyMachineResults'}}, ++ 'type': 'object'}, ++ 'ForceDestroyMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/DestroyMachineResults'}}, ++ 'type': 'object'}, ++ 'GetUpgradeSeriesMessages': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesNotificationParams'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}, ++ 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/ModelInstanceTypesConstraints'}, ++ 'Result': {'$ref': '#/definitions/InstanceTypesResults'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesComplete': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArg'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesPrepare': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArg'}, ++ 'Result': {'$ref': '#/definitions/ErrorResult'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesValidate': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArgs'}, ++ 'Result': {'$ref': '#/definitions/UpgradeSeriesUnitsResults'}}, ++ 'type': 'object'}, ++ 'WatchUpgradeSeriesNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(AddMachinesResults) ++ async def AddMachines(self, params): ++ ''' ++ params : typing.Sequence[~AddMachineParams] ++ Returns -> typing.Sequence[~AddMachinesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='AddMachines', ++ version=5, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DestroyMachineResults) ++ async def DestroyMachine(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyMachineResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='DestroyMachine', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DestroyMachineResults) ++ async def DestroyMachineWithParams(self, force, keep, machine_tags): ++ ''' ++ force : bool ++ keep : bool ++ machine_tags : typing.Sequence[str] ++ Returns -> typing.Sequence[~DestroyMachineResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='DestroyMachineWithParams', ++ version=5, ++ params=_params) ++ _params['force'] = force ++ _params['keep'] = keep ++ _params['machine-tags'] = machine_tags ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DestroyMachineResults) ++ async def ForceDestroyMachine(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DestroyMachineResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='ForceDestroyMachine', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsResults) ++ async def GetUpgradeSeriesMessages(self, params): ++ ''' ++ params : typing.Sequence[~UpgradeSeriesNotificationParam] ++ Returns -> typing.Sequence[~StringsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='GetUpgradeSeriesMessages', ++ version=5, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(InstanceTypesResults) ++ async def InstanceTypes(self, constraints): ++ ''' ++ constraints : typing.Sequence[~ModelInstanceTypesConstraint] ++ Returns -> typing.Sequence[~InstanceTypesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='InstanceTypes', ++ version=5, ++ params=_params) ++ _params['constraints'] = constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def UpgradeSeriesComplete(self, force, series, tag): ++ ''' ++ force : bool ++ series : str ++ tag : Entity ++ Returns -> Error ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='UpgradeSeriesComplete', ++ version=5, ++ params=_params) ++ _params['force'] = force ++ _params['series'] = series ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResult) ++ async def UpgradeSeriesPrepare(self, force, series, tag): ++ ''' ++ force : bool ++ series : str ++ tag : Entity ++ Returns -> Error ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='UpgradeSeriesPrepare', ++ version=5, ++ params=_params) ++ _params['force'] = force ++ _params['series'] = series ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UpgradeSeriesUnitsResults) ++ async def UpgradeSeriesValidate(self, args): ++ ''' ++ args : typing.Sequence[~UpdateSeriesArg] ++ Returns -> typing.Sequence[~UpgradeSeriesUnitsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='UpgradeSeriesValidate', ++ version=5, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchUpgradeSeriesNotifications(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='MachineManager', ++ request='WatchUpgradeSeriesNotifications', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++class ModelManagerFacade(Type): ++ name = 'ModelManager' ++ version = 5 ++ schema = {'definitions': {'ChangeModelCredentialParams': {'additionalProperties': False, ++ 'properties': {'credential-tag': {'type': 'string'}, ++ 'model-tag': {'type': 'string'}}, ++ 'required': ['model-tag', ++ 'credential-tag'], ++ 'type': 'object'}, ++ 'ChangeModelCredentialsParams': {'additionalProperties': False, ++ 'properties': {'model-credentials': {'items': {'$ref': '#/definitions/ChangeModelCredentialParams'}, ++ 'type': 'array'}}, ++ 'required': ['model-credentials'], ++ 'type': 'object'}, ++ 'DestroyModelParams': {'additionalProperties': False, ++ 'properties': {'destroy-storage': {'type': 'boolean'}, ++ 'model-tag': {'type': 'string'}}, ++ 'required': ['model-tag'], ++ 'type': 'object'}, ++ 'DestroyModelsParams': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/DestroyModelParams'}, ++ 'type': 'array'}}, ++ 'required': ['models'], ++ 'type': 'object'}, ++ 'DumpModelRequest': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'simplified': {'type': 'boolean'}}, ++ 'required': ['entities', 'simplified'], ++ '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'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineHardware': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'MapResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'MapResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MapResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Model': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', 'uuid', 'type', 'owner-tag'], ++ 'type': 'object'}, ++ 'ModelCreateArgs': {'additionalProperties': False, ++ 'properties': {'cloud-tag': {'type': 'string'}, ++ 'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'credential': {'type': 'string'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'region': {'type': 'string'}}, ++ 'required': ['name', 'owner-tag'], ++ 'type': 'object'}, ++ 'ModelDefaultValues': {'additionalProperties': False, ++ 'properties': {'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelDefaults': {'additionalProperties': False, ++ 'properties': {'controller': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'default': {'additionalProperties': True, ++ 'type': 'object'}, ++ 'regions': {'items': {'$ref': '#/definitions/RegionDefaults'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ModelDefaultsResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ModelDefaults'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelEntityCount': {'additionalProperties': False, ++ 'properties': {'count': {'type': 'integer'}, ++ 'entity': {'type': 'string'}}, ++ 'required': ['entity', 'count'], ++ 'type': 'object'}, ++ 'ModelFilesystemInfo': {'additionalProperties': False, ++ 'properties': {'detachable': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelInfo': {'additionalProperties': False, ++ 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, ++ 'cloud-credential-tag': {'type': 'string'}, ++ 'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'controller-uuid': {'type': 'string'}, ++ 'default-series': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, ++ 'type': 'array'}, ++ 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'provider-type': {'type': 'string'}, ++ 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'type': {'type': 'string'}, ++ 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'}, ++ 'type': 'array'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', ++ 'type', ++ 'uuid', ++ 'controller-uuid', ++ 'cloud-tag', ++ 'owner-tag', ++ 'life', ++ 'users', ++ 'machines', ++ 'sla', ++ 'agent-version'], ++ 'type': 'object'}, ++ 'ModelInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ModelInfo'}}, ++ 'type': 'object'}, ++ 'ModelInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ModelInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ModelMachineInfo': {'additionalProperties': False, ++ 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'}, ++ 'has-vote': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'instance-id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'status': {'type': 'string'}, ++ 'wants-vote': {'type': 'boolean'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModelMigrationStatus': {'additionalProperties': False, ++ 'properties': {'end': {'format': 'date-time', ++ 'type': 'string'}, ++ 'start': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['status', 'start'], ++ 'type': 'object'}, ++ 'ModelSLAInfo': {'additionalProperties': False, ++ 'properties': {'level': {'type': 'string'}, ++ 'owner': {'type': 'string'}}, ++ 'required': ['level', 'owner'], ++ 'type': 'object'}, ++ 'ModelStatus': {'additionalProperties': False, ++ 'properties': {'application-count': {'type': 'integer'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'filesystems': {'items': {'$ref': '#/definitions/ModelFilesystemInfo'}, ++ 'type': 'array'}, ++ 'hosted-machine-count': {'type': 'integer'}, ++ 'life': {'type': 'string'}, ++ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'}, ++ 'type': 'array'}, ++ 'model-tag': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'volumes': {'items': {'$ref': '#/definitions/ModelVolumeInfo'}, ++ 'type': 'array'}}, ++ 'required': ['model-tag', ++ 'life', ++ 'hosted-machine-count', ++ 'application-count', ++ 'owner-tag'], ++ 'type': 'object'}, ++ 'ModelStatusResults': {'additionalProperties': False, ++ 'properties': {'models': {'items': {'$ref': '#/definitions/ModelStatus'}, ++ 'type': 'array'}}, ++ 'required': ['models'], ++ 'type': 'object'}, ++ 'ModelSummariesRequest': {'additionalProperties': False, ++ 'properties': {'all': {'type': 'boolean'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag'], ++ 'type': 'object'}, ++ 'ModelSummary': {'additionalProperties': False, ++ 'properties': {'agent-version': {'$ref': '#/definitions/Number'}, ++ 'cloud-credential-tag': {'type': 'string'}, ++ 'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'controller-uuid': {'type': 'string'}, ++ 'counts': {'items': {'$ref': '#/definitions/ModelEntityCount'}, ++ 'type': 'array'}, ++ 'default-series': {'type': 'string'}, ++ 'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'migration': {'$ref': '#/definitions/ModelMigrationStatus'}, ++ 'name': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'provider-type': {'type': 'string'}, ++ 'sla': {'$ref': '#/definitions/ModelSLAInfo'}, ++ 'status': {'$ref': '#/definitions/EntityStatus'}, ++ 'type': {'type': 'string'}, ++ 'user-access': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', ++ 'uuid', ++ 'type', ++ 'controller-uuid', ++ 'cloud-tag', ++ 'owner-tag', ++ 'life', ++ 'user-access', ++ 'last-connection', ++ 'counts', ++ 'sla', ++ 'agent-version'], ++ 'type': 'object'}, ++ 'ModelSummaryResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ModelSummary'}}, ++ 'type': 'object'}, ++ 'ModelSummaryResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ModelSummaryResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ModelUnsetKeys': {'additionalProperties': False, ++ 'properties': {'cloud-region': {'type': 'string'}, ++ 'cloud-tag': {'type': 'string'}, ++ 'keys': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'ModelUserInfo': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'last-connection', ++ 'access'], ++ 'type': 'object'}, ++ 'ModelVolumeInfo': {'additionalProperties': False, ++ 'properties': {'detachable': {'type': 'boolean'}, ++ 'id': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id'], ++ 'type': 'object'}, ++ 'ModifyModelAccess': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'action': {'type': 'string'}, ++ 'model-tag': {'type': 'string'}, ++ 'user-tag': {'type': 'string'}}, ++ 'required': ['user-tag', ++ 'action', ++ 'access', ++ 'model-tag'], ++ 'type': 'object'}, ++ 'ModifyModelAccessRequest': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyModelAccess'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ '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'}, ++ 'RegionDefaults': {'additionalProperties': False, ++ 'properties': {'region-name': {'type': 'string'}, ++ 'value': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'required': ['region-name', 'value'], ++ 'type': 'object'}, ++ 'SetModelDefaults': {'additionalProperties': False, ++ 'properties': {'config': {'items': {'$ref': '#/definitions/ModelDefaultValues'}, ++ 'type': 'array'}}, ++ 'required': ['config'], ++ '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'}, ++ 'UnsetModelDefaults': {'additionalProperties': False, ++ 'properties': {'keys': {'items': {'$ref': '#/definitions/ModelUnsetKeys'}, ++ 'type': 'array'}}, ++ 'required': ['keys'], ++ 'type': 'object'}, ++ 'UserModel': {'additionalProperties': False, ++ 'properties': {'last-connection': {'format': 'date-time', ++ 'type': 'string'}, ++ 'model': {'$ref': '#/definitions/Model'}}, ++ 'required': ['model', 'last-connection'], ++ 'type': 'object'}, ++ 'UserModelList': {'additionalProperties': False, ++ 'properties': {'user-models': {'items': {'$ref': '#/definitions/UserModel'}, ++ 'type': 'array'}}, ++ 'required': ['user-models'], ++ 'type': 'object'}}, ++ 'properties': {'ChangeModelCredential': {'properties': {'Params': {'$ref': '#/definitions/ChangeModelCredentialsParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'CreateModel': {'properties': {'Params': {'$ref': '#/definitions/ModelCreateArgs'}, ++ 'Result': {'$ref': '#/definitions/ModelInfo'}}, ++ 'type': 'object'}, ++ 'DestroyModels': {'properties': {'Params': {'$ref': '#/definitions/DestroyModelsParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'DumpModels': {'properties': {'Params': {'$ref': '#/definitions/DumpModelRequest'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'DumpModelsDB': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MapResults'}}, ++ 'type': 'object'}, ++ 'ListModelSummaries': {'properties': {'Params': {'$ref': '#/definitions/ModelSummariesRequest'}, ++ 'Result': {'$ref': '#/definitions/ModelSummaryResults'}}, ++ 'type': 'object'}, ++ 'ListModels': {'properties': {'Params': {'$ref': '#/definitions/Entity'}, ++ 'Result': {'$ref': '#/definitions/UserModelList'}}, ++ 'type': 'object'}, ++ 'ModelDefaults': {'properties': {'Result': {'$ref': '#/definitions/ModelDefaultsResult'}}, ++ 'type': 'object'}, ++ 'ModelInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ModelInfoResults'}}, ++ 'type': 'object'}, ++ 'ModelStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ModelStatusResults'}}, ++ 'type': 'object'}, ++ 'ModifyModelAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyModelAccessRequest'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/SetModelDefaults'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UnsetModelDefaults': {'properties': {'Params': {'$ref': '#/definitions/UnsetModelDefaults'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ChangeModelCredential(self, model_credentials): ++ ''' ++ model_credentials : typing.Sequence[~ChangeModelCredentialParams] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ChangeModelCredential', ++ version=5, ++ params=_params) ++ _params['model-credentials'] = model_credentials ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelInfo) ++ async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region): ++ ''' ++ cloud_tag : str ++ config : typing.Mapping[str, typing.Any] ++ credential : str ++ name : str ++ owner_tag : str ++ region : str ++ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='CreateModel', ++ version=5, ++ params=_params) ++ _params['cloud-tag'] = cloud_tag ++ _params['config'] = config ++ _params['credential'] = credential ++ _params['name'] = name ++ _params['owner-tag'] = owner_tag ++ _params['region'] = region ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def DestroyModels(self, models): ++ ''' ++ models : typing.Sequence[~DestroyModelParams] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='DestroyModels', ++ version=5, ++ params=_params) ++ _params['models'] = models ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def DumpModels(self, entities, simplified): ++ ''' ++ entities : typing.Sequence[~Entity] ++ simplified : bool ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='DumpModels', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ _params['simplified'] = simplified ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MapResults) ++ async def DumpModelsDB(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MapResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='DumpModelsDB', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelSummaryResults) ++ async def ListModelSummaries(self, all_, user_tag): ++ ''' ++ all_ : bool ++ user_tag : str ++ Returns -> typing.Sequence[~ModelSummaryResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ListModelSummaries', ++ version=5, ++ params=_params) ++ _params['all'] = all_ ++ _params['user-tag'] = user_tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UserModelList) ++ async def ListModels(self, tag): ++ ''' ++ tag : str ++ Returns -> typing.Sequence[~UserModel] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ListModels', ++ version=5, ++ params=_params) ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelDefaultsResult) ++ async def ModelDefaults(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, ~ModelDefaults] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModelDefaults', ++ version=5, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelInfoResults) ++ async def ModelInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModelInfo', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelStatusResults) ++ async def ModelStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ModelStatus] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModelStatus', ++ version=5, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ModifyModelAccess(self, changes): ++ ''' ++ changes : typing.Sequence[~ModifyModelAccess] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='ModifyModelAccess', ++ version=5, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetModelDefaults(self, config): ++ ''' ++ config : typing.Sequence[~ModelDefaultValues] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='SetModelDefaults', ++ version=5, ++ params=_params) ++ _params['config'] = config ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UnsetModelDefaults(self, keys): ++ ''' ++ keys : typing.Sequence[~ModelUnsetKeys] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='ModelManager', ++ request='UnsetModelDefaults', ++ version=5, ++ params=_params) ++ _params['keys'] = keys ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ +class UniterFacade(Type): + name = 'Uniter' + version = 5 + schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, + 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, + 'type': 'array'}, + 'type': 'array'}}, + 'required': ['servers'], + 'type': 'object'}, + 'Action': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'receiver': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'receiver', 'name'], + 'type': 'object'}, + 'ActionExecutionResult': {'additionalProperties': False, + 'properties': {'action-tag': {'type': 'string'}, + 'message': {'type': 'string'}, + 'results': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'status': {'type': 'string'}}, + 'required': ['action-tag', 'status'], + 'type': 'object'}, + 'ActionExecutionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'ActionResult': {'additionalProperties': False, + 'properties': {'action': {'$ref': '#/definitions/Action'}, + 'completed': {'format': 'date-time', + 'type': 'string'}, + 'enqueued': {'format': 'date-time', + 'type': 'string'}, + 'error': {'$ref': '#/definitions/Error'}, + 'message': {'type': 'string'}, + 'output': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'started': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'type': 'object'}, + 'ActionResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'Address': {'additionalProperties': False, + 'properties': {'scope': {'type': 'string'}, + 'space-name': {'type': 'string'}, + 'type': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'type', 'scope'], + 'type': 'object'}, + 'ApplicationStatusResult': {'additionalProperties': False, + 'properties': {'application': {'$ref': '#/definitions/StatusResult'}, + 'error': {'$ref': '#/definitions/Error'}, + 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}}, + 'type': 'object'}}, + 'required': ['application', + 'units'], + 'type': 'object'}, + 'ApplicationStatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationStatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'BytesResult': {'additionalProperties': False, + 'properties': {'result': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['result'], + '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'}, + 'CharmURL': {'additionalProperties': False, + 'properties': {'url': {'type': 'string'}}, + 'required': ['url'], + 'type': 'object'}, + 'CharmURLs': {'additionalProperties': False, + 'properties': {'urls': {'items': {'$ref': '#/definitions/CharmURL'}, + 'type': 'array'}}, + 'required': ['urls'], + 'type': 'object'}, + 'ConfigSettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'ConfigSettingsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ConfigSettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'Endpoint': {'additionalProperties': False, + 'properties': {'application-name': {'type': 'string'}, + 'relation': {'$ref': '#/definitions/CharmRelation'}}, + 'required': ['application-name', 'relation'], + 'type': 'object'}, + 'Entities': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'EntitiesCharmURL': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityCharmURL'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'EntitiesPortRanges': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityPortRange'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'Entity': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}}, + 'required': ['tag'], + 'type': 'object'}, + 'EntityCharmURL': {'additionalProperties': False, + 'properties': {'charm-url': {'type': 'string'}, + 'tag': {'type': 'string'}}, + 'required': ['tag', 'charm-url'], + 'type': 'object'}, + 'EntityPortRange': {'additionalProperties': False, + 'properties': {'from-port': {'type': 'integer'}, + 'protocol': {'type': 'string'}, + 'tag': {'type': 'string'}, + 'to-port': {'type': 'integer'}}, + 'required': ['tag', + 'protocol', + 'from-port', + 'to-port'], + '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'}, + 'EntityWorkloadVersion': {'additionalProperties': False, + 'properties': {'tag': {'type': 'string'}, + 'workload-version': {'type': 'string'}}, + 'required': ['tag', + 'workload-version'], + 'type': 'object'}, + 'EntityWorkloadVersions': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityWorkloadVersion'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'Error': {'additionalProperties': False, + 'properties': {'code': {'type': 'string'}, + 'info': {'$ref': '#/definitions/ErrorInfo'}, + 'message': {'type': 'string'}}, + 'required': ['message', 'code'], + 'type': 'object'}, + 'ErrorInfo': {'additionalProperties': False, + 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, + 'macaroon-path': {'type': 'string'}}, + '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'}, + 'GetLeadershipSettingsBulkResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/GetLeadershipSettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'GetLeadershipSettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'HostPort': {'additionalProperties': False, + 'properties': {'Address': {'$ref': '#/definitions/Address'}, + 'port': {'type': 'integer'}}, + 'required': ['Address', 'port'], + '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'}, + 'InterfaceAddress': {'additionalProperties': False, + 'properties': {'cidr': {'type': 'string'}, + 'value': {'type': 'string'}}, + 'required': ['value', 'cidr'], + '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'}, + 'Macaroon': {'additionalProperties': False, 'type': 'object'}, + 'MachinePortRange': {'additionalProperties': False, + 'properties': {'port-range': {'$ref': '#/definitions/PortRange'}, + 'relation-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['unit-tag', + 'relation-tag', + 'port-range'], + 'type': 'object'}, + 'MachinePortsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'ports': {'items': {'$ref': '#/definitions/MachinePortRange'}, + 'type': 'array'}}, + 'required': ['ports'], + 'type': 'object'}, + 'MachinePortsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'MergeLeadershipSettingsBulkParams': {'additionalProperties': False, + 'properties': {'params': {'items': {'$ref': '#/definitions/MergeLeadershipSettingsParam'}, + 'type': 'array'}}, + 'required': ['params'], + 'type': 'object'}, + 'MergeLeadershipSettingsParam': {'additionalProperties': False, + 'properties': {'application-tag': {'type': 'string'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['application-tag', + 'settings'], + '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'}, + 'Metric': {'additionalProperties': False, + 'properties': {'key': {'type': 'string'}, + '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'}, + 'ModelConfigResult': {'additionalProperties': False, + 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}}, + 'required': ['config'], + 'type': 'object'}, + 'ModelResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'name': {'type': 'string'}, + 'uuid': {'type': 'string'}}, + 'required': ['name', 'uuid'], + 'type': 'object'}, + 'NetworkInfo': {'additionalProperties': False, + 'properties': {'addresses': {'items': {'$ref': '#/definitions/InterfaceAddress'}, + 'type': 'array'}, + 'interface-name': {'type': 'string'}, + 'mac-address': {'type': 'string'}}, + 'required': ['mac-address', + 'interface-name', + 'addresses'], + 'type': 'object'}, + 'NetworkInfoParams': {'additionalProperties': False, + 'properties': {'bindings': {'items': {'type': 'string'}, + 'type': 'array'}, + 'unit': {'type': 'string'}}, + 'required': ['unit', 'bindings'], + 'type': 'object'}, + 'NetworkInfoResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'network-info': {'items': {'$ref': '#/definitions/NetworkInfo'}, + 'type': 'array'}}, + 'required': ['network-info'], + 'type': 'object'}, + 'NetworkInfoResults': {'additionalProperties': False, + 'properties': {'results': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInfoResult'}}, + 'type': 'object'}}, + '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'}, + 'PortRange': {'additionalProperties': False, + 'properties': {'from-port': {'type': 'integer'}, + 'protocol': {'type': 'string'}, + 'to-port': {'type': 'integer'}}, + 'required': ['from-port', 'to-port', 'protocol'], + 'type': 'object'}, + 'RelationIds': {'additionalProperties': False, + 'properties': {'relation-ids': {'items': {'type': 'integer'}, + 'type': 'array'}}, + 'required': ['relation-ids'], + 'type': 'object'}, + 'RelationResult': {'additionalProperties': False, + 'properties': {'endpoint': {'$ref': '#/definitions/Endpoint'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'integer'}, + 'key': {'type': 'string'}, + 'life': {'type': 'string'}}, + 'required': ['life', + 'id', + 'key', + 'endpoint'], + 'type': 'object'}, + 'RelationResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/RelationResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'RelationUnit': {'additionalProperties': False, + 'properties': {'relation': {'type': 'string'}, + 'unit': {'type': 'string'}}, + 'required': ['relation', 'unit'], + 'type': 'object'}, + 'RelationUnitPair': {'additionalProperties': False, + 'properties': {'local-unit': {'type': 'string'}, + 'relation': {'type': 'string'}, + 'remote-unit': {'type': 'string'}}, + 'required': ['relation', + 'local-unit', + 'remote-unit'], + 'type': 'object'}, + 'RelationUnitPairs': {'additionalProperties': False, + 'properties': {'relation-unit-pairs': {'items': {'$ref': '#/definitions/RelationUnitPair'}, + 'type': 'array'}}, + 'required': ['relation-unit-pairs'], + 'type': 'object'}, + 'RelationUnitSettings': {'additionalProperties': False, + 'properties': {'relation': {'type': 'string'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}, + 'unit': {'type': 'string'}}, + 'required': ['relation', + 'unit', + 'settings'], + 'type': 'object'}, + 'RelationUnits': {'additionalProperties': False, + 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'}, + 'type': 'array'}}, + 'required': ['relation-units'], + 'type': 'object'}, + 'RelationUnitsChange': {'additionalProperties': False, + 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, + 'type': 'object'}, + 'departed': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'required': ['changed'], + 'type': 'object'}, + 'RelationUnitsSettings': {'additionalProperties': False, + 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnitSettings'}, + 'type': 'array'}}, + 'required': ['relation-units'], + 'type': 'object'}, + 'RelationUnitsWatchResult': {'additionalProperties': False, + 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, + 'error': {'$ref': '#/definitions/Error'}, + 'watcher-id': {'type': 'string'}}, + 'required': ['watcher-id', + 'changes'], + 'type': 'object'}, + 'RelationUnitsWatchResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'ResolvedModeResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'mode': {'type': 'string'}}, + 'required': ['mode'], + 'type': 'object'}, + 'ResolvedModeResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/ResolvedModeResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'SetStatus': {'additionalProperties': False, + 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, + 'type': 'array'}}, + 'required': ['entities'], + 'type': 'object'}, + 'SettingsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'settings': {'patternProperties': {'.*': {'type': 'string'}}, + 'type': 'object'}}, + 'required': ['settings'], + 'type': 'object'}, + 'SettingsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'StatusResult': {'additionalProperties': False, + 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, + 'type': 'object'}}, + 'type': 'object'}, + 'error': {'$ref': '#/definitions/Error'}, + 'id': {'type': 'string'}, + 'info': {'type': 'string'}, + 'life': {'type': 'string'}, + 'since': {'format': 'date-time', + 'type': 'string'}, + 'status': {'type': 'string'}}, + 'required': ['id', + 'life', + 'status', + 'info', + 'data', + 'since'], + 'type': 'object'}, + 'StatusResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, + 'type': 'array'}}, + 'required': ['results'], + 'type': 'object'}, + 'StorageAddParams': {'additionalProperties': False, + 'properties': {'name': {'type': 'string'}, + 'storage': {'$ref': '#/definitions/StorageConstraints'}, + 'unit': {'type': 'string'}}, + 'required': ['unit', 'name', 'storage'], + 'type': 'object'}, + 'StorageAttachment': {'additionalProperties': False, + 'properties': {'kind': {'type': 'integer'}, + 'life': {'type': 'string'}, + 'location': {'type': 'string'}, + 'owner-tag': {'type': 'string'}, + 'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'owner-tag', + 'unit-tag', + 'kind', + 'location', + 'life'], + 'type': 'object'}, + 'StorageAttachmentId': {'additionalProperties': False, + 'properties': {'storage-tag': {'type': 'string'}, + 'unit-tag': {'type': 'string'}}, + 'required': ['storage-tag', + 'unit-tag'], + 'type': 'object'}, + 'StorageAttachmentIds': {'additionalProperties': False, + 'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'}, + 'type': 'array'}}, + 'required': ['ids'], + 'type': 'object'}, + 'StorageAttachmentIdsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/StorageAttachmentIds'}}, + 'required': ['result'], + 'type': 'object'}, + 'StorageAttachmentIdsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentIdsResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageAttachmentResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'$ref': '#/definitions/StorageAttachment'}}, + 'required': ['result'], + 'type': 'object'}, + 'StorageAttachmentResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentResult'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StorageConstraints': {'additionalProperties': False, + 'properties': {'count': {'type': 'integer'}, + 'pool': {'type': 'string'}, + 'size': {'type': 'integer'}}, + 'type': 'object'}, + 'StoragesAddParams': {'additionalProperties': False, + 'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'}, + 'type': 'array'}}, + 'required': ['storages'], + 'type': 'object'}, + 'StringBoolResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'ok': {'type': 'boolean'}, + 'result': {'type': 'string'}}, + 'required': ['result', 'ok'], + 'type': 'object'}, + 'StringBoolResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StringBoolResult'}, + 'type': 'array'}}, + 'required': ['results'], + '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'}, + 'StringsResult': {'additionalProperties': False, + 'properties': {'error': {'$ref': '#/definitions/Error'}, + 'result': {'items': {'type': 'string'}, + 'type': 'array'}}, + 'type': 'object'}, + 'StringsResults': {'additionalProperties': False, + 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, + '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'}, + 'UnitSettings': {'additionalProperties': False, + 'properties': {'version': {'type': 'integer'}}, + 'required': ['version'], + 'type': 'object'}}, + 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, + 'type': 'object'}, + 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, + 'type': 'object'}, + 'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ActionResults'}}, + 'type': 'object'}, + 'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'AddUnitStorage': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MachinePortsResults'}}, + 'type': 'object'}, + 'ApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ApplicationStatusResults'}}, + 'type': 'object'}, + 'AssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, + 'type': 'object'}, + 'CharmArchiveSha256': {'properties': {'Params': {'$ref': '#/definitions/CharmURLs'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'CharmModifiedVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/IntResults'}}, + 'type': 'object'}, + 'CharmURL': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringBoolResults'}}, + 'type': 'object'}, + 'ClearResolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ClosePorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ConfigSettingsResults'}}, + 'type': 'object'}, + 'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}}, + 'type': 'object'}, + 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DestroyAllSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'DestroyUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'EnterScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/MeterStatusResults'}}, + 'type': 'object'}, + 'GetPrincipal': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringBoolResults'}}, + 'type': 'object'}, + 'HasSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/BoolResults'}}, + 'type': 'object'}, + 'JoinedRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsResults'}}, + 'type': 'object'}, + 'LeaveScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'Merge': {'properties': {'Params': {'$ref': '#/definitions/MergeLeadershipSettingsBulkParams'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, + 'type': 'object'}, + 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'NetworkInfo': {'properties': {'Params': {'$ref': '#/definitions/NetworkInfoParams'}, + 'Result': {'$ref': '#/definitions/NetworkInfoResults'}}, + 'type': 'object'}, + 'OpenPorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'ProviderType': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}, + 'Read': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/GetLeadershipSettingsBulkResults'}}, + 'type': 'object'}, + 'ReadRemoteSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitPairs'}, + 'Result': {'$ref': '#/definitions/SettingsResults'}}, + 'type': 'object'}, + 'ReadSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/SettingsResults'}}, + 'type': 'object'}, + 'Relation': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/RelationResults'}}, + 'type': 'object'}, + 'RelationById': {'properties': {'Params': {'$ref': '#/definitions/RelationIds'}, + 'Result': {'$ref': '#/definitions/RelationResults'}}, + 'type': 'object'}, + 'RemoveStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/ResolvedModeResults'}}, + 'type': 'object'}, + 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, + 'type': 'object'}, + 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/EntitiesCharmURL'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'SetWorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/EntityWorkloadVersions'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'StorageAttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/LifeResults'}}, + 'type': 'object'}, + 'StorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/StorageAttachmentResults'}}, + 'type': 'object'}, + 'UnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StatusResults'}}, + 'type': 'object'}, + 'UnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StorageAttachmentIdsResults'}}, + 'type': 'object'}, + 'UpdateSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitsSettings'}, + 'Result': {'$ref': '#/definitions/ErrorResults'}}, + 'type': 'object'}, + 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, + 'type': 'object'}, + 'WatchLeadershipSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, + 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}}, + 'type': 'object'}, + 'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchUnitAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, + 'type': 'object'}, + 'WatchUnitRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WatchUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, + 'type': 'object'}, + 'WorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, + 'Result': {'$ref': '#/definitions/StringResults'}}, + 'type': 'object'}}, + 'type': 'object'} + + + @ReturnMapping(StringsResult) + async def APIAddresses(self): + ''' + - Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]] ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='APIAddresses', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='APIAddresses', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(APIHostPortsResult) + async def APIHostPorts(self): + ''' + - Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ Returns -> typing.Sequence[~HostPort] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='APIHostPorts', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='APIHostPorts', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ActionResults) + async def Actions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Actions', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Actions', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def AddMetricBatches(self, batches): + ''' - batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ batches : typing.Sequence[~MetricBatchParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AddMetricBatches', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='AddMetricBatches', ++ version=5, ++ params=_params) + _params['batches'] = batches + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def AddUnitStorage(self, storages): + ''' - storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ storages : typing.Sequence[~StorageAddParams] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AddUnitStorage', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='AddUnitStorage', ++ version=5, ++ params=_params) + _params['storages'] = storages + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MachinePortsResults) + async def AllMachinePorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachinePortsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AllMachinePorts', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='AllMachinePorts', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ApplicationStatusResults) + async def ApplicationStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ApplicationStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ApplicationStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def AssignedMachine(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AssignedMachine', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='AssignedMachine', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def AvailabilityZone(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='AvailabilityZone', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='AvailabilityZone', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def BeginActions(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='BeginActions', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='BeginActions', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BytesResult) + async def CACert(self): + ''' + - Returns -> typing.Sequence<+T_co>[int] ++ Returns -> typing.Sequence[int] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CACert', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='CACert', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def CharmArchiveSha256(self, urls): + ''' - urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ urls : typing.Sequence[~CharmURL] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmArchiveSha256', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmArchiveSha256', ++ version=5, ++ params=_params) + _params['urls'] = urls + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(IntResults) + async def CharmModifiedVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmModifiedVersion', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmModifiedVersion', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringBoolResults) + async def CharmURL(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CharmURL', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='CharmURL', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ClearResolved(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ClearResolved', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ClearResolved', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def ClosePorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ClosePorts', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ClosePorts', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ConfigSettingsResults) + async def ConfigSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigSettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ConfigSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ConfigSettings', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelResult) + async def CurrentModel(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='CurrentModel', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='CurrentModel', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Destroy(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Destroy', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Destroy', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyAllSubordinates(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='DestroyAllSubordinates', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='DestroyAllSubordinates', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def DestroyUnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='DestroyUnitStorageAttachments', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnsureDead(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='EnsureDead', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='EnsureDead', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def EnterScope(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='EnterScope', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='EnterScope', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def FinishActions(self, results): + ''' - results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ results : typing.Sequence[~ActionExecutionResult] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='FinishActions', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='FinishActions', ++ version=5, ++ params=_params) + _params['results'] = results + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(MeterStatusResults) + async def GetMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MeterStatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='GetMeterStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='GetMeterStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringBoolResults) + async def GetPrincipal(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='GetPrincipal', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='GetPrincipal', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(BoolResults) + async def HasSubordinates(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='HasSubordinates', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='HasSubordinates', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsResults) + async def JoinedRelations(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='JoinedRelations', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='JoinedRelations', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def LeaveScope(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='LeaveScope', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='LeaveScope', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def Life(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Life', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Life', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def Merge(self, params): + ''' - params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ params : typing.Sequence[~MergeLeadershipSettingsParam] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Merge', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Merge', ++ version=5, ++ params=_params) + _params['params'] = params + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ModelConfigResult) + async def ModelConfig(self): + ''' + - Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ Returns -> typing.Mapping[str, typing.Any] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ModelConfig', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ModelConfig', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def ModelUUID(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ModelUUID', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ModelUUID', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NetworkInfoResults) + async def NetworkInfo(self, bindings, unit): + ''' - bindings : typing.Sequence<+T_co>[str] ++ bindings : typing.Sequence[str] + unit : str - Returns -> typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult> ++ Returns -> typing.Mapping[str, ~NetworkInfoResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='NetworkInfo', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='NetworkInfo', ++ version=5, ++ params=_params) + _params['bindings'] = bindings + _params['unit'] = unit + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def OpenPorts(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='OpenPorts', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='OpenPorts', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def PrivateAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='PrivateAddress', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='PrivateAddress', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def ProviderType(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ProviderType', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ProviderType', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def PublicAddress(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='PublicAddress', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='PublicAddress', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(GetLeadershipSettingsBulkResults) + async def Read(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~GetLeadershipSettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Read', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Read', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SettingsResults) + async def ReadRemoteSettings(self, relation_unit_pairs): + ''' - relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair> - Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult> ++ relation_unit_pairs : typing.Sequence[~RelationUnitPair] ++ Returns -> typing.Sequence[~SettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ReadRemoteSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ReadRemoteSettings', ++ version=5, ++ params=_params) + _params['relation-unit-pairs'] = relation_unit_pairs + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(SettingsResults) + async def ReadSettings(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~SettingsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='ReadSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='ReadSettings', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationResults) + async def Relation(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Relation', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Relation', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationResults) + async def RelationById(self, relation_ids): + ''' - relation_ids : typing.Sequence<+T_co>[int] - Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult> ++ relation_ids : typing.Sequence[int] ++ Returns -> typing.Sequence[~RelationResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RelationById', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='RelationById', ++ version=5, ++ params=_params) + _params['relation-ids'] = relation_ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RemoveStorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RemoveStorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='RemoveStorageAttachments', ++ version=5, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def RequestReboot(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='RequestReboot', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='RequestReboot', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ResolvedModeResults) + async def Resolved(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ResolvedModeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Resolved', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Resolved', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResult) + async def SLALevel(self): + ''' + + Returns -> typing.Union[_ForwardRef('Error'), str] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SLALevel', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SLALevel', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetAgentStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetAgentStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetAgentStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetApplicationStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetApplicationStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetApplicationStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetCharmURL(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityCharmURL] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetCharmURL', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetCharmURL', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetUnitStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetUnitStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetUnitStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def SetWorkloadVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ entities : typing.Sequence[~EntityWorkloadVersion] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='SetWorkloadVersion', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='SetWorkloadVersion', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(LifeResults) + async def StorageAttachmentLife(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~LifeResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='StorageAttachmentLife', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='StorageAttachmentLife', ++ version=5, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageAttachmentResults) + async def StorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~StorageAttachmentResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='StorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='StorageAttachments', ++ version=5, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StatusResults) + async def UnitStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UnitStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='UnitStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StorageAttachmentIdsResults) + async def UnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StorageAttachmentIdsResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UnitStorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='UnitStorageAttachments', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(ErrorResults) + async def UpdateSettings(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings> - Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ relation_units : typing.Sequence[~RelationUnitSettings] ++ Returns -> typing.Sequence[~ErrorResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='UpdateSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='UpdateSettings', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def Watch(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='Watch', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='Watch', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchAPIHostPorts(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchAPIHostPorts', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchAPIHostPorts', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchActionNotifications(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchActionNotifications', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchActionNotifications', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchConfigSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchConfigSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchConfigSettings', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResult) + async def WatchForModelConfigChanges(self): + ''' + + Returns -> typing.Union[str, _ForwardRef('Error')] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchForModelConfigChanges', ++ version=5, ++ params=_params) + + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchLeadershipSettings(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchLeadershipSettings', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchLeadershipSettings', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchMeterStatus(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchMeterStatus', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchMeterStatus', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(RelationUnitsWatchResults) + async def WatchRelationUnits(self, relation_units): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> - Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult> ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationUnitsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchRelationUnits', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchRelationUnits', ++ version=5, ++ params=_params) + _params['relation-units'] = relation_units + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchStorageAttachments(self, ids): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchStorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchStorageAttachments', ++ version=5, ++ params=_params) + _params['ids'] = ids + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(NotifyWatchResults) + async def WatchUnitAddresses(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchUnitAddresses', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchUnitAddresses', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchUnitRelations(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchUnitRelations', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchUnitRelations', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringsWatchResults) + async def WatchUnitStorageAttachments(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WatchUnitStorageAttachments', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply + + + + @ReturnMapping(StringResults) + async def WorkloadVersion(self, entities): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> - Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] + ''' + # map input types to rpc msg + _params = dict() - msg = dict(type='Uniter', request='WorkloadVersion', version=5, params=_params) ++ msg = dict(type='Uniter', ++ request='WorkloadVersion', ++ version=5, ++ params=_params) + _params['entities'] = entities + reply = await self.rpc(msg) + return reply diff --cc modules/libjuju/juju/client/_client7.py index 0000000,0000000..1d6cd48 new file mode 100644 --- /dev/null +++ b/modules/libjuju/juju/client/_client7.py @@@ -1,0 -1,0 +1,1770 @@@ ++# 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 * ++ ++ ++class ProvisionerFacade(Type): ++ name = 'Provisioner' ++ version = 7 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'Binary': {'additionalProperties': False, ++ 'properties': {'Arch': {'type': 'string'}, ++ 'Number': {'$ref': '#/definitions/Number'}, ++ 'Series': {'type': 'string'}}, ++ 'required': ['Number', 'Series', 'Arch'], ++ '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'}, ++ 'BytesResult': {'additionalProperties': False, ++ 'properties': {'result': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['result'], ++ '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'}, ++ 'CloudImageMetadata': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'image-id': {'type': 'string'}, ++ 'priority': {'type': 'integer'}, ++ 'region': {'type': 'string'}, ++ 'root-storage-size': {'type': 'integer'}, ++ 'root-storage-type': {'type': 'string'}, ++ 'series': {'type': 'string'}, ++ 'source': {'type': 'string'}, ++ 'stream': {'type': 'string'}, ++ 'version': {'type': 'string'}, ++ 'virt-type': {'type': 'string'}}, ++ 'required': ['image-id', ++ 'region', ++ 'version', ++ 'series', ++ 'arch', ++ 'source', ++ 'priority'], ++ 'type': 'object'}, ++ 'ConstraintsResult': {'additionalProperties': False, ++ 'properties': {'constraints': {'$ref': '#/definitions/Value'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'ConstraintsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ConstraintsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ContainerConfig': {'additionalProperties': False, ++ 'properties': {'UpdateBehavior': {'$ref': '#/definitions/UpdateBehavior'}, ++ 'apt-mirror': {'type': 'string'}, ++ 'apt-proxy': {'$ref': '#/definitions/Settings'}, ++ 'authorized-keys': {'type': 'string'}, ++ 'cloudinit-userdata': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'container-inherit-properties': {'type': 'string'}, ++ 'juju-proxy': {'$ref': '#/definitions/Settings'}, ++ 'legacy-proxy': {'$ref': '#/definitions/Settings'}, ++ 'provider-type': {'type': 'string'}, ++ 'snap-proxy': {'$ref': '#/definitions/Settings'}, ++ 'ssl-hostname-verification': {'type': 'boolean'}}, ++ 'required': ['provider-type', ++ 'authorized-keys', ++ 'ssl-hostname-verification', ++ 'legacy-proxy', ++ 'juju-proxy', ++ 'apt-proxy', ++ 'snap-proxy', ++ 'apt-mirror', ++ 'UpdateBehavior'], ++ 'type': 'object'}, ++ 'ContainerLXDProfile': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'profile': {'$ref': '#/definitions/CharmLXDProfile'}}, ++ 'required': ['profile', 'name'], ++ 'type': 'object'}, ++ 'ContainerManagerConfig': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ContainerManagerConfigParams': {'additionalProperties': False, ++ 'properties': {'type': {'type': 'string'}}, ++ 'required': ['type'], ++ 'type': 'object'}, ++ 'ContainerProfileResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'lxd-profiles': {'items': {'$ref': '#/definitions/ContainerLXDProfile'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ContainerProfileResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ContainerProfileResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'DeviceBridgeInfo': {'additionalProperties': False, ++ 'properties': {'bridge-name': {'type': 'string'}, ++ 'host-device-name': {'type': 'string'}, ++ 'mac-address': {'type': 'string'}}, ++ 'required': ['host-device-name', ++ 'bridge-name', ++ 'mac-address'], ++ 'type': 'object'}, ++ 'DistributionGroupResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'DistributionGroupResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/DistributionGroupResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'EntityPassword': {'additionalProperties': False, ++ 'properties': {'password': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'password'], ++ 'type': 'object'}, ++ 'EntityPasswords': {'additionalProperties': False, ++ 'properties': {'changes': {'items': {'$ref': '#/definitions/EntityPassword'}, ++ 'type': 'array'}}, ++ 'required': ['changes'], ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'FindToolsParams': {'additionalProperties': False, ++ 'properties': {'agentstream': {'type': 'string'}, ++ 'arch': {'type': 'string'}, ++ 'major': {'type': 'integer'}, ++ 'minor': {'type': 'integer'}, ++ 'number': {'$ref': '#/definitions/Number'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['number', ++ 'major', ++ 'minor', ++ 'arch', ++ 'series', ++ 'agentstream'], ++ 'type': 'object'}, ++ 'FindToolsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'list': {'items': {'$ref': '#/definitions/Tools'}, ++ 'type': 'array'}}, ++ 'required': ['list'], ++ 'type': 'object'}, ++ 'HardwareCharacteristics': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'availability-zone': {'type': 'string'}, ++ 'cpu-cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'HostNetworkChange': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'new-bridges': {'items': {'$ref': '#/definitions/DeviceBridgeInfo'}, ++ 'type': 'array'}, ++ 'reconfigure-delay': {'type': 'integer'}}, ++ 'required': ['new-bridges', ++ 'reconfigure-delay'], ++ 'type': 'object'}, ++ 'HostNetworkChangeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/HostNetworkChange'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ 'type': 'object'}, ++ 'InstanceInfo': {'additionalProperties': False, ++ 'properties': {'characteristics': {'$ref': '#/definitions/HardwareCharacteristics'}, ++ 'charm-profiles': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'instance-id': {'type': 'string'}, ++ 'network-config': {'items': {'$ref': '#/definitions/NetworkConfig'}, ++ 'type': 'array'}, ++ 'nonce': {'type': 'string'}, ++ 'tag': {'type': 'string'}, ++ 'volume-attachments': {'patternProperties': {'.*': {'$ref': '#/definitions/VolumeAttachmentInfo'}}, ++ 'type': 'object'}, ++ 'volumes': {'items': {'$ref': '#/definitions/Volume'}, ++ 'type': 'array'}}, ++ 'required': ['tag', ++ 'instance-id', ++ 'nonce', ++ 'characteristics', ++ 'volumes', ++ 'volume-attachments', ++ 'network-config', ++ 'charm-profiles'], ++ 'type': 'object'}, ++ 'InstancesInfo': {'additionalProperties': False, ++ 'properties': {'machines': {'items': {'$ref': '#/definitions/InstanceInfo'}, ++ 'type': 'array'}}, ++ 'required': ['machines'], ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachineContainers': {'additionalProperties': False, ++ 'properties': {'container-types': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'machine-tag': {'type': 'string'}}, ++ 'required': ['machine-tag', ++ 'container-types'], ++ 'type': 'object'}, ++ 'MachineContainersParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/MachineContainers'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'MachineNetworkConfigResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'info': {'items': {'$ref': '#/definitions/NetworkConfig'}, ++ 'type': 'array'}}, ++ 'required': ['info'], ++ 'type': 'object'}, ++ 'MachineNetworkConfigResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MachineNetworkConfigResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ModelConfigResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'NetworkConfig': {'additionalProperties': False, ++ 'properties': {'address': {'type': 'string'}, ++ 'cidr': {'type': 'string'}, ++ 'config-type': {'type': 'string'}, ++ 'device-index': {'type': 'integer'}, ++ 'disabled': {'type': 'boolean'}, ++ 'dns-search-domains': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'dns-servers': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'gateway-address': {'type': 'string'}, ++ 'interface-name': {'type': 'string'}, ++ 'interface-type': {'type': 'string'}, ++ 'is-default-gateway': {'type': 'boolean'}, ++ 'mac-address': {'type': 'string'}, ++ 'mtu': {'type': 'integer'}, ++ 'no-auto-start': {'type': 'boolean'}, ++ 'parent-interface-name': {'type': 'string'}, ++ 'provider-address-id': {'type': 'string'}, ++ 'provider-id': {'type': 'string'}, ++ 'provider-space-id': {'type': 'string'}, ++ 'provider-subnet-id': {'type': 'string'}, ++ 'provider-vlan-id': {'type': 'string'}, ++ 'routes': {'items': {'$ref': '#/definitions/NetworkRoute'}, ++ 'type': 'array'}, ++ 'vlan-tag': {'type': 'integer'}}, ++ 'required': ['device-index', ++ 'mac-address', ++ 'cidr', ++ 'mtu', ++ 'provider-id', ++ 'provider-subnet-id', ++ 'provider-space-id', ++ 'provider-address-id', ++ 'provider-vlan-id', ++ 'vlan-tag', ++ 'interface-name', ++ 'parent-interface-name', ++ 'interface-type', ++ 'disabled'], ++ 'type': 'object'}, ++ 'NetworkRoute': {'additionalProperties': False, ++ 'properties': {'destination-cidr': {'type': 'string'}, ++ 'gateway-ip': {'type': 'string'}, ++ 'metric': {'type': 'integer'}}, ++ 'required': ['destination-cidr', ++ 'gateway-ip', ++ 'metric'], ++ 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ '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'}, ++ 'ProfileChangeResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'new-profile-name': {'type': 'string'}, ++ 'old-profile-name': {'type': 'string'}, ++ 'profile': {'$ref': '#/definitions/CharmLXDProfile'}, ++ 'subordinate': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'ProfileChangeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ProfileChangeResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ProvisioningInfo': {'additionalProperties': False, ++ 'properties': {'charm-lxd-profiles': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'cloudinit-userdata': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'controller-config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'image-metadata': {'items': {'$ref': '#/definitions/CloudImageMetadata'}, ++ 'type': 'array'}, ++ 'jobs': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'placement': {'type': 'string'}, ++ 'series': {'type': 'string'}, ++ 'subnets-to-zones': {'patternProperties': {'.*': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'tags': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'volume-attachments': {'items': {'$ref': '#/definitions/VolumeAttachmentParams'}, ++ 'type': 'array'}, ++ 'volumes': {'items': {'$ref': '#/definitions/VolumeParams'}, ++ 'type': 'array'}}, ++ 'required': ['constraints', ++ 'series', ++ 'placement', ++ 'jobs'], ++ 'type': 'object'}, ++ 'ProvisioningInfoResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/ProvisioningInfo'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'ProvisioningInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ProvisioningInfoResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'SetMachineNetworkConfig': {'additionalProperties': False, ++ 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'}, ++ 'type': 'array'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'config'], ++ 'type': 'object'}, ++ 'SetProfileArg': {'additionalProperties': False, ++ 'properties': {'entity': {'$ref': '#/definitions/Entity'}, ++ 'profiles': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['entity', 'profiles'], ++ 'type': 'object'}, ++ 'SetProfileArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/SetProfileArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'SetProfileUpgradeCompleteArg': {'additionalProperties': False, ++ 'properties': {'entity': {'$ref': '#/definitions/Entity'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['entity', ++ 'message'], ++ 'type': 'object'}, ++ 'SetProfileUpgradeCompleteArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/SetProfileUpgradeCompleteArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'Settings': {'additionalProperties': False, ++ 'properties': {'AutoNoProxy': {'type': 'string'}, ++ 'Ftp': {'type': 'string'}, ++ 'Http': {'type': 'string'}, ++ 'Https': {'type': 'string'}, ++ 'NoProxy': {'type': 'string'}}, ++ 'required': ['Http', ++ 'Https', ++ 'Ftp', ++ 'NoProxy', ++ 'AutoNoProxy'], ++ 'type': 'object'}, ++ 'StatusResult': {'additionalProperties': False, ++ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'id': {'type': 'string'}, ++ 'info': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'since': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id', ++ 'life', ++ 'status', ++ 'info', ++ 'data', ++ 'since'], ++ 'type': 'object'}, ++ 'StatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StringsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'}, ++ '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'}, ++ 'Tools': {'additionalProperties': False, ++ 'properties': {'sha256': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'url': {'type': 'string'}, ++ 'version': {'$ref': '#/definitions/Binary'}}, ++ 'required': ['version', 'url', 'size'], ++ 'type': 'object'}, ++ 'ToolsResult': {'additionalProperties': False, ++ 'properties': {'disable-ssl-hostname-verification': {'type': 'boolean'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'tools': {'items': {'$ref': '#/definitions/Tools'}, ++ 'type': 'array'}}, ++ 'required': ['tools', ++ 'disable-ssl-hostname-verification'], ++ 'type': 'object'}, ++ 'ToolsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ToolsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'UpdateBehavior': {'additionalProperties': False, ++ 'properties': {'enable-os-refresh-update': {'type': 'boolean'}, ++ 'enable-os-upgrade': {'type': 'boolean'}}, ++ 'required': ['enable-os-refresh-update', ++ 'enable-os-upgrade'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ 'spaces': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'tags': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'virt-type': {'type': 'string'}, ++ 'zones': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Volume': {'additionalProperties': False, ++ 'properties': {'info': {'$ref': '#/definitions/VolumeInfo'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', 'info'], ++ 'type': 'object'}, ++ 'VolumeAttachmentInfo': {'additionalProperties': False, ++ 'properties': {'bus-address': {'type': 'string'}, ++ 'device-link': {'type': 'string'}, ++ 'device-name': {'type': 'string'}, ++ 'plan-info': {'$ref': '#/definitions/VolumeAttachmentPlanInfo'}, ++ 'read-only': {'type': 'boolean'}}, ++ 'type': 'object'}, ++ 'VolumeAttachmentParams': {'additionalProperties': False, ++ 'properties': {'instance-id': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}, ++ 'provider': {'type': 'string'}, ++ 'read-only': {'type': 'boolean'}, ++ 'volume-id': {'type': 'string'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'machine-tag', ++ 'provider'], ++ 'type': 'object'}, ++ 'VolumeAttachmentPlanInfo': {'additionalProperties': False, ++ 'properties': {'device-attributes': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'device-type': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'VolumeInfo': {'additionalProperties': False, ++ 'properties': {'hardware-id': {'type': 'string'}, ++ 'persistent': {'type': 'boolean'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'volume-id': {'type': 'string'}, ++ 'wwn': {'type': 'string'}}, ++ 'required': ['volume-id', 'size', 'persistent'], ++ 'type': 'object'}, ++ 'VolumeParams': {'additionalProperties': False, ++ 'properties': {'attachment': {'$ref': '#/definitions/VolumeAttachmentParams'}, ++ 'attributes': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'provider': {'type': 'string'}, ++ 'size': {'type': 'integer'}, ++ 'tags': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'volume-tag': {'type': 'string'}}, ++ 'required': ['volume-tag', ++ 'size', ++ 'provider'], ++ 'type': 'object'}, ++ 'WatchContainer': {'additionalProperties': False, ++ 'properties': {'container-type': {'type': 'string'}, ++ 'machine-tag': {'type': 'string'}}, ++ 'required': ['machine-tag', ++ 'container-type'], ++ 'type': 'object'}, ++ 'WatchContainers': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/WatchContainer'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}}, ++ 'type': 'object'}, ++ 'CharmProfileChangeInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ProfileChangeResults'}}, ++ 'type': 'object'}, ++ 'Constraints': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ConstraintsResults'}}, ++ 'type': 'object'}, ++ 'ContainerConfig': {'properties': {'Result': {'$ref': '#/definitions/ContainerConfig'}}, ++ 'type': 'object'}, ++ 'ContainerManagerConfig': {'properties': {'Params': {'$ref': '#/definitions/ContainerManagerConfigParams'}, ++ 'Result': {'$ref': '#/definitions/ContainerManagerConfig'}}, ++ 'type': 'object'}, ++ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}}, ++ 'type': 'object'}, ++ 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}}, ++ 'type': 'object'}, ++ 'DistributionGroup': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/DistributionGroupResults'}}, ++ 'type': 'object'}, ++ 'DistributionGroupByMachineId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsResults'}}, ++ 'type': 'object'}, ++ 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'}, ++ 'Result': {'$ref': '#/definitions/FindToolsResult'}}, ++ 'type': 'object'}, ++ 'GetContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}}, ++ 'type': 'object'}, ++ 'GetContainerProfileInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ContainerProfileResults'}}, ++ 'type': 'object'}, ++ 'HostChangesForContainers': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/HostNetworkChangeResults'}}, ++ 'type': 'object'}, ++ 'InstanceId': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'InstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StatusResults'}}, ++ 'type': 'object'}, ++ 'KeepInstance': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/BoolResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'MachinesWithTransientErrors': {'properties': {'Result': {'$ref': '#/definitions/StatusResults'}}, ++ 'type': 'object'}, ++ 'MarkMachinesForRemoval': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'PrepareContainerInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachineNetworkConfigResults'}}, ++ 'type': 'object'}, ++ 'ProvisioningInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ProvisioningInfoResults'}}, ++ 'type': 'object'}, ++ 'ReleaseContainerAddresses': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RemoveUpgradeCharmProfileData': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Series': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'SetCharmProfiles': {'properties': {'Params': {'$ref': '#/definitions/SetProfileArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetHostMachineNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, ++ 'type': 'object'}, ++ 'SetInstanceInfo': {'properties': {'Params': {'$ref': '#/definitions/InstancesInfo'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetInstanceStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}}, ++ 'type': 'object'}, ++ 'SetPasswords': {'properties': {'Params': {'$ref': '#/definitions/EntityPasswords'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetSupportedContainers': {'properties': {'Params': {'$ref': '#/definitions/MachineContainersParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetUpgradeCharmProfileComplete': {'properties': {'Params': {'$ref': '#/definitions/SetProfileUpgradeCompleteArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'StateAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'Status': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StatusResults'}}, ++ 'type': 'object'}, ++ 'Tools': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ToolsResults'}}, ++ 'type': 'object'}, ++ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchAllContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchContainers': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchContainersCharmProfiles': {'properties': {'Params': {'$ref': '#/definitions/WatchContainers'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchMachineErrorRetry': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchModelMachines': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchModelMachinesCharmProfiles': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='APIAddresses', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='APIHostPorts', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def AvailabilityZone(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='AvailabilityZone', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BytesResult) ++ async def CACert(self): ++ ''' ++ ++ Returns -> typing.Sequence[int] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='CACert', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ProfileChangeResults) ++ async def CharmProfileChangeInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProfileChangeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='CharmProfileChangeInfo', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ConstraintsResults) ++ async def Constraints(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConstraintsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Constraints', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ContainerConfig) ++ async def ContainerConfig(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), bool] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ContainerConfig', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ContainerManagerConfig) ++ async def ContainerManagerConfig(self, type_): ++ ''' ++ type_ : str ++ Returns -> typing.Mapping[str, str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ContainerManagerConfig', ++ version=7, ++ params=_params) ++ _params['type'] = type_ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerAPIInfoResults) ++ async def ControllerAPIInfoForModels(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ControllerAPIInfoForModels', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ControllerConfigResult) ++ async def ControllerConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ControllerConfig', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DistributionGroupResults) ++ async def DistributionGroup(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~DistributionGroupResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='DistributionGroup', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsResults) ++ async def DistributionGroupByMachineId(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='DistributionGroupByMachineId', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnsureDead(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='EnsureDead', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(FindToolsResult) ++ async def FindTools(self, arch, major, minor, number, series): ++ ''' ++ arch : str ++ major : int ++ minor : int ++ number : Number ++ series : str ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='FindTools', ++ version=7, ++ params=_params) ++ _params['arch'] = arch ++ _params['major'] = major ++ _params['minor'] = minor ++ _params['number'] = number ++ _params['series'] = series ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachineNetworkConfigResults) ++ async def GetContainerInterfaceInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineNetworkConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='GetContainerInterfaceInfo', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ContainerProfileResults) ++ async def GetContainerProfileInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ContainerProfileResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='GetContainerProfileInfo', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(HostNetworkChangeResults) ++ async def HostChangesForContainers(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~HostNetworkChange] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='HostChangesForContainers', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def InstanceId(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='InstanceId', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusResults) ++ async def InstanceStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='InstanceStatus', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BoolResults) ++ async def KeepInstance(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='KeepInstance', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Life', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusResults) ++ async def MachinesWithTransientErrors(self): ++ ''' ++ ++ Returns -> typing.Sequence[~StatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='MachinesWithTransientErrors', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def MarkMachinesForRemoval(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='MarkMachinesForRemoval', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ModelConfig', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ModelUUID', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachineNetworkConfigResults) ++ async def PrepareContainerInterfaceInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachineNetworkConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='PrepareContainerInterfaceInfo', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ProvisioningInfoResults) ++ async def ProvisioningInfo(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ProvisioningInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ProvisioningInfo', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ReleaseContainerAddresses(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='ReleaseContainerAddresses', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Remove(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Remove', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RemoveUpgradeCharmProfileData(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='RemoveUpgradeCharmProfileData', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def Series(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Series', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetCharmProfiles(self, args): ++ ''' ++ args : typing.Sequence[~SetProfileArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetCharmProfiles', ++ version=7, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetHostMachineNetworkConfig(self, config, tag): ++ ''' ++ config : typing.Sequence[~NetworkConfig] ++ tag : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetHostMachineNetworkConfig', ++ version=7, ++ params=_params) ++ _params['config'] = config ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetInstanceInfo(self, machines): ++ ''' ++ machines : typing.Sequence[~InstanceInfo] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetInstanceInfo', ++ version=7, ++ params=_params) ++ _params['machines'] = machines ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetInstanceStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetInstanceStatus', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetObservedNetworkConfig(self, config, tag): ++ ''' ++ config : typing.Sequence[~NetworkConfig] ++ tag : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetObservedNetworkConfig', ++ version=7, ++ params=_params) ++ _params['config'] = config ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetPasswords(self, changes): ++ ''' ++ changes : typing.Sequence[~EntityPassword] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetPasswords', ++ version=7, ++ params=_params) ++ _params['changes'] = changes ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetProviderNetworkConfig(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetProviderNetworkConfig', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetStatus', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetSupportedContainers(self, params): ++ ''' ++ params : typing.Sequence[~MachineContainers] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetSupportedContainers', ++ version=7, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetUpgradeCharmProfileComplete(self, args): ++ ''' ++ args : typing.Sequence[~SetProfileUpgradeCompleteArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='SetUpgradeCharmProfileComplete', ++ version=7, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsResult) ++ async def StateAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='StateAddresses', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusResults) ++ async def Status(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Status', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ToolsResults) ++ async def Tools(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ToolsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='Tools', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='UpdateStatus', ++ version=7, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchAPIHostPorts', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchAllContainers(self, params): ++ ''' ++ params : typing.Sequence[~WatchContainer] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchAllContainers', ++ version=7, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchContainers(self, params): ++ ''' ++ params : typing.Sequence[~WatchContainer] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchContainers', ++ version=7, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchContainersCharmProfiles(self, params): ++ ''' ++ params : typing.Sequence[~WatchContainer] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchContainersCharmProfiles', ++ version=7, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForModelConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchForModelConfigChanges', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchMachineErrorRetry(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchMachineErrorRetry', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchModelMachines(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchModelMachines', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResult) ++ async def WatchModelMachinesCharmProfiles(self): ++ ''' ++ ++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Provisioner', ++ request='WatchModelMachinesCharmProfiles', ++ version=7, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ diff --cc modules/libjuju/juju/client/_client8.py index 0000000,0000000..35d3caf new file mode 100644 --- /dev/null +++ b/modules/libjuju/juju/client/_client8.py @@@ -1,0 -1,0 +1,1278 @@@ ++# 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 * ++ ++ ++class ApplicationFacade(Type): ++ name = 'Application' ++ version = 8 ++ schema = {'definitions': {'AddApplicationUnits': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'attach-storage': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'num-units': {'type': 'integer'}, ++ 'placement': {'items': {'$ref': '#/definitions/Placement'}, ++ 'type': 'array'}, ++ 'policy': {'type': 'string'}}, ++ 'required': ['application', ++ 'num-units', ++ 'placement'], ++ 'type': 'object'}, ++ 'AddApplicationUnitsResults': {'additionalProperties': False, ++ 'properties': {'units': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['units'], ++ 'type': 'object'}, ++ 'AddRelation': {'additionalProperties': False, ++ 'properties': {'endpoints': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'via-cidrs': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['endpoints'], ++ 'type': 'object'}, ++ 'AddRelationResults': {'additionalProperties': False, ++ 'properties': {'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}}, ++ 'type': 'object'}}, ++ 'required': ['endpoints'], ++ 'type': 'object'}, ++ 'ApplicationCharmRelations': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}}, ++ 'required': ['application'], ++ 'type': 'object'}, ++ 'ApplicationCharmRelationsResults': {'additionalProperties': False, ++ 'properties': {'charm-relations': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['charm-relations'], ++ 'type': 'object'}, ++ 'ApplicationConfigSet': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'config': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['application', 'config'], ++ 'type': 'object'}, ++ 'ApplicationConfigSetArgs': {'additionalProperties': False, ++ 'properties': {'Args': {'items': {'$ref': '#/definitions/ApplicationConfigSet'}, ++ 'type': 'array'}}, ++ 'required': ['Args'], ++ 'type': 'object'}, ++ 'ApplicationConfigUnsetArgs': {'additionalProperties': False, ++ 'properties': {'Args': {'items': {'$ref': '#/definitions/ApplicationUnset'}, ++ 'type': 'array'}}, ++ 'required': ['Args'], ++ 'type': 'object'}, ++ 'ApplicationConstraint': {'additionalProperties': False, ++ 'properties': {'constraints': {'$ref': '#/definitions/Value'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['constraints'], ++ 'type': 'object'}, ++ 'ApplicationDeploy': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'attach-storage': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'channel': {'type': 'string'}, ++ 'charm-url': {'type': 'string'}, ++ 'config': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'config-yaml': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'devices': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, ++ 'type': 'object'}, ++ 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'num-units': {'type': 'integer'}, ++ 'placement': {'items': {'$ref': '#/definitions/Placement'}, ++ 'type': 'array'}, ++ 'policy': {'type': 'string'}, ++ 'resources': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'series': {'type': 'string'}, ++ 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/Constraints'}}, ++ 'type': 'object'}}, ++ 'required': ['application', ++ 'series', ++ 'charm-url', ++ 'channel', ++ 'num-units', ++ 'config-yaml', ++ 'constraints'], ++ 'type': 'object'}, ++ 'ApplicationDestroy': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}}, ++ 'required': ['application'], ++ 'type': 'object'}, ++ 'ApplicationExpose': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}}, ++ 'required': ['application'], ++ 'type': 'object'}, ++ 'ApplicationGet': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}}, ++ 'required': ['application'], ++ 'type': 'object'}, ++ 'ApplicationGetConfigResults': {'additionalProperties': False, ++ 'properties': {'Results': {'items': {'$ref': '#/definitions/ConfigResult'}, ++ 'type': 'array'}}, ++ 'required': ['Results'], ++ 'type': 'object'}, ++ 'ApplicationGetConstraintsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationConstraint'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ApplicationGetResults': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'application-config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'charm': {'type': 'string'}, ++ 'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'series': {'type': 'string'}}, ++ 'required': ['application', ++ 'charm', ++ 'config', ++ 'constraints', ++ 'series'], ++ 'type': 'object'}, ++ 'ApplicationMetricCredential': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'metrics-credentials': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['application', ++ 'metrics-credentials'], ++ 'type': 'object'}, ++ 'ApplicationMetricCredentials': {'additionalProperties': False, ++ 'properties': {'creds': {'items': {'$ref': '#/definitions/ApplicationMetricCredential'}, ++ 'type': 'array'}}, ++ 'required': ['creds'], ++ 'type': 'object'}, ++ 'ApplicationOfferDetails': {'additionalProperties': False, ++ 'properties': {'application-description': {'type': 'string'}, ++ 'bindings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'}, ++ 'type': 'array'}, ++ 'offer-name': {'type': 'string'}, ++ 'offer-url': {'type': 'string'}, ++ 'offer-uuid': {'type': 'string'}, ++ 'source-model-tag': {'type': 'string'}, ++ 'spaces': {'items': {'$ref': '#/definitions/RemoteSpace'}, ++ 'type': 'array'}, ++ 'users': {'items': {'$ref': '#/definitions/OfferUserDetails'}, ++ 'type': 'array'}}, ++ 'required': ['source-model-tag', ++ 'offer-uuid', ++ 'offer-url', ++ 'offer-name', ++ 'application-description'], ++ 'type': 'object'}, ++ 'ApplicationSet': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'options': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['application', 'options'], ++ 'type': 'object'}, ++ 'ApplicationSetCharm': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'channel': {'type': 'string'}, ++ 'charm-url': {'type': 'string'}, ++ 'config-settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'config-settings-yaml': {'type': 'string'}, ++ 'force': {'type': 'boolean'}, ++ 'force-series': {'type': 'boolean'}, ++ 'force-units': {'type': 'boolean'}, ++ 'resource-ids': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'storage-constraints': {'patternProperties': {'.*': {'$ref': '#/definitions/StorageConstraints'}}, ++ 'type': 'object'}}, ++ 'required': ['application', ++ 'charm-url', ++ 'channel', ++ 'force', ++ 'force-units', ++ 'force-series'], ++ 'type': 'object'}, ++ 'ApplicationSetCharmProfile': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'charm-url': {'type': 'string'}}, ++ 'required': ['application', ++ 'charm-url'], ++ 'type': 'object'}, ++ 'ApplicationUnexpose': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}}, ++ 'required': ['application'], ++ 'type': 'object'}, ++ 'ApplicationUnset': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'options': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['application', 'options'], ++ 'type': 'object'}, ++ 'ApplicationUpdate': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'charm-url': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}, ++ 'force': {'type': 'boolean'}, ++ 'force-charm-url': {'type': 'boolean'}, ++ 'force-series': {'type': 'boolean'}, ++ 'min-units': {'type': 'integer'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'settings-yaml': {'type': 'string'}}, ++ 'required': ['application', ++ 'charm-url', ++ 'force-charm-url', ++ 'force-series', ++ 'force', ++ 'settings-yaml'], ++ 'type': 'object'}, ++ 'ApplicationsDeploy': {'additionalProperties': False, ++ 'properties': {'applications': {'items': {'$ref': '#/definitions/ApplicationDeploy'}, ++ 'type': 'array'}}, ++ 'required': ['applications'], ++ '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'}, ++ 'ConfigResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'Constraints': {'additionalProperties': False, ++ 'properties': {'Count': {'type': 'integer'}, ++ 'Pool': {'type': 'string'}, ++ 'Size': {'type': 'integer'}}, ++ 'required': ['Pool', 'Size', 'Count'], ++ 'type': 'object'}, ++ 'ConsumeApplicationArg': {'additionalProperties': False, ++ 'properties': {'ApplicationOfferDetails': {'$ref': '#/definitions/ApplicationOfferDetails'}, ++ 'application-alias': {'type': 'string'}, ++ 'external-controller': {'$ref': '#/definitions/ExternalControllerInfo'}, ++ 'macaroon': {'$ref': '#/definitions/Macaroon'}}, ++ 'required': ['ApplicationOfferDetails'], ++ 'type': 'object'}, ++ 'ConsumeApplicationArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/ConsumeApplicationArg'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyApplicationInfo': {'additionalProperties': False, ++ 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'destroyed-units': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyApplicationParams': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}, ++ 'destroy-storage': {'type': 'boolean'}}, ++ 'required': ['application-tag'], ++ 'type': 'object'}, ++ 'DestroyApplicationResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'info': {'$ref': '#/definitions/DestroyApplicationInfo'}}, ++ 'type': 'object'}, ++ 'DestroyApplicationResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyApplicationResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyApplicationUnits': {'additionalProperties': False, ++ 'properties': {'unit-names': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['unit-names'], ++ 'type': 'object'}, ++ 'DestroyApplicationsParams': {'additionalProperties': False, ++ 'properties': {'applications': {'items': {'$ref': '#/definitions/DestroyApplicationParams'}, ++ 'type': 'array'}}, ++ 'required': ['applications'], ++ 'type': 'object'}, ++ 'DestroyConsumedApplicationParams': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}}, ++ 'required': ['application-tag'], ++ 'type': 'object'}, ++ 'DestroyConsumedApplicationsParams': {'additionalProperties': False, ++ 'properties': {'applications': {'items': {'$ref': '#/definitions/DestroyConsumedApplicationParams'}, ++ 'type': 'array'}}, ++ 'required': ['applications'], ++ 'type': 'object'}, ++ 'DestroyRelation': {'additionalProperties': False, ++ 'properties': {'endpoints': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'relation-id': {'type': 'integer'}}, ++ 'required': ['relation-id'], ++ 'type': 'object'}, ++ 'DestroyUnitInfo': {'additionalProperties': False, ++ 'properties': {'destroyed-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}, ++ 'detached-storage': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyUnitParams': {'additionalProperties': False, ++ 'properties': {'destroy-storage': {'type': 'boolean'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['unit-tag'], ++ 'type': 'object'}, ++ 'DestroyUnitResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'info': {'$ref': '#/definitions/DestroyUnitInfo'}}, ++ 'type': 'object'}, ++ 'DestroyUnitResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/DestroyUnitResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'DestroyUnitsParams': {'additionalProperties': False, ++ 'properties': {'units': {'items': {'$ref': '#/definitions/DestroyUnitParams'}, ++ 'type': 'array'}}, ++ 'required': ['units'], ++ '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': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'LXDProfileUpgradeMessages': {'additionalProperties': False, ++ 'properties': {'application': {'$ref': '#/definitions/Entity'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['application', ++ 'watcher-id'], ++ 'type': 'object'}, ++ 'LXDProfileUpgradeMessagesResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'message': {'type': 'string'}, ++ 'unit-name': {'type': 'string'}}, ++ 'required': ['unit-name', ++ 'message'], ++ 'type': 'object'}, ++ 'LXDProfileUpgradeMessagesResults': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/LXDProfileUpgradeMessagesResult'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'NotifyWatchResult': {'additionalProperties': False, ++ 'properties': {'NotifyWatcherId': {'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}}, ++ 'required': ['NotifyWatcherId'], ++ 'type': 'object'}, ++ 'OfferUserDetails': {'additionalProperties': False, ++ 'properties': {'access': {'type': 'string'}, ++ 'display-name': {'type': 'string'}, ++ 'user': {'type': 'string'}}, ++ 'required': ['user', ++ 'display-name', ++ 'access'], ++ 'type': 'object'}, ++ 'Placement': {'additionalProperties': False, ++ 'properties': {'directive': {'type': 'string'}, ++ 'scope': {'type': 'string'}}, ++ 'required': ['scope', 'directive'], ++ 'type': 'object'}, ++ 'RelationSuspendedArg': {'additionalProperties': False, ++ 'properties': {'message': {'type': 'string'}, ++ 'relation-id': {'type': 'integer'}, ++ 'suspended': {'type': 'boolean'}}, ++ 'required': ['relation-id', ++ 'message', ++ 'suspended'], ++ 'type': 'object'}, ++ 'RelationSuspendedArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/RelationSuspendedArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ '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'}, ++ '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'}, ++ 'ScaleApplicationInfo': {'additionalProperties': False, ++ 'properties': {'num-units': {'type': 'integer'}}, ++ 'required': ['num-units'], ++ 'type': 'object'}, ++ 'ScaleApplicationParams': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}, ++ 'scale': {'type': 'integer'}, ++ 'scale-change': {'type': 'integer'}}, ++ 'required': ['application-tag', ++ 'scale'], ++ 'type': 'object'}, ++ 'ScaleApplicationResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'info': {'$ref': '#/definitions/ScaleApplicationInfo'}}, ++ 'type': 'object'}, ++ 'ScaleApplicationResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ScaleApplicationResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ScaleApplicationsParams': {'additionalProperties': False, ++ 'properties': {'applications': {'items': {'$ref': '#/definitions/ScaleApplicationParams'}, ++ 'type': 'array'}}, ++ 'required': ['applications'], ++ 'type': 'object'}, ++ 'SetConstraints': {'additionalProperties': False, ++ 'properties': {'application': {'type': 'string'}, ++ 'constraints': {'$ref': '#/definitions/Value'}}, ++ 'required': ['application', 'constraints'], ++ 'type': 'object'}, ++ 'StorageConstraints': {'additionalProperties': False, ++ 'properties': {'count': {'type': 'integer'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}}, ++ 'type': 'object'}, ++ 'StringResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result'], ++ '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'}, ++ 'UnitsResolved': {'additionalProperties': False, ++ 'properties': {'all': {'type': 'boolean'}, ++ 'retry': {'type': 'boolean'}, ++ 'tags': {'$ref': '#/definitions/Entities'}}, ++ 'type': 'object'}, ++ 'UpdateSeriesArg': {'additionalProperties': False, ++ 'properties': {'force': {'type': 'boolean'}, ++ 'series': {'type': 'string'}, ++ 'tag': {'$ref': '#/definitions/Entity'}}, ++ 'required': ['tag', 'force', 'series'], ++ 'type': 'object'}, ++ 'UpdateSeriesArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/UpdateSeriesArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'Value': {'additionalProperties': False, ++ 'properties': {'arch': {'type': 'string'}, ++ 'container': {'type': 'string'}, ++ 'cores': {'type': 'integer'}, ++ 'cpu-power': {'type': 'integer'}, ++ 'instance-type': {'type': 'string'}, ++ 'mem': {'type': 'integer'}, ++ 'root-disk': {'type': 'integer'}, ++ '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': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'}, ++ 'Result': {'$ref': '#/definitions/AddRelationResults'}}, ++ 'type': 'object'}, ++ 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'}, ++ 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}}, ++ 'type': 'object'}, ++ 'CharmConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetConfigResults'}}, ++ 'type': 'object'}, ++ 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'}, ++ 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}}, ++ 'type': 'object'}, ++ 'Consume': {'properties': {'Params': {'$ref': '#/definitions/ConsumeApplicationArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}}, ++ 'type': 'object'}, ++ 'DestroyApplication': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationsParams'}, ++ 'Result': {'$ref': '#/definitions/DestroyApplicationResults'}}, ++ 'type': 'object'}, ++ 'DestroyConsumedApplications': {'properties': {'Params': {'$ref': '#/definitions/DestroyConsumedApplicationsParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}}, ++ 'type': 'object'}, ++ 'DestroyUnit': {'properties': {'Params': {'$ref': '#/definitions/DestroyUnitsParams'}, ++ 'Result': {'$ref': '#/definitions/DestroyUnitResults'}}, ++ 'type': 'object'}, ++ 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}}, ++ 'type': 'object'}, ++ 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}}, ++ 'type': 'object'}, ++ 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetResults'}}, ++ 'type': 'object'}, ++ 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'}, ++ 'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'GetConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetConfigResults'}}, ++ 'type': 'object'}, ++ 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationGetConstraintsResults'}}, ++ 'type': 'object'}, ++ 'GetLXDProfileUpgradeMessages': {'properties': {'Params': {'$ref': '#/definitions/LXDProfileUpgradeMessages'}, ++ 'Result': {'$ref': '#/definitions/LXDProfileUpgradeMessagesResults'}}, ++ 'type': 'object'}, ++ 'ResolveUnitErrors': {'properties': {'Params': {'$ref': '#/definitions/UnitsResolved'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ScaleApplications': {'properties': {'Params': {'$ref': '#/definitions/ScaleApplicationsParams'}, ++ 'Result': {'$ref': '#/definitions/ScaleApplicationResults'}}, ++ 'type': 'object'}, ++ 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}}, ++ 'type': 'object'}, ++ 'SetApplicationsConfig': {'properties': {'Params': {'$ref': '#/definitions/ApplicationConfigSetArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}}, ++ 'type': 'object'}, ++ 'SetCharmProfile': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharmProfile'}}, ++ 'type': 'object'}, ++ 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}}, ++ 'type': 'object'}, ++ 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetRelationsSuspended': {'properties': {'Params': {'$ref': '#/definitions/RelationSuspendedArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}}, ++ 'type': 'object'}, ++ 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}}, ++ 'type': 'object'}, ++ 'UnsetApplicationsConfig': {'properties': {'Params': {'$ref': '#/definitions/ApplicationConfigUnsetArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}}, ++ 'type': 'object'}, ++ 'UpdateApplicationSeries': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'WatchLXDProfileUpgradeNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entity'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(AddRelationResults) ++ async def AddRelation(self, endpoints): ++ ''' ++ endpoints : typing.Sequence[str] ++ Returns -> typing.Mapping[str, ~CharmRelation] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='AddRelation', ++ version=8, ++ params=_params) ++ _params['endpoints'] = endpoints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(AddApplicationUnitsResults) ++ async def AddUnits(self, application, num_units, placement): ++ ''' ++ application : str ++ num_units : int ++ placement : typing.Sequence[~Placement] ++ Returns -> typing.Sequence[str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='AddUnits', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['num-units'] = num_units ++ _params['placement'] = placement ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationGetConfigResults) ++ async def CharmConfig(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='CharmConfig', ++ version=8, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationCharmRelationsResults) ++ async def CharmRelations(self, application): ++ ''' ++ application : str ++ Returns -> typing.Sequence[str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='CharmRelations', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Consume(self, args): ++ ''' ++ args : typing.Sequence[~ConsumeApplicationArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Consume', ++ version=8, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Deploy(self, applications): ++ ''' ++ applications : typing.Sequence[~ApplicationDeploy] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Deploy', ++ version=8, ++ params=_params) ++ _params['applications'] = applications ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Destroy(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Destroy', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DestroyApplicationResults) ++ async def DestroyApplication(self, applications): ++ ''' ++ applications : typing.Sequence[~DestroyApplicationParams] ++ Returns -> typing.Sequence[~DestroyApplicationResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyApplication', ++ version=8, ++ params=_params) ++ _params['applications'] = applications ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def DestroyConsumedApplications(self, applications): ++ ''' ++ applications : typing.Sequence[~DestroyConsumedApplicationParams] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyConsumedApplications', ++ version=8, ++ params=_params) ++ _params['applications'] = applications ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyRelation(self, endpoints): ++ ''' ++ endpoints : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyRelation', ++ version=8, ++ params=_params) ++ _params['endpoints'] = endpoints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(DestroyUnitResults) ++ async def DestroyUnit(self, units): ++ ''' ++ units : typing.Sequence[~DestroyUnitParams] ++ Returns -> typing.Sequence[~DestroyUnitResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyUnit', ++ version=8, ++ params=_params) ++ _params['units'] = units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def DestroyUnits(self, unit_names): ++ ''' ++ unit_names : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='DestroyUnits', ++ version=8, ++ params=_params) ++ _params['unit-names'] = unit_names ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Expose(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Expose', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationGetResults) ++ async def Get(self, application): ++ ''' ++ application : str ++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Get', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def GetCharmURL(self, application): ++ ''' ++ application : str ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetCharmURL', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationGetConfigResults) ++ async def GetConfig(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetConfig', ++ version=8, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationGetConstraintsResults) ++ async def GetConstraints(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationConstraint] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetConstraints', ++ version=8, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LXDProfileUpgradeMessagesResults) ++ async def GetLXDProfileUpgradeMessages(self, application, watcher_id): ++ ''' ++ application : Entity ++ watcher_id : str ++ Returns -> typing.Sequence[~LXDProfileUpgradeMessagesResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='GetLXDProfileUpgradeMessages', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['watcher-id'] = watcher_id ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ResolveUnitErrors(self, all_, retry, tags): ++ ''' ++ all_ : bool ++ retry : bool ++ tags : Entities ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='ResolveUnitErrors', ++ version=8, ++ params=_params) ++ _params['all'] = all_ ++ _params['retry'] = retry ++ _params['tags'] = tags ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ScaleApplicationResults) ++ async def ScaleApplications(self, applications): ++ ''' ++ applications : typing.Sequence[~ScaleApplicationParams] ++ Returns -> typing.Sequence[~ScaleApplicationResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='ScaleApplications', ++ version=8, ++ params=_params) ++ _params['applications'] = applications ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Set(self, application, options): ++ ''' ++ application : str ++ options : typing.Mapping[str, str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Set', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['options'] = options ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetApplicationsConfig(self, args): ++ ''' ++ args : typing.Sequence[~ApplicationConfigSet] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetApplicationsConfig', ++ version=8, ++ params=_params) ++ _params['Args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints): ++ ''' ++ application : str ++ channel : str ++ charm_url : str ++ config_settings : typing.Mapping[str, str] ++ config_settings_yaml : str ++ force_series : bool ++ force_units : bool ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetCharm', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['channel'] = channel ++ _params['charm-url'] = charm_url ++ _params['config-settings'] = config_settings ++ _params['config-settings-yaml'] = config_settings_yaml ++ _params['force-series'] = force_series ++ _params['force-units'] = force_units ++ _params['resource-ids'] = resource_ids ++ _params['storage-constraints'] = storage_constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetCharmProfile(self, application, charm_url): ++ ''' ++ application : str ++ charm_url : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetCharmProfile', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['charm-url'] = charm_url ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def SetConstraints(self, application, constraints): ++ ''' ++ application : str ++ constraints : Value ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetConstraints', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['constraints'] = constraints ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetMetricCredentials(self, creds): ++ ''' ++ creds : typing.Sequence[~ApplicationMetricCredential] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetMetricCredentials', ++ version=8, ++ params=_params) ++ _params['creds'] = creds ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetRelationsSuspended(self, args): ++ ''' ++ args : typing.Sequence[~RelationSuspendedArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='SetRelationsSuspended', ++ version=8, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Unexpose(self, application): ++ ''' ++ application : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Unexpose', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Unset(self, application, options): ++ ''' ++ application : str ++ options : typing.Sequence[str] ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Unset', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['options'] = options ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UnsetApplicationsConfig(self, args): ++ ''' ++ args : typing.Sequence[~ApplicationUnset] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='UnsetApplicationsConfig', ++ version=8, ++ params=_params) ++ _params['Args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(None) ++ async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml): ++ ''' ++ application : str ++ charm_url : str ++ constraints : Value ++ force_charm_url : bool ++ force_series : bool ++ min_units : int ++ settings : typing.Mapping[str, str] ++ settings_yaml : str ++ Returns -> None ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='Update', ++ version=8, ++ params=_params) ++ _params['application'] = application ++ _params['charm-url'] = charm_url ++ _params['constraints'] = constraints ++ _params['force-charm-url'] = force_charm_url ++ _params['force-series'] = force_series ++ _params['min-units'] = min_units ++ _params['settings'] = settings ++ _params['settings-yaml'] = settings_yaml ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateApplicationSeries(self, args): ++ ''' ++ args : typing.Sequence[~UpdateSeriesArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='UpdateApplicationSeries', ++ version=8, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchLXDProfileUpgradeNotifications(self, tag): ++ ''' ++ tag : str ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Application', ++ request='WatchLXDProfileUpgradeNotifications', ++ version=8, ++ params=_params) ++ _params['tag'] = tag ++ reply = await self.rpc(msg) ++ return reply ++ ++ diff --cc modules/libjuju/juju/client/_client9.py index 0000000,0000000..d87dd8f new file mode 100644 --- /dev/null +++ b/modules/libjuju/juju/client/_client9.py @@@ -1,0 -1,0 +1,2385 @@@ ++# 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 * ++ ++ ++class UniterFacade(Type): ++ name = 'Uniter' ++ version = 9 ++ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False, ++ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'}, ++ 'type': 'array'}, ++ 'type': 'array'}}, ++ 'required': ['servers'], ++ 'type': 'object'}, ++ 'Action': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'parameters': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'receiver': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'receiver', 'name'], ++ 'type': 'object'}, ++ 'ActionExecutionResult': {'additionalProperties': False, ++ 'properties': {'action-tag': {'type': 'string'}, ++ 'message': {'type': 'string'}, ++ 'results': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['action-tag', 'status'], ++ 'type': 'object'}, ++ 'ActionExecutionResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'ActionResult': {'additionalProperties': False, ++ 'properties': {'action': {'$ref': '#/definitions/Action'}, ++ 'completed': {'format': 'date-time', ++ 'type': 'string'}, ++ 'enqueued': {'format': 'date-time', ++ 'type': 'string'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'message': {'type': 'string'}, ++ 'output': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'started': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'ActionResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'Address': {'additionalProperties': False, ++ 'properties': {'scope': {'type': 'string'}, ++ 'space-name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['value', 'type', 'scope'], ++ 'type': 'object'}, ++ 'ApplicationStatusResult': {'additionalProperties': False, ++ 'properties': {'application': {'$ref': '#/definitions/StatusResult'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/StatusResult'}}, ++ 'type': 'object'}}, ++ 'required': ['application', ++ 'units'], ++ 'type': 'object'}, ++ 'ApplicationStatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationStatusResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ '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'}, ++ 'CharmURL': {'additionalProperties': False, ++ 'properties': {'url': {'type': 'string'}}, ++ 'required': ['url'], ++ 'type': 'object'}, ++ 'CharmURLs': {'additionalProperties': False, ++ 'properties': {'urls': {'items': {'$ref': '#/definitions/CharmURL'}, ++ 'type': 'array'}}, ++ 'required': ['urls'], ++ 'type': 'object'}, ++ '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'}, ++ 'name': {'type': 'string'}, ++ 'region': {'type': 'string'}, ++ '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'}, ++ 'ConfigSettingsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'settings': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['settings'], ++ 'type': 'object'}, ++ 'ConfigSettingsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ConfigSettingsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'Endpoint': {'additionalProperties': False, ++ 'properties': {'application-name': {'type': 'string'}, ++ 'relation': {'$ref': '#/definitions/CharmRelation'}}, ++ 'required': ['application-name', 'relation'], ++ 'type': 'object'}, ++ 'Entities': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'EntitiesCharmURL': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityCharmURL'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'EntitiesPortRanges': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityPortRange'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'Entity': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}}, ++ 'required': ['tag'], ++ 'type': 'object'}, ++ 'EntityCharmURL': {'additionalProperties': False, ++ 'properties': {'charm-url': {'type': 'string'}, ++ 'tag': {'type': 'string'}}, ++ 'required': ['tag', 'charm-url'], ++ 'type': 'object'}, ++ 'EntityPortRange': {'additionalProperties': False, ++ 'properties': {'from-port': {'type': 'integer'}, ++ 'protocol': {'type': 'string'}, ++ 'tag': {'type': 'string'}, ++ 'to-port': {'type': 'integer'}}, ++ 'required': ['tag', ++ 'protocol', ++ 'from-port', ++ 'to-port'], ++ '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'}, ++ 'EntityString': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['tag', 'value'], ++ 'type': 'object'}, ++ 'EntityWorkloadVersion': {'additionalProperties': False, ++ 'properties': {'tag': {'type': 'string'}, ++ 'workload-version': {'type': 'string'}}, ++ 'required': ['tag', ++ 'workload-version'], ++ 'type': 'object'}, ++ 'EntityWorkloadVersions': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityWorkloadVersion'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'Error': {'additionalProperties': False, ++ 'properties': {'code': {'type': 'string'}, ++ 'info': {'$ref': '#/definitions/ErrorInfo'}, ++ 'message': {'type': 'string'}}, ++ 'required': ['message', 'code'], ++ 'type': 'object'}, ++ 'ErrorInfo': {'additionalProperties': False, ++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'}, ++ 'macaroon-path': {'type': 'string'}}, ++ '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'}, ++ 'GetLeadershipSettingsBulkResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/GetLeadershipSettingsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'GetLeadershipSettingsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['settings'], ++ 'type': 'object'}, ++ 'GoalState': {'additionalProperties': False, ++ 'properties': {'relations': {'patternProperties': {'.*': {'patternProperties': {'.*': {'$ref': '#/definitions/GoalStateStatus'}}, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/GoalStateStatus'}}, ++ 'type': 'object'}}, ++ 'required': ['units', 'relations'], ++ 'type': 'object'}, ++ 'GoalStateResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/GoalState'}}, ++ 'required': ['result', 'error'], ++ 'type': 'object'}, ++ 'GoalStateResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/GoalStateResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'GoalStateStatus': {'additionalProperties': False, ++ 'properties': {'since': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['status', 'since'], ++ 'type': 'object'}, ++ 'HostPort': {'additionalProperties': False, ++ 'properties': {'Address': {'$ref': '#/definitions/Address'}, ++ 'port': {'type': 'integer'}}, ++ 'required': ['Address', 'port'], ++ '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'}, ++ 'InterfaceAddress': {'additionalProperties': False, ++ 'properties': {'cidr': {'type': 'string'}, ++ 'hostname': {'type': 'string'}, ++ 'value': {'type': 'string'}}, ++ 'required': ['hostname', 'value', 'cidr'], ++ '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'}, ++ 'Macaroon': {'additionalProperties': False, 'type': 'object'}, ++ 'MachinePortRange': {'additionalProperties': False, ++ 'properties': {'port-range': {'$ref': '#/definitions/PortRange'}, ++ 'relation-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['unit-tag', ++ 'relation-tag', ++ 'port-range'], ++ 'type': 'object'}, ++ 'MachinePortsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'ports': {'items': {'$ref': '#/definitions/MachinePortRange'}, ++ 'type': 'array'}}, ++ 'required': ['ports'], ++ 'type': 'object'}, ++ 'MachinePortsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/MachinePortsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'MergeLeadershipSettingsBulkParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/MergeLeadershipSettingsParam'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'MergeLeadershipSettingsParam': {'additionalProperties': False, ++ 'properties': {'application-tag': {'type': 'string'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['settings'], ++ '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'}, ++ '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'}, ++ 'ModelConfigResult': {'additionalProperties': False, ++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}}, ++ 'required': ['config'], ++ 'type': 'object'}, ++ 'ModelResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'name': {'type': 'string'}, ++ 'type': {'type': 'string'}, ++ 'uuid': {'type': 'string'}}, ++ 'required': ['name', 'uuid', 'type'], ++ 'type': 'object'}, ++ 'NetworkInfo': {'additionalProperties': False, ++ 'properties': {'addresses': {'items': {'$ref': '#/definitions/InterfaceAddress'}, ++ 'type': 'array'}, ++ 'interface-name': {'type': 'string'}, ++ 'mac-address': {'type': 'string'}}, ++ 'required': ['mac-address', ++ 'interface-name', ++ 'addresses'], ++ 'type': 'object'}, ++ 'NetworkInfoParams': {'additionalProperties': False, ++ 'properties': {'bindings': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'relation-id': {'type': 'integer'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['unit', 'bindings'], ++ 'type': 'object'}, ++ 'NetworkInfoResult': {'additionalProperties': False, ++ 'properties': {'bind-addresses': {'items': {'$ref': '#/definitions/NetworkInfo'}, ++ 'type': 'array'}, ++ 'egress-subnets': {'items': {'type': 'string'}, ++ 'type': 'array'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'ingress-addresses': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'NetworkInfoResults': {'additionalProperties': False, ++ 'properties': {'results': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInfoResult'}}, ++ 'type': 'object'}}, ++ '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'}, ++ 'PortRange': {'additionalProperties': False, ++ 'properties': {'from-port': {'type': 'integer'}, ++ 'protocol': {'type': 'string'}, ++ 'to-port': {'type': 'integer'}}, ++ 'required': ['from-port', 'to-port', 'protocol'], ++ 'type': 'object'}, ++ 'RelationIds': {'additionalProperties': False, ++ 'properties': {'relation-ids': {'items': {'type': 'integer'}, ++ 'type': 'array'}}, ++ 'required': ['relation-ids'], ++ 'type': 'object'}, ++ 'RelationResult': {'additionalProperties': False, ++ 'properties': {'bool': {'type': 'boolean'}, ++ 'endpoint': {'$ref': '#/definitions/Endpoint'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'id': {'type': 'integer'}, ++ 'key': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'other-application': {'type': 'string'}}, ++ 'required': ['life', ++ 'id', ++ 'key', ++ 'endpoint'], ++ 'type': 'object'}, ++ 'RelationResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'RelationStatusArg': {'additionalProperties': False, ++ 'properties': {'message': {'type': 'string'}, ++ 'relation-id': {'type': 'integer'}, ++ 'status': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['unit-tag', ++ 'relation-id', ++ 'status', ++ 'message'], ++ 'type': 'object'}, ++ 'RelationStatusArgs': {'additionalProperties': False, ++ 'properties': {'args': {'items': {'$ref': '#/definitions/RelationStatusArg'}, ++ 'type': 'array'}}, ++ 'required': ['args'], ++ 'type': 'object'}, ++ 'RelationUnit': {'additionalProperties': False, ++ 'properties': {'relation': {'type': 'string'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['relation', 'unit'], ++ 'type': 'object'}, ++ 'RelationUnitPair': {'additionalProperties': False, ++ 'properties': {'local-unit': {'type': 'string'}, ++ 'relation': {'type': 'string'}, ++ 'remote-unit': {'type': 'string'}}, ++ 'required': ['relation', ++ 'local-unit', ++ 'remote-unit'], ++ 'type': 'object'}, ++ 'RelationUnitPairs': {'additionalProperties': False, ++ 'properties': {'relation-unit-pairs': {'items': {'$ref': '#/definitions/RelationUnitPair'}, ++ 'type': 'array'}}, ++ 'required': ['relation-unit-pairs'], ++ 'type': 'object'}, ++ 'RelationUnitSettings': {'additionalProperties': False, ++ 'properties': {'relation': {'type': 'string'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['relation', ++ 'unit', ++ 'settings'], ++ 'type': 'object'}, ++ 'RelationUnitStatus': {'additionalProperties': False, ++ 'properties': {'in-scope': {'type': 'boolean'}, ++ 'relation-tag': {'type': 'string'}, ++ 'suspended': {'type': 'boolean'}}, ++ 'required': ['relation-tag', ++ 'in-scope', ++ 'suspended'], ++ 'type': 'object'}, ++ 'RelationUnitStatusResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'results': {'items': {'$ref': '#/definitions/RelationUnitStatus'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'RelationUnitStatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitStatusResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'RelationUnits': {'additionalProperties': False, ++ 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'}, ++ 'type': 'array'}}, ++ 'required': ['relation-units'], ++ 'type': 'object'}, ++ 'RelationUnitsChange': {'additionalProperties': False, ++ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}}, ++ 'type': 'object'}, ++ 'departed': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ 'required': ['changed'], ++ 'type': 'object'}, ++ 'RelationUnitsSettings': {'additionalProperties': False, ++ 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnitSettings'}, ++ 'type': 'array'}}, ++ 'required': ['relation-units'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResult': {'additionalProperties': False, ++ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'watcher-id': {'type': 'string'}}, ++ 'required': ['watcher-id', ++ 'changes'], ++ 'type': 'object'}, ++ 'RelationUnitsWatchResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'ResolvedModeResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'mode': {'type': 'string'}}, ++ 'required': ['mode'], ++ 'type': 'object'}, ++ 'ResolvedModeResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/ResolvedModeResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'SetPodSpecParams': {'additionalProperties': False, ++ 'properties': {'specs': {'items': {'$ref': '#/definitions/EntityString'}, ++ 'type': 'array'}}, ++ 'required': ['specs'], ++ 'type': 'object'}, ++ 'SetStatus': {'additionalProperties': False, ++ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'}, ++ 'type': 'array'}}, ++ 'required': ['entities'], ++ 'type': 'object'}, ++ 'SettingsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'settings': {'patternProperties': {'.*': {'type': 'string'}}, ++ 'type': 'object'}}, ++ 'required': ['settings'], ++ 'type': 'object'}, ++ 'SettingsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'StatusResult': {'additionalProperties': False, ++ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True, ++ 'type': 'object'}}, ++ 'type': 'object'}, ++ 'error': {'$ref': '#/definitions/Error'}, ++ 'id': {'type': 'string'}, ++ 'info': {'type': 'string'}, ++ 'life': {'type': 'string'}, ++ 'since': {'format': 'date-time', ++ 'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['id', ++ 'life', ++ 'status', ++ 'info', ++ 'data', ++ 'since'], ++ 'type': 'object'}, ++ 'StatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StatusResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ 'type': 'object'}, ++ 'StorageAddParams': {'additionalProperties': False, ++ 'properties': {'name': {'type': 'string'}, ++ 'storage': {'$ref': '#/definitions/StorageConstraints'}, ++ 'unit': {'type': 'string'}}, ++ 'required': ['unit', 'name', 'storage'], ++ 'type': 'object'}, ++ 'StorageAttachment': {'additionalProperties': False, ++ 'properties': {'kind': {'type': 'integer'}, ++ 'life': {'type': 'string'}, ++ 'location': {'type': 'string'}, ++ 'owner-tag': {'type': 'string'}, ++ 'storage-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['storage-tag', ++ 'owner-tag', ++ 'unit-tag', ++ 'kind', ++ 'location', ++ 'life'], ++ 'type': 'object'}, ++ 'StorageAttachmentId': {'additionalProperties': False, ++ 'properties': {'storage-tag': {'type': 'string'}, ++ 'unit-tag': {'type': 'string'}}, ++ 'required': ['storage-tag', ++ 'unit-tag'], ++ 'type': 'object'}, ++ 'StorageAttachmentIds': {'additionalProperties': False, ++ 'properties': {'ids': {'items': {'$ref': '#/definitions/StorageAttachmentId'}, ++ 'type': 'array'}}, ++ 'required': ['ids'], ++ 'type': 'object'}, ++ 'StorageAttachmentIdsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/StorageAttachmentIds'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'StorageAttachmentIdsResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentIdsResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StorageAttachmentResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'$ref': '#/definitions/StorageAttachment'}}, ++ 'required': ['result'], ++ 'type': 'object'}, ++ 'StorageAttachmentResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StorageAttachmentResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}, ++ 'StorageConstraints': {'additionalProperties': False, ++ 'properties': {'count': {'type': 'integer'}, ++ 'pool': {'type': 'string'}, ++ 'size': {'type': 'integer'}}, ++ 'type': 'object'}, ++ 'StoragesAddParams': {'additionalProperties': False, ++ 'properties': {'storages': {'items': {'$ref': '#/definitions/StorageAddParams'}, ++ 'type': 'array'}}, ++ 'required': ['storages'], ++ 'type': 'object'}, ++ 'StringBoolResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'ok': {'type': 'boolean'}, ++ 'result': {'type': 'string'}}, ++ 'required': ['result', 'ok'], ++ 'type': 'object'}, ++ 'StringBoolResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringBoolResult'}, ++ 'type': 'array'}}, ++ 'required': ['results'], ++ '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'}, ++ 'StringsResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'result': {'items': {'type': 'string'}, ++ 'type': 'array'}}, ++ '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'}, ++ 'UnitRefreshResult': {'additionalProperties': False, ++ 'properties': {'Error': {'$ref': '#/definitions/Error'}, ++ 'Life': {'type': 'string'}, ++ 'Resolved': {'type': 'string'}}, ++ 'required': ['Life', ++ 'Resolved', ++ 'Error'], ++ 'type': 'object'}, ++ 'UnitRefreshResults': {'additionalProperties': False, ++ 'properties': {'Results': {'items': {'$ref': '#/definitions/UnitRefreshResult'}, ++ 'type': 'array'}}, ++ 'required': ['Results'], ++ 'type': 'object'}, ++ 'UnitSettings': {'additionalProperties': False, ++ 'properties': {'version': {'type': 'integer'}}, ++ 'required': ['version'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusParam': {'additionalProperties': False, ++ 'properties': {'entity': {'$ref': '#/definitions/Entity'}, ++ 'message': {'type': 'string'}, ++ 'status': {'type': 'string'}}, ++ 'required': ['entity', ++ 'status', ++ 'message'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusParams': {'additionalProperties': False, ++ 'properties': {'params': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusParam'}, ++ 'type': 'array'}}, ++ 'required': ['params'], ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusResult': {'additionalProperties': False, ++ 'properties': {'error': {'$ref': '#/definitions/Error'}, ++ 'status': {'type': 'string'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesStatusResults': {'additionalProperties': False, ++ 'properties': {'results': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusResult'}, ++ 'type': 'array'}}, ++ 'type': 'object'}}, ++ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}}, ++ 'type': 'object'}, ++ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}}, ++ 'type': 'object'}, ++ 'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ActionResults'}}, ++ 'type': 'object'}, ++ 'AddMetricBatches': {'properties': {'Params': {'$ref': '#/definitions/MetricBatchParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'AddUnitStorage': {'properties': {'Params': {'$ref': '#/definitions/StoragesAddParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'AllMachinePorts': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MachinePortsResults'}}, ++ 'type': 'object'}, ++ 'ApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ApplicationStatusResults'}}, ++ 'type': 'object'}, ++ 'AssignedMachine': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'AvailabilityZone': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'CharmArchiveSha256': {'properties': {'Params': {'$ref': '#/definitions/CharmURLs'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'CharmModifiedVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/IntResults'}}, ++ 'type': 'object'}, ++ 'CharmURL': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringBoolResults'}}, ++ 'type': 'object'}, ++ 'ClearResolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ClosePorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'CloudSpec': {'properties': {'Result': {'$ref': '#/definitions/CloudSpecResult'}}, ++ 'type': 'object'}, ++ 'ConfigSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ConfigSettingsResults'}}, ++ 'type': 'object'}, ++ 'CurrentModel': {'properties': {'Result': {'$ref': '#/definitions/ModelResult'}}, ++ 'type': 'object'}, ++ 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'DestroyAllSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'DestroyUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'EnterScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/MeterStatusResults'}}, ++ 'type': 'object'}, ++ 'GetPrincipal': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringBoolResults'}}, ++ 'type': 'object'}, ++ 'GoalStates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/GoalStateResults'}}, ++ 'type': 'object'}, ++ 'HasSubordinates': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/BoolResults'}}, ++ 'type': 'object'}, ++ 'LeaveScope': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'Merge': {'properties': {'Params': {'$ref': '#/definitions/MergeLeadershipSettingsBulkParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}}, ++ 'type': 'object'}, ++ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'NetworkInfo': {'properties': {'Params': {'$ref': '#/definitions/NetworkInfoParams'}, ++ 'Result': {'$ref': '#/definitions/NetworkInfoResults'}}, ++ 'type': 'object'}, ++ 'OpenPorts': {'properties': {'Params': {'$ref': '#/definitions/EntitiesPortRanges'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'ProviderType': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}, ++ 'Read': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/GetLeadershipSettingsBulkResults'}}, ++ 'type': 'object'}, ++ 'ReadRemoteSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitPairs'}, ++ 'Result': {'$ref': '#/definitions/SettingsResults'}}, ++ 'type': 'object'}, ++ 'ReadSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/SettingsResults'}}, ++ 'type': 'object'}, ++ 'Refresh': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/UnitRefreshResults'}}, ++ 'type': 'object'}, ++ 'Relation': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/RelationResults'}}, ++ 'type': 'object'}, ++ 'RelationById': {'properties': {'Params': {'$ref': '#/definitions/RelationIds'}, ++ 'Result': {'$ref': '#/definitions/RelationResults'}}, ++ 'type': 'object'}, ++ 'RelationsStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/RelationUnitStatusResults'}}, ++ 'type': 'object'}, ++ 'RemoveStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'RequestReboot': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/ResolvedModeResults'}}, ++ 'type': 'object'}, ++ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}}, ++ 'type': 'object'}, ++ 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetApplicationStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/EntitiesCharmURL'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetPodSpec': {'properties': {'Params': {'$ref': '#/definitions/SetPodSpecParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetRelationStatus': {'properties': {'Params': {'$ref': '#/definitions/RelationStatusArgs'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetUpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStatusParams'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'SetWorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/EntityWorkloadVersions'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'StorageAttachmentLife': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/LifeResults'}}, ++ 'type': 'object'}, ++ 'StorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/StorageAttachmentResults'}}, ++ 'type': 'object'}, ++ 'UnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StatusResults'}}, ++ 'type': 'object'}, ++ 'UnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StorageAttachmentIdsResults'}}, ++ 'type': 'object'}, ++ 'UpdateSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnitsSettings'}, ++ 'Result': {'$ref': '#/definitions/ErrorResults'}}, ++ 'type': 'object'}, ++ 'UpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/UpgradeSeriesStatusResults'}}, ++ 'type': 'object'}, ++ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchConfigSettingsHash': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}}, ++ 'type': 'object'}, ++ 'WatchLeadershipSettings': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'}, ++ 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/StorageAttachmentIds'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchTrustConfigSettingsHash': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchUnitAddressesHash': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchUnitRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchUnitStorageAttachments': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringsWatchResults'}}, ++ 'type': 'object'}, ++ 'WatchUpgradeSeriesNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}}, ++ 'type': 'object'}, ++ 'WorkloadVersion': {'properties': {'Params': {'$ref': '#/definitions/Entities'}, ++ 'Result': {'$ref': '#/definitions/StringResults'}}, ++ 'type': 'object'}}, ++ 'type': 'object'} ++ ++ ++ @ReturnMapping(StringsResult) ++ async def APIAddresses(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='APIAddresses', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(APIHostPortsResult) ++ async def APIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Sequence[~HostPort] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='APIHostPorts', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ActionResults) ++ async def Actions(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ActionResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Actions', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def AddMetricBatches(self, batches): ++ ''' ++ batches : typing.Sequence[~MetricBatchParam] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='AddMetricBatches', ++ version=9, ++ params=_params) ++ _params['batches'] = batches ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def AddUnitStorage(self, storages): ++ ''' ++ storages : typing.Sequence[~StorageAddParams] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='AddUnitStorage', ++ version=9, ++ params=_params) ++ _params['storages'] = storages ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MachinePortsResults) ++ async def AllMachinePorts(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MachinePortsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='AllMachinePorts', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ApplicationStatusResults) ++ async def ApplicationStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ApplicationStatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ApplicationStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def AssignedMachine(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='AssignedMachine', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def AvailabilityZone(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='AvailabilityZone', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def BeginActions(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='BeginActions', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def CharmArchiveSha256(self, urls): ++ ''' ++ urls : typing.Sequence[~CharmURL] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='CharmArchiveSha256', ++ version=9, ++ params=_params) ++ _params['urls'] = urls ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(IntResults) ++ async def CharmModifiedVersion(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~IntResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='CharmModifiedVersion', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringBoolResults) ++ async def CharmURL(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='CharmURL', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ClearResolved(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ClearResolved', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def ClosePorts(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ClosePorts', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(CloudSpecResult) ++ async def CloudSpec(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='CloudSpec', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ConfigSettingsResults) ++ async def ConfigSettings(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ConfigSettingsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ConfigSettings', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelResult) ++ async def CurrentModel(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='CurrentModel', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Destroy(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Destroy', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def DestroyAllSubordinates(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='DestroyAllSubordinates', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def DestroyUnitStorageAttachments(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='DestroyUnitStorageAttachments', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnsureDead(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='EnsureDead', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def EnterScope(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='EnterScope', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def FinishActions(self, results): ++ ''' ++ results : typing.Sequence[~ActionExecutionResult] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='FinishActions', ++ version=9, ++ params=_params) ++ _params['results'] = results ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(MeterStatusResults) ++ async def GetMeterStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~MeterStatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='GetMeterStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringBoolResults) ++ async def GetPrincipal(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringBoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='GetPrincipal', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(GoalStateResults) ++ async def GoalStates(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~GoalStateResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='GoalStates', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(BoolResults) ++ async def HasSubordinates(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~BoolResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='HasSubordinates', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def LeaveScope(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='LeaveScope', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def Life(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Life', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def Merge(self, params): ++ ''' ++ params : typing.Sequence[~MergeLeadershipSettingsParam] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Merge', ++ version=9, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ModelConfigResult) ++ async def ModelConfig(self): ++ ''' ++ ++ Returns -> typing.Mapping[str, typing.Any] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ModelConfig', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def ModelUUID(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ModelUUID', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NetworkInfoResults) ++ async def NetworkInfo(self, bindings, unit): ++ ''' ++ bindings : typing.Sequence[str] ++ unit : str ++ Returns -> typing.Mapping[str, ~NetworkInfoResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='NetworkInfo', ++ version=9, ++ params=_params) ++ _params['bindings'] = bindings ++ _params['unit'] = unit ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def OpenPorts(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityPortRange] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='OpenPorts', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def PrivateAddress(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='PrivateAddress', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def ProviderType(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ProviderType', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def PublicAddress(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='PublicAddress', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(GetLeadershipSettingsBulkResults) ++ async def Read(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~GetLeadershipSettingsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Read', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(SettingsResults) ++ async def ReadRemoteSettings(self, relation_unit_pairs): ++ ''' ++ relation_unit_pairs : typing.Sequence[~RelationUnitPair] ++ Returns -> typing.Sequence[~SettingsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ReadRemoteSettings', ++ version=9, ++ params=_params) ++ _params['relation-unit-pairs'] = relation_unit_pairs ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(SettingsResults) ++ async def ReadSettings(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~SettingsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='ReadSettings', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UnitRefreshResults) ++ async def Refresh(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UnitRefreshResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Refresh', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RelationResults) ++ async def Relation(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Relation', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RelationResults) ++ async def RelationById(self, relation_ids): ++ ''' ++ relation_ids : typing.Sequence[int] ++ Returns -> typing.Sequence[~RelationResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='RelationById', ++ version=9, ++ params=_params) ++ _params['relation-ids'] = relation_ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RelationUnitStatusResults) ++ async def RelationsStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~RelationUnitStatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='RelationsStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RemoveStorageAttachments(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='RemoveStorageAttachments', ++ version=9, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def RequestReboot(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='RequestReboot', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ResolvedModeResults) ++ async def Resolved(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~ResolvedModeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Resolved', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResult) ++ async def SLALevel(self): ++ ''' ++ ++ Returns -> typing.Union[_ForwardRef('Error'), str] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SLALevel', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetAgentStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetAgentStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetApplicationStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetApplicationStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetCharmURL(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityCharmURL] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetCharmURL', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetPodSpec(self, specs): ++ ''' ++ specs : typing.Sequence[~EntityString] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetPodSpec', ++ version=9, ++ params=_params) ++ _params['specs'] = specs ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetRelationStatus(self, args): ++ ''' ++ args : typing.Sequence[~RelationStatusArg] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetRelationStatus', ++ version=9, ++ params=_params) ++ _params['args'] = args ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetUnitStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityStatusArgs] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetUnitStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetUpgradeSeriesUnitStatus(self, params): ++ ''' ++ params : typing.Sequence[~UpgradeSeriesStatusParam] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetUpgradeSeriesUnitStatus', ++ version=9, ++ params=_params) ++ _params['params'] = params ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def SetWorkloadVersion(self, entities): ++ ''' ++ entities : typing.Sequence[~EntityWorkloadVersion] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='SetWorkloadVersion', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(LifeResults) ++ async def StorageAttachmentLife(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~LifeResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='StorageAttachmentLife', ++ version=9, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StorageAttachmentResults) ++ async def StorageAttachments(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~StorageAttachmentResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='StorageAttachments', ++ version=9, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StatusResults) ++ async def UnitStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='UnitStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StorageAttachmentIdsResults) ++ async def UnitStorageAttachments(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StorageAttachmentIdsResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='UnitStorageAttachments', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(ErrorResults) ++ async def UpdateSettings(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnitSettings] ++ Returns -> typing.Sequence[~ErrorResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='UpdateSettings', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(UpgradeSeriesStatusResults) ++ async def UpgradeSeriesUnitStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~UpgradeSeriesStatusResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='UpgradeSeriesUnitStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def Watch(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='Watch', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchAPIHostPorts(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchAPIHostPorts', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchActionNotifications(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchActionNotifications', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchConfigSettingsHash(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchConfigSettingsHash', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResult) ++ async def WatchForModelConfigChanges(self): ++ ''' ++ ++ Returns -> typing.Union[str, _ForwardRef('Error')] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchForModelConfigChanges', ++ version=9, ++ params=_params) ++ ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchLeadershipSettings(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchLeadershipSettings', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchMeterStatus(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchMeterStatus', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(RelationUnitsWatchResults) ++ async def WatchRelationUnits(self, relation_units): ++ ''' ++ relation_units : typing.Sequence[~RelationUnit] ++ Returns -> typing.Sequence[~RelationUnitsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchRelationUnits', ++ version=9, ++ params=_params) ++ _params['relation-units'] = relation_units ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchStorageAttachments(self, ids): ++ ''' ++ ids : typing.Sequence[~StorageAttachmentId] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchStorageAttachments', ++ version=9, ++ params=_params) ++ _params['ids'] = ids ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchTrustConfigSettingsHash(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchTrustConfigSettingsHash', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnitAddressesHash(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchUnitAddressesHash', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnitRelations(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchUnitRelations', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringsWatchResults) ++ async def WatchUnitStorageAttachments(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringsWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchUnitStorageAttachments', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(NotifyWatchResults) ++ async def WatchUpgradeSeriesNotifications(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~NotifyWatchResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WatchUpgradeSeriesNotifications', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ ++ ++ @ReturnMapping(StringResults) ++ async def WorkloadVersion(self, entities): ++ ''' ++ entities : typing.Sequence[~Entity] ++ Returns -> typing.Sequence[~StringResult] ++ ''' ++ # map input types to rpc msg ++ _params = dict() ++ msg = dict(type='Uniter', ++ request='WorkloadVersion', ++ version=9, ++ params=_params) ++ _params['entities'] = entities ++ reply = await self.rpc(msg) ++ return reply ++ ++ diff --cc modules/libjuju/juju/client/_definitions.py index fde035f,0000000..2d25e39 mode 100644,000000..100644 --- a/modules/libjuju/juju/client/_definitions.py +++ b/modules/libjuju/juju/client/_definitions.py @@@ -1,8020 -1,0 +1,11058 @@@ +# 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 ReturnMapping, Type + + +class APIHostPortsResult(Type): + _toSchema = {'servers': 'servers'} + _toPy = {'servers': 'servers'} + def __init__(self, servers=None, **unknown_fields): + ''' - servers : typing.Sequence<+T_co>[~HostPort]<~HostPort> ++ servers : typing.Sequence[~HostPort] + ''' + self.servers = [HostPort.from_json(o) for o in servers or []] + + + +class Action(Type): + _toSchema = {'name': 'name', 'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag'} + _toPy = {'name': 'name', 'parameters': 'parameters', 'receiver': 'receiver', 'tag': 'tag'} + def __init__(self, name=None, parameters=None, receiver=None, tag=None, **unknown_fields): + ''' + name : str - parameters : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ parameters : typing.Mapping[str, typing.Any] + receiver : str + tag : str + ''' + self.name = name + self.parameters = parameters + self.receiver = receiver + self.tag = tag + + + +class ActionExecutionResult(Type): + _toSchema = {'action_tag': 'action-tag', 'message': 'message', 'results': 'results', 'status': 'status'} + _toPy = {'action-tag': 'action_tag', 'message': 'message', 'results': 'results', 'status': 'status'} + def __init__(self, action_tag=None, message=None, results=None, status=None, **unknown_fields): + ''' + action_tag : str + message : str - results : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ results : typing.Mapping[str, typing.Any] + status : str + ''' + self.action_tag = action_tag + self.message = message + self.results = results + self.status = status + + + +class ActionExecutionResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult> ++ results : typing.Sequence[~ActionExecutionResult] + ''' + self.results = [ActionExecutionResult.from_json(o) for o in results or []] + + + ++class ActionPruneArgs(Type): ++ _toSchema = {'max_history_mb': 'max-history-mb', 'max_history_time': 'max-history-time'} ++ _toPy = {'max-history-mb': 'max_history_mb', 'max-history-time': 'max_history_time'} ++ def __init__(self, max_history_mb=None, max_history_time=None, **unknown_fields): ++ ''' ++ max_history_mb : int ++ max_history_time : int ++ ''' ++ self.max_history_mb = max_history_mb ++ self.max_history_time = max_history_time ++ ++ ++ +class ActionResult(Type): + _toSchema = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'} + _toPy = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'} + def __init__(self, action=None, completed=None, enqueued=None, error=None, message=None, output=None, started=None, status=None, **unknown_fields): + ''' + action : Action + completed : str + enqueued : str + error : Error + message : str - output : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ output : typing.Mapping[str, typing.Any] + started : str + status : str + ''' + self.action = Action.from_json(action) if action else None + self.completed = completed + self.enqueued = enqueued + self.error = Error.from_json(error) if error else None + self.message = message + self.output = output + self.started = started + self.status = status + + + +class ActionResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ results : typing.Sequence[~ActionResult] + ''' + self.results = [ActionResult.from_json(o) for o in results or []] + + + +class ActionSpec(Type): + _toSchema = {'description': 'description', 'params': 'params'} + _toPy = {'description': 'description', 'params': 'params'} + def __init__(self, description=None, params=None, **unknown_fields): + ''' + description : str - params : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ params : typing.Mapping[str, typing.Any] + ''' + self.description = description + self.params = params + + + +class Actions(Type): + _toSchema = {'actions': 'actions'} + _toPy = {'actions': 'actions'} + def __init__(self, actions=None, **unknown_fields): + ''' - actions : typing.Sequence<+T_co>[~Action]<~Action> ++ actions : typing.Sequence[~Action] + ''' + self.actions = [Action.from_json(o) for o in actions or []] + + + +class ActionsByName(Type): + _toSchema = {'actions': 'actions', 'error': 'error', 'name': 'name'} + _toPy = {'actions': 'actions', 'error': 'error', 'name': 'name'} + def __init__(self, actions=None, error=None, name=None, **unknown_fields): + ''' - actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ actions : typing.Sequence[~ActionResult] + error : Error + name : str + ''' + self.actions = [ActionResult.from_json(o) for o in actions or []] + self.error = Error.from_json(error) if error else None + self.name = name + + + +class ActionsByNames(Type): + _toSchema = {'actions': 'actions'} + _toPy = {'actions': 'actions'} + def __init__(self, actions=None, **unknown_fields): + ''' - actions : typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName> ++ actions : typing.Sequence[~ActionsByName] + ''' + self.actions = [ActionsByName.from_json(o) for o in actions or []] + + + +class ActionsByReceiver(Type): + _toSchema = {'actions': 'actions', 'error': 'error', 'receiver': 'receiver'} + _toPy = {'actions': 'actions', 'error': 'error', 'receiver': 'receiver'} + def __init__(self, actions=None, error=None, receiver=None, **unknown_fields): + ''' - actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult> ++ actions : typing.Sequence[~ActionResult] + error : Error + receiver : str + ''' + self.actions = [ActionResult.from_json(o) for o in actions or []] + self.error = Error.from_json(error) if error else None + self.receiver = receiver + + + +class ActionsByReceivers(Type): + _toSchema = {'actions': 'actions'} + _toPy = {'actions': 'actions'} + def __init__(self, actions=None, **unknown_fields): + ''' - actions : typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver> ++ actions : typing.Sequence[~ActionsByReceiver] + ''' + self.actions = [ActionsByReceiver.from_json(o) for o in actions or []] + + + ++class AddApplicationOffer(Type): ++ _toSchema = {'application_description': 'application-description', 'application_name': 'application-name', 'endpoints': 'endpoints', 'model_tag': 'model-tag', 'offer_name': 'offer-name'} ++ _toPy = {'application-description': 'application_description', 'application-name': 'application_name', 'endpoints': 'endpoints', 'model-tag': 'model_tag', 'offer-name': 'offer_name'} ++ def __init__(self, application_description=None, application_name=None, endpoints=None, model_tag=None, offer_name=None, **unknown_fields): ++ ''' ++ application_description : str ++ application_name : str ++ endpoints : typing.Mapping[str, str] ++ model_tag : str ++ offer_name : str ++ ''' ++ self.application_description = application_description ++ self.application_name = application_name ++ self.endpoints = endpoints ++ self.model_tag = model_tag ++ self.offer_name = offer_name ++ ++ ++ ++class AddApplicationOffers(Type): ++ _toSchema = {'offers': 'Offers'} ++ _toPy = {'Offers': 'offers'} ++ def __init__(self, offers=None, **unknown_fields): ++ ''' ++ offers : typing.Sequence[~AddApplicationOffer] ++ ''' ++ self.offers = [AddApplicationOffer.from_json(o) for o in offers or []] ++ ++ ++ +class AddApplicationUnits(Type): + _toSchema = {'application': 'application', 'num_units': 'num-units', 'placement': 'placement'} + _toPy = {'application': 'application', 'num-units': 'num_units', 'placement': 'placement'} + def __init__(self, application=None, num_units=None, placement=None, **unknown_fields): + ''' + application : str + num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> ++ placement : typing.Sequence[~Placement] + ''' + self.application = application + self.num_units = num_units + self.placement = [Placement.from_json(o) for o in placement or []] + + + +class AddApplicationUnitsResults(Type): + _toSchema = {'units': 'units'} + _toPy = {'units': 'units'} + def __init__(self, units=None, **unknown_fields): + ''' - units : typing.Sequence<+T_co>[str] ++ units : typing.Sequence[str] + ''' + self.units = units + + + +class AddCharm(Type): + _toSchema = {'channel': 'channel', 'url': 'url'} + _toPy = {'channel': 'channel', 'url': 'url'} + def __init__(self, channel=None, url=None, **unknown_fields): + ''' + channel : str + url : str + ''' + self.channel = channel + self.url = url + + + +class AddCharmWithAuthorization(Type): + _toSchema = {'channel': 'channel', 'macaroon': 'macaroon', 'url': 'url'} + _toPy = {'channel': 'channel', 'macaroon': 'macaroon', 'url': 'url'} + def __init__(self, channel=None, macaroon=None, url=None, **unknown_fields): + ''' + channel : str + macaroon : Macaroon + url : str + ''' + self.channel = channel + self.macaroon = Macaroon.from_json(macaroon) if macaroon else None + self.url = url + + + ++class AddCloudArgs(Type): ++ _toSchema = {'cloud': 'cloud', 'name': 'name'} ++ _toPy = {'cloud': 'cloud', 'name': 'name'} ++ def __init__(self, cloud=None, name=None, **unknown_fields): ++ ''' ++ cloud : Cloud ++ name : str ++ ''' ++ self.cloud = Cloud.from_json(cloud) if cloud else None ++ self.name = name ++ ++ ++ +class AddMachineParams(Type): + _toSchema = {'addresses': 'addresses', 'constraints': 'constraints', 'container_type': 'container-type', 'disks': 'disks', 'hardware_characteristics': 'hardware-characteristics', 'instance_id': 'instance-id', 'jobs': 'jobs', 'nonce': 'nonce', 'parent_id': 'parent-id', 'placement': 'placement', 'series': 'series'} + _toPy = {'addresses': 'addresses', 'constraints': 'constraints', 'container-type': 'container_type', 'disks': 'disks', 'hardware-characteristics': 'hardware_characteristics', 'instance-id': 'instance_id', 'jobs': 'jobs', 'nonce': 'nonce', 'parent-id': 'parent_id', 'placement': 'placement', 'series': 'series'} + def __init__(self, addresses=None, constraints=None, container_type=None, disks=None, hardware_characteristics=None, instance_id=None, jobs=None, nonce=None, parent_id=None, placement=None, series=None, **unknown_fields): + ''' - addresses : typing.Sequence<+T_co>[~Address]<~Address> ++ addresses : typing.Sequence[~Address] + constraints : Value + container_type : str - disks : typing.Sequence<+T_co>[~Constraints]<~Constraints> ++ disks : typing.Sequence[~Constraints] + hardware_characteristics : HardwareCharacteristics + instance_id : str - jobs : typing.Sequence<+T_co>[str] ++ jobs : typing.Sequence[str] + nonce : str + parent_id : str + placement : Placement + series : str + ''' + self.addresses = [Address.from_json(o) for o in addresses or []] + self.constraints = Value.from_json(constraints) if constraints else None + self.container_type = container_type + self.disks = [Constraints.from_json(o) for o in disks or []] + self.hardware_characteristics = HardwareCharacteristics.from_json(hardware_characteristics) if hardware_characteristics else None + self.instance_id = instance_id + self.jobs = jobs + self.nonce = nonce + self.parent_id = parent_id + self.placement = Placement.from_json(placement) if placement else None + self.series = series + + + +class AddMachines(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams> ++ params : typing.Sequence[~AddMachineParams] + ''' + self.params = [AddMachineParams.from_json(o) for o in params or []] + + + +class AddMachinesResult(Type): + _toSchema = {'error': 'error', 'machine': 'machine'} + _toPy = {'error': 'error', 'machine': 'machine'} + def __init__(self, error=None, machine=None, **unknown_fields): + ''' + error : Error + machine : str + ''' + self.error = Error.from_json(error) if error else None + self.machine = machine + + + +class AddMachinesResults(Type): + _toSchema = {'machines': 'machines'} + _toPy = {'machines': 'machines'} + def __init__(self, machines=None, **unknown_fields): + ''' - machines : typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult> ++ machines : typing.Sequence[~AddMachinesResult] + ''' + self.machines = [AddMachinesResult.from_json(o) for o in machines or []] + + + +class AddPendingResourcesArgs(Type): + _toSchema = {'addcharmwithauthorization': 'AddCharmWithAuthorization', 'entity': 'Entity', 'resources': 'Resources'} + _toPy = {'AddCharmWithAuthorization': 'addcharmwithauthorization', 'Entity': 'entity', 'Resources': 'resources'} + def __init__(self, addcharmwithauthorization=None, entity=None, resources=None, **unknown_fields): + ''' + addcharmwithauthorization : AddCharmWithAuthorization + entity : Entity - resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource> ++ resources : typing.Sequence[~CharmResource] + ''' + self.addcharmwithauthorization = AddCharmWithAuthorization.from_json(addcharmwithauthorization) if addcharmwithauthorization else None + self.entity = Entity.from_json(entity) if entity else None + self.resources = [CharmResource.from_json(o) for o in resources or []] + + + +class AddPendingResourcesResult(Type): + _toSchema = {'errorresult': 'ErrorResult', 'pending_ids': 'pending-ids'} + _toPy = {'ErrorResult': 'errorresult', 'pending-ids': 'pending_ids'} + def __init__(self, errorresult=None, pending_ids=None, **unknown_fields): + ''' + errorresult : ErrorResult - pending_ids : typing.Sequence<+T_co>[str] ++ pending_ids : typing.Sequence[str] + ''' + self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None + self.pending_ids = pending_ids + + + +class AddRelation(Type): + _toSchema = {'endpoints': 'endpoints'} + _toPy = {'endpoints': 'endpoints'} + def __init__(self, endpoints=None, **unknown_fields): + ''' - endpoints : typing.Sequence<+T_co>[str] ++ endpoints : typing.Sequence[str] + ''' + self.endpoints = endpoints + + + +class AddRelationResults(Type): + _toSchema = {'endpoints': 'endpoints'} + _toPy = {'endpoints': 'endpoints'} + def __init__(self, endpoints=None, **unknown_fields): + ''' - endpoints : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> ++ endpoints : typing.Mapping[str, ~CharmRelation] + ''' + self.endpoints = endpoints + + + ++class AddStorageDetails(Type): ++ _toSchema = {'storage_tags': 'storage-tags'} ++ _toPy = {'storage-tags': 'storage_tags'} ++ def __init__(self, storage_tags=None, **unknown_fields): ++ ''' ++ storage_tags : typing.Sequence[str] ++ ''' ++ self.storage_tags = storage_tags ++ ++ ++ ++class AddStorageResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : AddStorageDetails ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = AddStorageDetails.from_json(result) if result else None ++ ++ ++ ++class AddStorageResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~AddStorageResult] ++ ''' ++ self.results = [AddStorageResult.from_json(o) for o in results or []] ++ ++ ++ +class AddSubnetParams(Type): + _toSchema = {'space_tag': 'space-tag', 'subnet_provider_id': 'subnet-provider-id', 'subnet_tag': 'subnet-tag', 'zones': 'zones'} + _toPy = {'space-tag': 'space_tag', 'subnet-provider-id': 'subnet_provider_id', 'subnet-tag': 'subnet_tag', 'zones': 'zones'} + def __init__(self, space_tag=None, subnet_provider_id=None, subnet_tag=None, zones=None, **unknown_fields): + ''' + space_tag : str + subnet_provider_id : str + subnet_tag : str - zones : typing.Sequence<+T_co>[str] ++ zones : typing.Sequence[str] + ''' + self.space_tag = space_tag + self.subnet_provider_id = subnet_provider_id + self.subnet_tag = subnet_tag + self.zones = zones + + + +class AddSubnetsParams(Type): + _toSchema = {'subnets': 'subnets'} + _toPy = {'subnets': 'subnets'} + def __init__(self, subnets=None, **unknown_fields): + ''' - subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams> ++ subnets : typing.Sequence[~AddSubnetParams] + ''' + self.subnets = [AddSubnetParams.from_json(o) for o in subnets or []] + + + +class AddUser(Type): + _toSchema = {'display_name': 'display-name', 'password': 'password', 'username': 'username'} + _toPy = {'display-name': 'display_name', 'password': 'password', 'username': 'username'} + def __init__(self, display_name=None, password=None, username=None, **unknown_fields): + ''' + display_name : str + password : str + username : str + ''' + self.display_name = display_name + self.password = password + self.username = username + + + +class AddUserResult(Type): + _toSchema = {'error': 'error', 'secret_key': 'secret-key', 'tag': 'tag'} + _toPy = {'error': 'error', 'secret-key': 'secret_key', 'tag': 'tag'} + def __init__(self, error=None, secret_key=None, tag=None, **unknown_fields): + ''' + error : Error - secret_key : typing.Sequence<+T_co>[int] ++ secret_key : typing.Sequence[int] + tag : str + ''' + self.error = Error.from_json(error) if error else None + self.secret_key = secret_key + self.tag = tag + + + +class AddUserResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult> ++ results : typing.Sequence[~AddUserResult] + ''' + self.results = [AddUserResult.from_json(o) for o in results or []] + + + +class AddUsers(Type): + _toSchema = {'users': 'users'} + _toPy = {'users': 'users'} + def __init__(self, users=None, **unknown_fields): + ''' - users : typing.Sequence<+T_co>[~AddUser]<~AddUser> ++ users : typing.Sequence[~AddUser] + ''' + self.users = [AddUser.from_json(o) for o in users or []] + + + +class Address(Type): + _toSchema = {'scope': 'scope', 'space_name': 'space-name', 'type_': 'type', 'value': 'value'} + _toPy = {'scope': 'scope', 'space-name': 'space_name', 'type': 'type_', 'value': 'value'} + def __init__(self, scope=None, space_name=None, type_=None, value=None, **unknown_fields): + ''' + scope : str + space_name : str + type_ : str + value : str + ''' + self.scope = scope + self.space_name = space_name + self.type_ = type_ + self.value = value + + + +class AdoptResourcesArgs(Type): + _toSchema = {'model_tag': 'model-tag', 'source_controller_version': 'source-controller-version'} + _toPy = {'model-tag': 'model_tag', 'source-controller-version': 'source_controller_version'} + def __init__(self, model_tag=None, source_controller_version=None, **unknown_fields): + ''' + model_tag : str + source_controller_version : Number + ''' + self.model_tag = model_tag + self.source_controller_version = Number.from_json(source_controller_version) if source_controller_version else None + + + +class AgentGetEntitiesResult(Type): + _toSchema = {'container_type': 'container-type', 'error': 'error', 'jobs': 'jobs', 'life': 'life'} + _toPy = {'container-type': 'container_type', 'error': 'error', 'jobs': 'jobs', 'life': 'life'} + def __init__(self, container_type=None, error=None, jobs=None, life=None, **unknown_fields): + ''' + container_type : str + error : Error - jobs : typing.Sequence<+T_co>[str] ++ jobs : typing.Sequence[str] + life : str + ''' + self.container_type = container_type + self.error = Error.from_json(error) if error else None + self.jobs = jobs + self.life = life + + + +class AgentGetEntitiesResults(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult> ++ entities : typing.Sequence[~AgentGetEntitiesResult] + ''' + self.entities = [AgentGetEntitiesResult.from_json(o) for o in entities or []] + + + +class AgentVersionResult(Type): + _toSchema = {'version': 'version'} + _toPy = {'version': 'version'} + def __init__(self, version=None, **unknown_fields): + ''' + version : Number + ''' + self.version = Number.from_json(version) if version else None + + + +class AllWatcherId(Type): + _toSchema = {'watcher_id': 'watcher-id'} + _toPy = {'watcher-id': 'watcher_id'} + def __init__(self, watcher_id=None, **unknown_fields): + ''' + watcher_id : str + ''' + self.watcher_id = watcher_id + + + +class AllWatcherNextResults(Type): + _toSchema = {'deltas': 'deltas'} + _toPy = {'deltas': 'deltas'} + def __init__(self, deltas=None, **unknown_fields): + ''' - deltas : typing.Sequence<+T_co>[~Delta]<~Delta> ++ deltas : typing.Sequence[~Delta] + ''' + self.deltas = [Delta.from_json(o) for o in deltas or []] + + + +class AnnotationsGetResult(Type): + _toSchema = {'annotations': 'annotations', 'entity': 'entity', 'error': 'error'} + _toPy = {'annotations': 'annotations', 'entity': 'entity', 'error': 'error'} + def __init__(self, annotations=None, entity=None, error=None, **unknown_fields): + ''' - annotations : typing.Mapping<~KT, +VT_co>[str, str] ++ annotations : typing.Mapping[str, str] + entity : str + error : ErrorResult + ''' + self.annotations = annotations + self.entity = entity + self.error = ErrorResult.from_json(error) if error else None + + + +class AnnotationsGetResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult> ++ results : typing.Sequence[~AnnotationsGetResult] + ''' + self.results = [AnnotationsGetResult.from_json(o) for o in results or []] + + + +class AnnotationsSet(Type): + _toSchema = {'annotations': 'annotations'} + _toPy = {'annotations': 'annotations'} + def __init__(self, annotations=None, **unknown_fields): + ''' - annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations> ++ annotations : typing.Sequence[~EntityAnnotations] + ''' + self.annotations = [EntityAnnotations.from_json(o) for o in annotations or []] + + + ++class ApplicationCharm(Type): ++ _toSchema = {'charm_modified_version': 'charm-modified-version', 'force_upgrade': 'force-upgrade', 'sha256': 'sha256', 'url': 'url'} ++ _toPy = {'charm-modified-version': 'charm_modified_version', 'force-upgrade': 'force_upgrade', 'sha256': 'sha256', 'url': 'url'} ++ def __init__(self, charm_modified_version=None, force_upgrade=None, sha256=None, url=None, **unknown_fields): ++ ''' ++ charm_modified_version : int ++ force_upgrade : bool ++ sha256 : str ++ url : str ++ ''' ++ self.charm_modified_version = charm_modified_version ++ self.force_upgrade = force_upgrade ++ self.sha256 = sha256 ++ self.url = url ++ ++ ++ +class ApplicationCharmActionsResult(Type): + _toSchema = {'actions': 'actions', 'application_tag': 'application-tag', 'error': 'error'} + _toPy = {'actions': 'actions', 'application-tag': 'application_tag', 'error': 'error'} + def __init__(self, actions=None, application_tag=None, error=None, **unknown_fields): + ''' - actions : typing.Mapping<~KT, +VT_co>[str, ~ActionSpec]<~ActionSpec> ++ actions : typing.Mapping[str, ~ActionSpec] + application_tag : str + error : Error + ''' + self.actions = actions + self.application_tag = application_tag + self.error = Error.from_json(error) if error else None + + + +class ApplicationCharmRelations(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + +class ApplicationCharmRelationsResults(Type): + _toSchema = {'charm_relations': 'charm-relations'} + _toPy = {'charm-relations': 'charm_relations'} + def __init__(self, charm_relations=None, **unknown_fields): + ''' - charm_relations : typing.Sequence<+T_co>[str] ++ charm_relations : typing.Sequence[str] + ''' + self.charm_relations = charm_relations + + + ++class ApplicationCharmResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ApplicationCharm ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ApplicationCharm.from_json(result) if result else None ++ ++ ++ ++class ApplicationCharmResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ApplicationCharmResult] ++ ''' ++ self.results = [ApplicationCharmResult.from_json(o) for o in results or []] ++ ++ ++ ++class ApplicationConfigSet(Type): ++ _toSchema = {'application': 'application', 'config': 'config'} ++ _toPy = {'application': 'application', 'config': 'config'} ++ def __init__(self, application=None, config=None, **unknown_fields): ++ ''' ++ application : str ++ config : typing.Mapping[str, str] ++ ''' ++ self.application = application ++ self.config = config ++ ++ ++ ++class ApplicationConfigSetArgs(Type): ++ _toSchema = {'args': 'Args'} ++ _toPy = {'Args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~ApplicationConfigSet] ++ ''' ++ self.args = [ApplicationConfigSet.from_json(o) for o in args or []] ++ ++ ++ ++class ApplicationConfigUnsetArgs(Type): ++ _toSchema = {'args': 'Args'} ++ _toPy = {'Args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~ApplicationUnset] ++ ''' ++ self.args = [ApplicationUnset.from_json(o) for o in args or []] ++ ++ ++ ++class ApplicationConstraint(Type): ++ _toSchema = {'constraints': 'constraints', 'error': 'error'} ++ _toPy = {'constraints': 'constraints', 'error': 'error'} ++ def __init__(self, constraints=None, error=None, **unknown_fields): ++ ''' ++ constraints : Value ++ error : Error ++ ''' ++ self.constraints = Value.from_json(constraints) if constraints else None ++ self.error = Error.from_json(error) if error else None ++ ++ ++ +class ApplicationDeploy(Type): - _toSchema = {'application': 'application', 'channel': 'channel', 'charm_url': 'charm-url', 'config': 'config', 'config_yaml': 'config-yaml', 'constraints': 'constraints', 'endpoint_bindings': 'endpoint-bindings', 'num_units': 'num-units', 'placement': 'placement', 'resources': 'resources', 'series': 'series', 'storage': 'storage'} - _toPy = {'application': 'application', 'channel': 'channel', 'charm-url': 'charm_url', 'config': 'config', 'config-yaml': 'config_yaml', 'constraints': 'constraints', 'endpoint-bindings': 'endpoint_bindings', 'num-units': 'num_units', 'placement': 'placement', 'resources': 'resources', 'series': 'series', 'storage': 'storage'} - def __init__(self, application=None, channel=None, charm_url=None, config=None, config_yaml=None, constraints=None, endpoint_bindings=None, num_units=None, placement=None, resources=None, series=None, storage=None, **unknown_fields): ++ _toSchema = {'application': 'application', 'attach_storage': 'attach-storage', 'channel': 'channel', 'charm_url': 'charm-url', 'config': 'config', 'config_yaml': 'config-yaml', 'constraints': 'constraints', 'devices': 'devices', 'endpoint_bindings': 'endpoint-bindings', 'num_units': 'num-units', 'placement': 'placement', 'policy': 'policy', 'resources': 'resources', 'series': 'series', 'storage': 'storage'} ++ _toPy = {'application': 'application', 'attach-storage': 'attach_storage', 'channel': 'channel', 'charm-url': 'charm_url', 'config': 'config', 'config-yaml': 'config_yaml', 'constraints': 'constraints', 'devices': 'devices', 'endpoint-bindings': 'endpoint_bindings', 'num-units': 'num_units', 'placement': 'placement', 'policy': 'policy', 'resources': 'resources', 'series': 'series', 'storage': 'storage'} ++ def __init__(self, application=None, attach_storage=None, channel=None, charm_url=None, config=None, config_yaml=None, constraints=None, devices=None, endpoint_bindings=None, num_units=None, placement=None, policy=None, resources=None, series=None, storage=None, **unknown_fields): + ''' + application : str ++ attach_storage : typing.Sequence[str] + channel : str + charm_url : str - config : typing.Mapping<~KT, +VT_co>[str, str] ++ config : typing.Mapping[str, str] + config_yaml : str + constraints : Value - endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str] ++ devices : typing.Mapping[str, ~Constraints] ++ endpoint_bindings : typing.Mapping[str, str] + num_units : int - placement : typing.Sequence<+T_co>[~Placement]<~Placement> - resources : typing.Mapping<~KT, +VT_co>[str, str] ++ placement : typing.Sequence[~Placement] ++ policy : str ++ resources : typing.Mapping[str, str] + series : str - storage : typing.Mapping<~KT, +VT_co>[str, ~Constraints]<~Constraints> ++ storage : typing.Mapping[str, ~Constraints] + ''' + self.application = application ++ self.attach_storage = attach_storage + self.channel = channel + self.charm_url = charm_url + self.config = config + self.config_yaml = config_yaml + self.constraints = Value.from_json(constraints) if constraints else None ++ self.devices = devices + self.endpoint_bindings = endpoint_bindings + self.num_units = num_units + self.placement = [Placement.from_json(o) for o in placement or []] ++ self.policy = policy + self.resources = resources + self.series = series + self.storage = storage + + + +class ApplicationDestroy(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + +class ApplicationExpose(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + +class ApplicationGet(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + ++class ApplicationGetConfigResults(Type): ++ _toSchema = {'results': 'Results'} ++ _toPy = {'Results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ConfigResult] ++ ''' ++ self.results = [ConfigResult.from_json(o) for o in results or []] ++ ++ ++ ++class ApplicationGetConstraintsResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ApplicationConstraint] ++ ''' ++ self.results = [ApplicationConstraint.from_json(o) for o in results or []] ++ ++ ++ +class ApplicationGetResults(Type): + _toSchema = {'application': 'application', 'charm': 'charm', 'config': 'config', 'constraints': 'constraints', 'series': 'series'} + _toPy = {'application': 'application', 'charm': 'charm', 'config': 'config', 'constraints': 'constraints', 'series': 'series'} + def __init__(self, application=None, charm=None, config=None, constraints=None, series=None, **unknown_fields): + ''' + application : str + charm : str - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + constraints : Value + series : str + ''' + self.application = application + self.charm = charm + self.config = config + self.constraints = Value.from_json(constraints) if constraints else None + self.series = series + + + +class ApplicationMetricCredential(Type): + _toSchema = {'application': 'application', 'metrics_credentials': 'metrics-credentials'} + _toPy = {'application': 'application', 'metrics-credentials': 'metrics_credentials'} + def __init__(self, application=None, metrics_credentials=None, **unknown_fields): + ''' + application : str - metrics_credentials : typing.Sequence<+T_co>[int] ++ metrics_credentials : typing.Sequence[int] + ''' + self.application = application + self.metrics_credentials = metrics_credentials + + + +class ApplicationMetricCredentials(Type): + _toSchema = {'creds': 'creds'} + _toPy = {'creds': 'creds'} + def __init__(self, creds=None, **unknown_fields): + ''' - creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential> ++ creds : typing.Sequence[~ApplicationMetricCredential] + ''' + self.creds = [ApplicationMetricCredential.from_json(o) for o in creds or []] + + + +class ApplicationOffer(Type): + _toSchema = {'access': 'access', 'application_description': 'application-description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer_name': 'offer-name', 'offer_url': 'offer-url', 'source_model_tag': 'source-model-tag', 'spaces': 'spaces'} + _toPy = {'access': 'access', 'application-description': 'application_description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer-name': 'offer_name', 'offer-url': 'offer_url', 'source-model-tag': 'source_model_tag', 'spaces': 'spaces'} + def __init__(self, access=None, application_description=None, bindings=None, endpoints=None, offer_name=None, offer_url=None, source_model_tag=None, spaces=None, **unknown_fields): + ''' + access : str + application_description : str - bindings : typing.Mapping<~KT, +VT_co>[str, str] - endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint> ++ bindings : typing.Mapping[str, str] ++ endpoints : typing.Sequence[~RemoteEndpoint] + offer_name : str + offer_url : str + source_model_tag : str - spaces : typing.Sequence<+T_co>[~RemoteSpace]<~RemoteSpace> ++ spaces : typing.Sequence[~RemoteSpace] + ''' + self.access = access + self.application_description = application_description + self.bindings = bindings + self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []] + self.offer_name = offer_name + self.offer_url = offer_url + self.source_model_tag = source_model_tag + self.spaces = [RemoteSpace.from_json(o) for o in spaces or []] + + + ++class ApplicationOfferAdminDetails(Type): ++ _toSchema = {'application_name': 'application-name', 'applicationofferdetails': 'ApplicationOfferDetails', 'charm_url': 'charm-url', 'connections': 'connections'} ++ _toPy = {'ApplicationOfferDetails': 'applicationofferdetails', 'application-name': 'application_name', 'charm-url': 'charm_url', 'connections': 'connections'} ++ def __init__(self, applicationofferdetails=None, application_name=None, charm_url=None, connections=None, **unknown_fields): ++ ''' ++ applicationofferdetails : ApplicationOfferDetails ++ application_name : str ++ charm_url : str ++ connections : typing.Sequence[~OfferConnection] ++ ''' ++ self.applicationofferdetails = ApplicationOfferDetails.from_json(applicationofferdetails) if applicationofferdetails else None ++ self.application_name = application_name ++ self.charm_url = charm_url ++ self.connections = [OfferConnection.from_json(o) for o in connections or []] ++ ++ ++ ++class ApplicationOfferDetails(Type): ++ _toSchema = {'application_description': 'application-description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer_name': 'offer-name', 'offer_url': 'offer-url', 'offer_uuid': 'offer-uuid', 'source_model_tag': 'source-model-tag', 'spaces': 'spaces', 'users': 'users'} ++ _toPy = {'application-description': 'application_description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer-name': 'offer_name', 'offer-url': 'offer_url', 'offer-uuid': 'offer_uuid', 'source-model-tag': 'source_model_tag', 'spaces': 'spaces', 'users': 'users'} ++ def __init__(self, application_description=None, bindings=None, endpoints=None, offer_name=None, offer_url=None, offer_uuid=None, source_model_tag=None, spaces=None, users=None, **unknown_fields): ++ ''' ++ application_description : str ++ bindings : typing.Mapping[str, str] ++ endpoints : typing.Sequence[~RemoteEndpoint] ++ offer_name : str ++ offer_url : str ++ offer_uuid : str ++ source_model_tag : str ++ spaces : typing.Sequence[~RemoteSpace] ++ users : typing.Sequence[~OfferUserDetails] ++ ''' ++ self.application_description = application_description ++ self.bindings = bindings ++ self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []] ++ self.offer_name = offer_name ++ self.offer_url = offer_url ++ self.offer_uuid = offer_uuid ++ self.source_model_tag = source_model_tag ++ self.spaces = [RemoteSpace.from_json(o) for o in spaces or []] ++ self.users = [OfferUserDetails.from_json(o) for o in users or []] ++ ++ ++ ++class ApplicationOfferResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ApplicationOfferAdminDetails ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ApplicationOfferAdminDetails.from_json(result) if result else None ++ ++ ++ ++class ApplicationOfferStatus(Type): ++ _toSchema = {'active_connected_count': 'active-connected-count', 'application_name': 'application-name', 'charm': 'charm', 'endpoints': 'endpoints', 'err': 'err', 'offer_name': 'offer-name', 'total_connected_count': 'total-connected-count'} ++ _toPy = {'active-connected-count': 'active_connected_count', 'application-name': 'application_name', 'charm': 'charm', 'endpoints': 'endpoints', 'err': 'err', 'offer-name': 'offer_name', 'total-connected-count': 'total_connected_count'} ++ def __init__(self, active_connected_count=None, application_name=None, charm=None, endpoints=None, err=None, offer_name=None, total_connected_count=None, **unknown_fields): ++ ''' ++ active_connected_count : int ++ application_name : str ++ charm : str ++ endpoints : typing.Mapping[str, ~RemoteEndpoint] ++ err : typing.Mapping[str, typing.Any] ++ offer_name : str ++ total_connected_count : int ++ ''' ++ self.active_connected_count = active_connected_count ++ self.application_name = application_name ++ self.charm = charm ++ self.endpoints = endpoints ++ self.err = err ++ self.offer_name = offer_name ++ self.total_connected_count = total_connected_count ++ ++ ++ ++class ApplicationOffersResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ApplicationOfferResult] ++ ''' ++ self.results = [ApplicationOfferResult.from_json(o) for o in results or []] ++ ++ ++ +class ApplicationRelationsChange(Type): + _toSchema = {'changed': 'changed', 'removed': 'removed'} + _toPy = {'changed': 'changed', 'removed': 'removed'} + def __init__(self, changed=None, removed=None, **unknown_fields): + ''' - changed : typing.Sequence<+T_co>[~RelationChange]<~RelationChange> - removed : typing.Sequence<+T_co>[int] ++ changed : typing.Sequence[~RelationChange] ++ removed : typing.Sequence[int] + ''' + self.changed = [RelationChange.from_json(o) for o in changed or []] + self.removed = removed + + + +class ApplicationRelationsWatchResult(Type): + _toSchema = {'applicationrelationswatcherid': 'ApplicationRelationsWatcherId', 'changes': 'changes', 'error': 'error'} + _toPy = {'ApplicationRelationsWatcherId': 'applicationrelationswatcherid', 'changes': 'changes', 'error': 'error'} + def __init__(self, applicationrelationswatcherid=None, changes=None, error=None, **unknown_fields): + ''' + applicationrelationswatcherid : str + changes : ApplicationRelationsChange + error : Error + ''' + self.applicationrelationswatcherid = applicationrelationswatcherid + self.changes = ApplicationRelationsChange.from_json(changes) if changes else None + self.error = Error.from_json(error) if error else None + + + +class ApplicationSet(Type): + _toSchema = {'application': 'application', 'options': 'options'} + _toPy = {'application': 'application', 'options': 'options'} + def __init__(self, application=None, options=None, **unknown_fields): + ''' + application : str - options : typing.Mapping<~KT, +VT_co>[str, str] ++ options : typing.Mapping[str, str] + ''' + self.application = application + self.options = options + + + +class ApplicationSetCharm(Type): + _toSchema = {'application': 'application', 'channel': 'channel', 'charm_url': 'charm-url', 'config_settings': 'config-settings', 'config_settings_yaml': 'config-settings-yaml', 'force_series': 'force-series', 'force_units': 'force-units', 'resource_ids': 'resource-ids', 'storage_constraints': 'storage-constraints'} + _toPy = {'application': 'application', 'channel': 'channel', 'charm-url': 'charm_url', 'config-settings': 'config_settings', 'config-settings-yaml': 'config_settings_yaml', 'force-series': 'force_series', 'force-units': 'force_units', 'resource-ids': 'resource_ids', 'storage-constraints': 'storage_constraints'} + def __init__(self, application=None, channel=None, charm_url=None, config_settings=None, config_settings_yaml=None, force_series=None, force_units=None, resource_ids=None, storage_constraints=None, **unknown_fields): + ''' + application : str + channel : str + charm_url : str - config_settings : typing.Mapping<~KT, +VT_co>[str, str] ++ config_settings : typing.Mapping[str, str] + config_settings_yaml : str + force_series : bool + force_units : bool - resource_ids : typing.Mapping<~KT, +VT_co>[str, str] - storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints> ++ resource_ids : typing.Mapping[str, str] ++ storage_constraints : typing.Mapping[str, ~StorageConstraints] + ''' + self.application = application + self.channel = channel + self.charm_url = charm_url + self.config_settings = config_settings + self.config_settings_yaml = config_settings_yaml + self.force_series = force_series + self.force_units = force_units + self.resource_ids = resource_ids + self.storage_constraints = storage_constraints + + + ++class ApplicationSetCharmProfile(Type): ++ _toSchema = {'application': 'application', 'charm_url': 'charm-url'} ++ _toPy = {'application': 'application', 'charm-url': 'charm_url'} ++ def __init__(self, application=None, charm_url=None, **unknown_fields): ++ ''' ++ application : str ++ charm_url : str ++ ''' ++ self.application = application ++ self.charm_url = charm_url ++ ++ ++ +class ApplicationStatus(Type): + _toSchema = {'can_upgrade_to': 'can-upgrade-to', 'charm': 'charm', 'err': 'err', 'exposed': 'exposed', 'life': 'life', 'meter_statuses': 'meter-statuses', 'relations': 'relations', 'series': 'series', 'status': 'status', 'subordinate_to': 'subordinate-to', 'units': 'units', 'workload_version': 'workload-version'} + _toPy = {'can-upgrade-to': 'can_upgrade_to', 'charm': 'charm', 'err': 'err', 'exposed': 'exposed', 'life': 'life', 'meter-statuses': 'meter_statuses', 'relations': 'relations', 'series': 'series', 'status': 'status', 'subordinate-to': 'subordinate_to', 'units': 'units', 'workload-version': 'workload_version'} + def __init__(self, can_upgrade_to=None, charm=None, err=None, exposed=None, life=None, meter_statuses=None, relations=None, series=None, status=None, subordinate_to=None, units=None, workload_version=None, **unknown_fields): + ''' + can_upgrade_to : str + charm : str - err : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ err : typing.Mapping[str, typing.Any] + exposed : bool + life : str - meter_statuses : typing.Mapping<~KT, +VT_co>[str, ~MeterStatus]<~MeterStatus> - relations : typing.Sequence<+T_co>[str] ++ meter_statuses : typing.Mapping[str, ~MeterStatus] ++ relations : typing.Sequence[str] + series : str + status : DetailedStatus - subordinate_to : typing.Sequence<+T_co>[str] - units : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus> ++ subordinate_to : typing.Sequence[str] ++ units : typing.Mapping[str, ~UnitStatus] + workload_version : str + ''' + self.can_upgrade_to = can_upgrade_to + self.charm = charm + self.err = err + self.exposed = exposed + self.life = life + self.meter_statuses = meter_statuses + self.relations = relations + self.series = series + self.status = DetailedStatus.from_json(status) if status else None + self.subordinate_to = subordinate_to + self.units = units + self.workload_version = workload_version + + + +class ApplicationStatusResult(Type): + _toSchema = {'application': 'application', 'error': 'error', 'units': 'units'} + _toPy = {'application': 'application', 'error': 'error', 'units': 'units'} + def __init__(self, application=None, error=None, units=None, **unknown_fields): + ''' + application : StatusResult + error : Error - units : typing.Mapping<~KT, +VT_co>[str, ~StatusResult]<~StatusResult> ++ units : typing.Mapping[str, ~StatusResult] + ''' + self.application = StatusResult.from_json(application) if application else None + self.error = Error.from_json(error) if error else None + self.units = units + + + +class ApplicationStatusResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult> ++ results : typing.Sequence[~ApplicationStatusResult] + ''' + self.results = [ApplicationStatusResult.from_json(o) for o in results or []] + + + +class ApplicationTag(Type): + _toSchema = {'name': 'Name'} + _toPy = {'Name': 'name'} + def __init__(self, name=None, **unknown_fields): + ''' + name : str + ''' + self.name = name + + + +class ApplicationURLs(Type): + _toSchema = {'application_urls': 'application-urls'} + _toPy = {'application-urls': 'application_urls'} + def __init__(self, application_urls=None, **unknown_fields): + ''' - application_urls : typing.Sequence<+T_co>[str] ++ application_urls : typing.Sequence[str] + ''' + self.application_urls = application_urls + + + +class ApplicationUnexpose(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + ++class ApplicationUnitParams(Type): ++ _toSchema = {'address': 'address', 'data': 'data', 'filesystem_info': 'filesystem-info', 'info': 'info', 'ports': 'ports', 'provider_id': 'provider-id', 'status': 'status', 'unit_tag': 'unit-tag'} ++ _toPy = {'address': 'address', 'data': 'data', 'filesystem-info': 'filesystem_info', 'info': 'info', 'ports': 'ports', 'provider-id': 'provider_id', 'status': 'status', 'unit-tag': 'unit_tag'} ++ def __init__(self, address=None, data=None, filesystem_info=None, info=None, ports=None, provider_id=None, status=None, unit_tag=None, **unknown_fields): ++ ''' ++ address : str ++ data : typing.Mapping[str, typing.Any] ++ filesystem_info : typing.Sequence[~KubernetesFilesystemInfo] ++ info : str ++ ports : typing.Sequence[str] ++ provider_id : str ++ status : str ++ unit_tag : str ++ ''' ++ self.address = address ++ self.data = data ++ self.filesystem_info = [KubernetesFilesystemInfo.from_json(o) for o in filesystem_info or []] ++ self.info = info ++ self.ports = ports ++ self.provider_id = provider_id ++ self.status = status ++ self.unit_tag = unit_tag ++ ++ ++ +class ApplicationUnset(Type): + _toSchema = {'application': 'application', 'options': 'options'} + _toPy = {'application': 'application', 'options': 'options'} + def __init__(self, application=None, options=None, **unknown_fields): + ''' + application : str - options : typing.Sequence<+T_co>[str] ++ options : typing.Sequence[str] + ''' + self.application = application + self.options = options + + + +class ApplicationUpdate(Type): + _toSchema = {'application': 'application', 'charm_url': 'charm-url', 'constraints': 'constraints', 'force_charm_url': 'force-charm-url', 'force_series': 'force-series', 'min_units': 'min-units', 'settings': 'settings', 'settings_yaml': 'settings-yaml'} + _toPy = {'application': 'application', 'charm-url': 'charm_url', 'constraints': 'constraints', 'force-charm-url': 'force_charm_url', 'force-series': 'force_series', 'min-units': 'min_units', 'settings': 'settings', 'settings-yaml': 'settings_yaml'} + def __init__(self, application=None, charm_url=None, constraints=None, force_charm_url=None, force_series=None, min_units=None, settings=None, settings_yaml=None, **unknown_fields): + ''' + application : str + charm_url : str + constraints : Value + force_charm_url : bool + force_series : bool + min_units : int - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + settings_yaml : str + ''' + self.application = application + self.charm_url = charm_url + self.constraints = Value.from_json(constraints) if constraints else None + self.force_charm_url = force_charm_url + self.force_series = force_series + self.min_units = min_units + self.settings = settings + self.settings_yaml = settings_yaml + + + +class ApplicationsCharmActionsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult> ++ results : typing.Sequence[~ApplicationCharmActionsResult] + ''' + self.results = [ApplicationCharmActionsResult.from_json(o) for o in results or []] + + + +class ApplicationsDeploy(Type): + _toSchema = {'applications': 'applications'} + _toPy = {'applications': 'applications'} + def __init__(self, applications=None, **unknown_fields): + ''' - applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy> ++ applications : typing.Sequence[~ApplicationDeploy] + ''' + self.applications = [ApplicationDeploy.from_json(o) for o in applications or []] + + + +class BackupsCreateArgs(Type): + _toSchema = {'notes': 'notes'} + _toPy = {'notes': 'notes'} + def __init__(self, notes=None, **unknown_fields): + ''' + notes : str + ''' + self.notes = notes + + + +class BackupsInfoArgs(Type): + _toSchema = {'id_': 'id'} + _toPy = {'id': 'id_'} + def __init__(self, id_=None, **unknown_fields): + ''' + id_ : str + ''' + self.id_ = id_ + + + +class BackupsListArgs(Type): + _toSchema = {} + _toPy = {} + def __init__(self, **unknown_fields): + ''' + + ''' + pass + + + +class BackupsListResult(Type): + _toSchema = {'list_': 'list'} + _toPy = {'list': 'list_'} + def __init__(self, list_=None, **unknown_fields): + ''' - list_ : typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult> ++ list_ : typing.Sequence[~BackupsMetadataResult] + ''' + self.list_ = [BackupsMetadataResult.from_json(o) for o in list_ or []] + + + +class BackupsMetadataResult(Type): + _toSchema = {'ca_cert': 'ca-cert', 'ca_private_key': 'ca-private-key', 'checksum': 'checksum', 'checksum_format': 'checksum-format', 'finished': 'finished', 'hostname': 'hostname', 'id_': 'id', 'machine': 'machine', 'model': 'model', 'notes': 'notes', 'series': 'series', 'size': 'size', 'started': 'started', 'stored': 'stored', 'version': 'version'} + _toPy = {'ca-cert': 'ca_cert', 'ca-private-key': 'ca_private_key', 'checksum': 'checksum', 'checksum-format': 'checksum_format', 'finished': 'finished', 'hostname': 'hostname', 'id': 'id_', 'machine': 'machine', 'model': 'model', 'notes': 'notes', 'series': 'series', 'size': 'size', 'started': 'started', 'stored': 'stored', 'version': 'version'} + def __init__(self, ca_cert=None, ca_private_key=None, checksum=None, checksum_format=None, finished=None, hostname=None, id_=None, machine=None, model=None, notes=None, series=None, size=None, started=None, stored=None, version=None, **unknown_fields): + ''' + ca_cert : str + ca_private_key : str + checksum : str + checksum_format : str + finished : str + hostname : str + id_ : str + machine : str + model : str + notes : str + series : str + size : int + started : str + stored : str + version : Number + ''' + self.ca_cert = ca_cert + self.ca_private_key = ca_private_key + self.checksum = checksum + self.checksum_format = checksum_format + self.finished = finished + self.hostname = hostname + self.id_ = id_ + self.machine = machine + self.model = model + self.notes = notes + self.series = series + self.size = size + self.started = started + self.stored = stored + self.version = Number.from_json(version) if version else None + + + +class BackupsRemoveArgs(Type): + _toSchema = {'id_': 'id'} + _toPy = {'id': 'id_'} + def __init__(self, id_=None, **unknown_fields): + ''' + id_ : str + ''' + self.id_ = id_ + + + +class Binary(Type): + _toSchema = {'arch': 'Arch', 'number': 'Number', 'series': 'Series'} + _toPy = {'Arch': 'arch', 'Number': 'number', 'Series': 'series'} + def __init__(self, arch=None, number=None, series=None, **unknown_fields): + ''' + arch : str + number : Number + series : str + ''' + self.arch = arch + self.number = Number.from_json(number) if number else None + self.series = series + + + +class Block(Type): + _toSchema = {'id_': 'id', 'message': 'message', 'tag': 'tag', 'type_': 'type'} + _toPy = {'id': 'id_', 'message': 'message', 'tag': 'tag', 'type': 'type_'} + def __init__(self, id_=None, message=None, tag=None, type_=None, **unknown_fields): + ''' + id_ : str + message : str + tag : str + type_ : str + ''' + self.id_ = id_ + self.message = message + self.tag = tag + self.type_ = type_ + + + +class BlockDevice(Type): + _toSchema = {'busaddress': 'BusAddress', 'devicelinks': 'DeviceLinks', 'devicename': 'DeviceName', 'filesystemtype': 'FilesystemType', 'hardwareid': 'HardwareId', 'inuse': 'InUse', 'label': 'Label', 'mountpoint': 'MountPoint', 'size': 'Size', 'uuid': 'UUID'} + _toPy = {'BusAddress': 'busaddress', 'DeviceLinks': 'devicelinks', 'DeviceName': 'devicename', 'FilesystemType': 'filesystemtype', 'HardwareId': 'hardwareid', 'InUse': 'inuse', 'Label': 'label', 'MountPoint': 'mountpoint', 'Size': 'size', 'UUID': 'uuid'} + def __init__(self, busaddress=None, devicelinks=None, devicename=None, filesystemtype=None, hardwareid=None, inuse=None, label=None, mountpoint=None, size=None, uuid=None, **unknown_fields): + ''' + busaddress : str - devicelinks : typing.Sequence<+T_co>[str] ++ devicelinks : typing.Sequence[str] + devicename : str + filesystemtype : str + hardwareid : str + inuse : bool + label : str + mountpoint : str + size : int + uuid : str + ''' + self.busaddress = busaddress + self.devicelinks = devicelinks + self.devicename = devicename + self.filesystemtype = filesystemtype + self.hardwareid = hardwareid + self.inuse = inuse + self.label = label + self.mountpoint = mountpoint + self.size = size + self.uuid = uuid + + + +class BlockDeviceResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : BlockDevice + ''' + self.error = Error.from_json(error) if error else None + self.result = BlockDevice.from_json(result) if result else None + + + +class BlockDeviceResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult> ++ results : typing.Sequence[~BlockDeviceResult] + ''' + self.results = [BlockDeviceResult.from_json(o) for o in results or []] + + + +class BlockResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : Block + ''' + self.error = Error.from_json(error) if error else None + self.result = Block.from_json(result) if result else None + + + +class BlockResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~BlockResult]<~BlockResult> ++ results : typing.Sequence[~BlockResult] + ''' + self.results = [BlockResult.from_json(o) for o in results or []] + + + +class BlockSwitchParams(Type): + _toSchema = {'message': 'message', 'type_': 'type'} + _toPy = {'message': 'message', 'type': 'type_'} + def __init__(self, message=None, type_=None, **unknown_fields): + ''' + message : str + type_ : str + ''' + self.message = message + self.type_ = type_ + + + +class BoolResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : bool + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class BoolResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~BoolResult]<~BoolResult> ++ results : typing.Sequence[~BoolResult] + ''' + self.results = [BoolResult.from_json(o) for o in results or []] + + + ++class BulkImportStorageParams(Type): ++ _toSchema = {'storage': 'storage'} ++ _toPy = {'storage': 'storage'} ++ def __init__(self, storage=None, **unknown_fields): ++ ''' ++ storage : typing.Sequence[~ImportStorageParams] ++ ''' ++ self.storage = [ImportStorageParams.from_json(o) for o in storage or []] ++ ++ ++ +class BundleChange(Type): + _toSchema = {'args': 'args', 'id_': 'id', 'method': 'method', 'requires': 'requires'} + _toPy = {'args': 'args', 'id': 'id_', 'method': 'method', 'requires': 'requires'} + def __init__(self, args=None, id_=None, method=None, requires=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[typing.Any] ++ args : typing.Sequence[typing.Any] + id_ : str + method : str - requires : typing.Sequence<+T_co>[str] ++ requires : typing.Sequence[str] + ''' + self.args = args + self.id_ = id_ + self.method = method + self.requires = requires + + + +class BundleChangesParams(Type): + _toSchema = {'yaml': 'yaml'} + _toPy = {'yaml': 'yaml'} + def __init__(self, yaml=None, **unknown_fields): + ''' + yaml : str + ''' + self.yaml = yaml + + + +class BundleChangesResults(Type): + _toSchema = {'changes': 'changes', 'errors': 'errors'} + _toPy = {'changes': 'changes', 'errors': 'errors'} + def __init__(self, changes=None, errors=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[~BundleChange]<~BundleChange> - errors : typing.Sequence<+T_co>[str] ++ changes : typing.Sequence[~BundleChange] ++ errors : typing.Sequence[str] + ''' + self.changes = [BundleChange.from_json(o) for o in changes or []] + self.errors = errors + + + +class BytesResult(Type): + _toSchema = {'result': 'result'} + _toPy = {'result': 'result'} + def __init__(self, result=None, **unknown_fields): + ''' - result : typing.Sequence<+T_co>[int] ++ result : typing.Sequence[int] + ''' + self.result = result + + + ++class ChangeModelCredentialParams(Type): ++ _toSchema = {'credential_tag': 'credential-tag', 'model_tag': 'model-tag'} ++ _toPy = {'credential-tag': 'credential_tag', 'model-tag': 'model_tag'} ++ def __init__(self, credential_tag=None, model_tag=None, **unknown_fields): ++ ''' ++ credential_tag : str ++ model_tag : str ++ ''' ++ self.credential_tag = credential_tag ++ self.model_tag = model_tag ++ ++ ++ ++class ChangeModelCredentialsParams(Type): ++ _toSchema = {'model_credentials': 'model-credentials'} ++ _toPy = {'model-credentials': 'model_credentials'} ++ def __init__(self, model_credentials=None, **unknown_fields): ++ ''' ++ model_credentials : typing.Sequence[~ChangeModelCredentialParams] ++ ''' ++ self.model_credentials = [ChangeModelCredentialParams.from_json(o) for o in model_credentials or []] ++ ++ ++ +class CharmActionSpec(Type): + _toSchema = {'description': 'description', 'params': 'params'} + _toPy = {'description': 'description', 'params': 'params'} + def __init__(self, description=None, params=None, **unknown_fields): + ''' + description : str - params : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ params : typing.Mapping[str, typing.Any] + ''' + self.description = description + self.params = params + + + +class CharmActions(Type): + _toSchema = {'specs': 'specs'} + _toPy = {'specs': 'specs'} + def __init__(self, specs=None, **unknown_fields): + ''' - specs : typing.Mapping<~KT, +VT_co>[str, ~CharmActionSpec]<~CharmActionSpec> ++ specs : typing.Mapping[str, ~CharmActionSpec] + ''' + self.specs = specs + + + ++class CharmDevice(Type): ++ _toSchema = {'countmax': 'CountMax', 'countmin': 'CountMin', 'description': 'Description', 'name': 'Name', 'type_': 'Type'} ++ _toPy = {'CountMax': 'countmax', 'CountMin': 'countmin', 'Description': 'description', 'Name': 'name', 'Type': 'type_'} ++ def __init__(self, countmax=None, countmin=None, description=None, name=None, type_=None, **unknown_fields): ++ ''' ++ countmax : int ++ countmin : int ++ description : str ++ name : str ++ type_ : str ++ ''' ++ self.countmax = countmax ++ self.countmin = countmin ++ self.description = description ++ self.name = name ++ self.type_ = type_ ++ ++ ++ +class CharmInfo(Type): + _toSchema = {'actions': 'actions', 'config': 'config', 'meta': 'meta', 'metrics': 'metrics', 'revision': 'revision', 'url': 'url'} + _toPy = {'actions': 'actions', 'config': 'config', 'meta': 'meta', 'metrics': 'metrics', 'revision': 'revision', 'url': 'url'} + def __init__(self, actions=None, config=None, meta=None, metrics=None, revision=None, url=None, **unknown_fields): + ''' + actions : CharmActions - config : typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption> ++ config : typing.Mapping[str, ~CharmOption] + meta : CharmMeta + metrics : CharmMetrics + revision : int + url : str + ''' + self.actions = CharmActions.from_json(actions) if actions else None + self.config = config + self.meta = CharmMeta.from_json(meta) if meta else None + self.metrics = CharmMetrics.from_json(metrics) if metrics else None + self.revision = revision + self.url = url + + + ++class CharmLXDProfile(Type): ++ _toSchema = {'config': 'config', 'description': 'description', 'devices': 'devices'} ++ _toPy = {'config': 'config', 'description': 'description', 'devices': 'devices'} ++ def __init__(self, config=None, description=None, devices=None, **unknown_fields): ++ ''' ++ config : typing.Mapping[str, str] ++ description : str ++ devices : typing.Mapping[str, typing.Any] ++ ''' ++ self.config = config ++ self.description = description ++ self.devices = devices ++ ++ ++ +class CharmMeta(Type): + _toSchema = {'categories': 'categories', 'description': 'description', 'extra_bindings': 'extra-bindings', 'min_juju_version': 'min-juju-version', 'name': 'name', 'payload_classes': 'payload-classes', 'peers': 'peers', 'provides': 'provides', 'requires': 'requires', 'resources': 'resources', 'series': 'series', 'storage': 'storage', 'subordinate': 'subordinate', 'summary': 'summary', 'tags': 'tags', 'terms': 'terms'} + _toPy = {'categories': 'categories', 'description': 'description', 'extra-bindings': 'extra_bindings', 'min-juju-version': 'min_juju_version', 'name': 'name', 'payload-classes': 'payload_classes', 'peers': 'peers', 'provides': 'provides', 'requires': 'requires', 'resources': 'resources', 'series': 'series', 'storage': 'storage', 'subordinate': 'subordinate', 'summary': 'summary', 'tags': 'tags', 'terms': 'terms'} + def __init__(self, categories=None, description=None, extra_bindings=None, min_juju_version=None, name=None, payload_classes=None, peers=None, provides=None, requires=None, resources=None, series=None, storage=None, subordinate=None, summary=None, tags=None, terms=None, **unknown_fields): + ''' - categories : typing.Sequence<+T_co>[str] ++ categories : typing.Sequence[str] + description : str - extra_bindings : typing.Mapping<~KT, +VT_co>[str, str] ++ extra_bindings : typing.Mapping[str, str] + min_juju_version : str + name : str - payload_classes : typing.Mapping<~KT, +VT_co>[str, ~CharmPayloadClass]<~CharmPayloadClass> - peers : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> - provides : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> - requires : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation> - resources : typing.Mapping<~KT, +VT_co>[str, ~CharmResourceMeta]<~CharmResourceMeta> - series : typing.Sequence<+T_co>[str] - storage : typing.Mapping<~KT, +VT_co>[str, ~CharmStorage]<~CharmStorage> ++ payload_classes : typing.Mapping[str, ~CharmPayloadClass] ++ peers : typing.Mapping[str, ~CharmRelation] ++ provides : typing.Mapping[str, ~CharmRelation] ++ requires : typing.Mapping[str, ~CharmRelation] ++ resources : typing.Mapping[str, ~CharmResourceMeta] ++ series : typing.Sequence[str] ++ storage : typing.Mapping[str, ~CharmStorage] + subordinate : bool + summary : str - tags : typing.Sequence<+T_co>[str] - terms : typing.Sequence<+T_co>[str] ++ tags : typing.Sequence[str] ++ terms : typing.Sequence[str] + ''' + self.categories = categories + self.description = description + self.extra_bindings = extra_bindings + self.min_juju_version = min_juju_version + self.name = name + self.payload_classes = payload_classes + self.peers = peers + self.provides = provides + self.requires = requires + self.resources = resources + self.series = series + self.storage = storage + self.subordinate = subordinate + self.summary = summary + self.tags = tags + self.terms = terms + + + +class CharmMetric(Type): + _toSchema = {'description': 'description', 'type_': 'type'} + _toPy = {'description': 'description', 'type': 'type_'} + def __init__(self, description=None, type_=None, **unknown_fields): + ''' + description : str + type_ : str + ''' + self.description = description + self.type_ = type_ + + + +class CharmMetrics(Type): + _toSchema = {'metrics': 'metrics', 'plan': 'plan'} + _toPy = {'metrics': 'metrics', 'plan': 'plan'} + def __init__(self, metrics=None, plan=None, **unknown_fields): + ''' - metrics : typing.Mapping<~KT, +VT_co>[str, ~CharmMetric]<~CharmMetric> ++ metrics : typing.Mapping[str, ~CharmMetric] + plan : CharmPlan + ''' + self.metrics = metrics + self.plan = CharmPlan.from_json(plan) if plan else None + + + +class CharmOption(Type): + _toSchema = {'default': 'default', 'description': 'description', 'type_': 'type'} + _toPy = {'default': 'default', 'description': 'description', 'type': 'type_'} + def __init__(self, default=None, description=None, type_=None, **unknown_fields): + ''' - default : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ default : typing.Mapping[str, typing.Any] + description : str + type_ : str + ''' + self.default = default + self.description = description + self.type_ = type_ + + + +class CharmPayloadClass(Type): + _toSchema = {'name': 'name', 'type_': 'type'} + _toPy = {'name': 'name', 'type': 'type_'} + def __init__(self, name=None, type_=None, **unknown_fields): + ''' + name : str + type_ : str + ''' + self.name = name + self.type_ = type_ + + + +class CharmPlan(Type): + _toSchema = {'required': 'required'} + _toPy = {'required': 'required'} + def __init__(self, required=None, **unknown_fields): + ''' + required : bool + ''' + self.required = required + + + +class CharmRelation(Type): + _toSchema = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'optional': 'optional', 'role': 'role', 'scope': 'scope'} + _toPy = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'optional': 'optional', 'role': 'role', 'scope': 'scope'} + def __init__(self, interface=None, limit=None, name=None, optional=None, role=None, scope=None, **unknown_fields): + ''' + interface : str + limit : int + name : str + optional : bool + role : str + scope : str + ''' + self.interface = interface + self.limit = limit + self.name = name + self.optional = optional + self.role = role + self.scope = scope + + + +class CharmResource(Type): + _toSchema = {'description': 'description', 'fingerprint': 'fingerprint', 'name': 'name', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'type_': 'type'} + _toPy = {'description': 'description', 'fingerprint': 'fingerprint', 'name': 'name', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'type': 'type_'} + def __init__(self, description=None, fingerprint=None, name=None, origin=None, path=None, revision=None, size=None, type_=None, **unknown_fields): + ''' + description : str - fingerprint : typing.Sequence<+T_co>[int] ++ fingerprint : typing.Sequence[int] + name : str + origin : str + path : str + revision : int + size : int + type_ : str + ''' + self.description = description + self.fingerprint = fingerprint + self.name = name + self.origin = origin + self.path = path + self.revision = revision + self.size = size + self.type_ = type_ + + + +class CharmResourceMeta(Type): + _toSchema = {'description': 'description', 'name': 'name', 'path': 'path', 'type_': 'type'} + _toPy = {'description': 'description', 'name': 'name', 'path': 'path', 'type': 'type_'} + def __init__(self, description=None, name=None, path=None, type_=None, **unknown_fields): + ''' + description : str + name : str + path : str + type_ : str + ''' + self.description = description + self.name = name + self.path = path + self.type_ = type_ + + + +class CharmStorage(Type): + _toSchema = {'count_max': 'count-max', 'count_min': 'count-min', 'description': 'description', 'location': 'location', 'minimum_size': 'minimum-size', 'name': 'name', 'properties': 'properties', 'read_only': 'read-only', 'shared': 'shared', 'type_': 'type'} + _toPy = {'count-max': 'count_max', 'count-min': 'count_min', 'description': 'description', 'location': 'location', 'minimum-size': 'minimum_size', 'name': 'name', 'properties': 'properties', 'read-only': 'read_only', 'shared': 'shared', 'type': 'type_'} + def __init__(self, count_max=None, count_min=None, description=None, location=None, minimum_size=None, name=None, properties=None, read_only=None, shared=None, type_=None, **unknown_fields): + ''' + count_max : int + count_min : int + description : str + location : str + minimum_size : int + name : str - properties : typing.Sequence<+T_co>[str] ++ properties : typing.Sequence[str] + read_only : bool + shared : bool + type_ : str + ''' + self.count_max = count_max + self.count_min = count_min + self.description = description + self.location = location + self.minimum_size = minimum_size + self.name = name + self.properties = properties + self.read_only = read_only + self.shared = shared + self.type_ = type_ + + + +class CharmURL(Type): + _toSchema = {'url': 'url'} + _toPy = {'url': 'url'} + def __init__(self, url=None, **unknown_fields): + ''' + url : str + ''' + self.url = url + + + +class CharmURLs(Type): + _toSchema = {'urls': 'urls'} + _toPy = {'urls': 'urls'} + def __init__(self, urls=None, **unknown_fields): + ''' - urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL> ++ urls : typing.Sequence[~CharmURL] + ''' + self.urls = [CharmURL.from_json(o) for o in urls or []] + + + +class CharmsList(Type): + _toSchema = {'names': 'names'} + _toPy = {'names': 'names'} + def __init__(self, names=None, **unknown_fields): + ''' - names : typing.Sequence<+T_co>[str] ++ names : typing.Sequence[str] + ''' + self.names = names + + + +class CharmsListResult(Type): + _toSchema = {'charm_urls': 'charm-urls'} + _toPy = {'charm-urls': 'charm_urls'} + def __init__(self, charm_urls=None, **unknown_fields): + ''' - charm_urls : typing.Sequence<+T_co>[str] ++ charm_urls : typing.Sequence[str] + ''' + self.charm_urls = charm_urls + + + +class ClaimLeadershipBulkParams(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams> ++ params : typing.Sequence[~ClaimLeadershipParams] + ''' + self.params = [ClaimLeadershipParams.from_json(o) for o in params or []] + + + +class ClaimLeadershipBulkResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ results : typing.Sequence[~ErrorResult] + ''' + self.results = [ErrorResult.from_json(o) for o in results or []] + + + +class ClaimLeadershipParams(Type): + _toSchema = {'application_tag': 'application-tag', 'duration': 'duration', 'unit_tag': 'unit-tag'} + _toPy = {'application-tag': 'application_tag', 'duration': 'duration', 'unit-tag': 'unit_tag'} + def __init__(self, application_tag=None, duration=None, unit_tag=None, **unknown_fields): + ''' + application_tag : str + duration : float + unit_tag : str + ''' + self.application_tag = application_tag + self.duration = duration + self.unit_tag = unit_tag + + + +class Cloud(Type): + _toSchema = {'auth_types': 'auth-types', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'regions': 'regions', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'} + _toPy = {'auth-types': 'auth_types', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'regions': 'regions', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'} + def __init__(self, auth_types=None, endpoint=None, identity_endpoint=None, regions=None, storage_endpoint=None, type_=None, **unknown_fields): + ''' - auth_types : typing.Sequence<+T_co>[str] ++ auth_types : typing.Sequence[str] + endpoint : str + identity_endpoint : str - regions : typing.Sequence<+T_co>[~CloudRegion]<~CloudRegion> ++ regions : typing.Sequence[~CloudRegion] + storage_endpoint : str + type_ : str + ''' + self.auth_types = auth_types + self.endpoint = endpoint + self.identity_endpoint = identity_endpoint + self.regions = [CloudRegion.from_json(o) for o in regions or []] + self.storage_endpoint = storage_endpoint + self.type_ = type_ + + + +class CloudCredential(Type): + _toSchema = {'attrs': 'attrs', 'auth_type': 'auth-type', 'redacted': 'redacted'} + _toPy = {'attrs': 'attrs', 'auth-type': 'auth_type', 'redacted': 'redacted'} + def __init__(self, attrs=None, auth_type=None, redacted=None, **unknown_fields): + ''' - attrs : typing.Mapping<~KT, +VT_co>[str, str] ++ attrs : typing.Mapping[str, str] + auth_type : str - redacted : typing.Sequence<+T_co>[str] ++ redacted : typing.Sequence[str] + ''' + self.attrs = attrs + self.auth_type = auth_type + self.redacted = redacted + + + - class CloudCredentialResult(Type): - _toSchema = {'error': 'error', 'result': 'result'} - _toPy = {'error': 'error', 'result': 'result'} ++class CloudCredentialArg(Type): ++ _toSchema = {'cloud_name': 'cloud-name', 'credential_name': 'credential-name'} ++ _toPy = {'cloud-name': 'cloud_name', 'credential-name': 'credential_name'} ++ def __init__(self, cloud_name=None, credential_name=None, **unknown_fields): ++ ''' ++ cloud_name : str ++ credential_name : str ++ ''' ++ self.cloud_name = cloud_name ++ self.credential_name = credential_name ++ ++ ++ ++class CloudCredentialArgs(Type): ++ _toSchema = {'credentials': 'credentials', 'include_secrets': 'include-secrets'} ++ _toPy = {'credentials': 'credentials', 'include-secrets': 'include_secrets'} ++ def __init__(self, credentials=None, include_secrets=None, **unknown_fields): ++ ''' ++ credentials : typing.Sequence[~CloudCredentialArg] ++ include_secrets : bool ++ ''' ++ self.credentials = [CloudCredentialArg.from_json(o) for o in credentials or []] ++ self.include_secrets = include_secrets ++ ++ ++ ++class CloudCredentialResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : CloudCredential + ''' + self.error = Error.from_json(error) if error else None + self.result = CloudCredential.from_json(result) if result else None + + + +class CloudCredentialResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult> ++ results : typing.Sequence[~CloudCredentialResult] + ''' + self.results = [CloudCredentialResult.from_json(o) for o in results or []] + + + ++class CloudDetails(Type): ++ _toSchema = {'auth_types': 'auth-types', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'regions': 'regions', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'} ++ _toPy = {'auth-types': 'auth_types', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'regions': 'regions', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'} ++ def __init__(self, auth_types=None, endpoint=None, identity_endpoint=None, regions=None, storage_endpoint=None, type_=None, **unknown_fields): ++ ''' ++ auth_types : typing.Sequence[str] ++ endpoint : str ++ identity_endpoint : str ++ regions : typing.Sequence[~CloudRegion] ++ storage_endpoint : str ++ type_ : str ++ ''' ++ self.auth_types = auth_types ++ self.endpoint = endpoint ++ self.identity_endpoint = identity_endpoint ++ self.regions = [CloudRegion.from_json(o) for o in regions or []] ++ self.storage_endpoint = storage_endpoint ++ self.type_ = type_ ++ ++ ++ +class CloudImageMetadata(Type): + _toSchema = {'arch': 'arch', 'image_id': 'image-id', 'priority': 'priority', 'region': 'region', 'root_storage_size': 'root-storage-size', 'root_storage_type': 'root-storage-type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt_type': 'virt-type'} + _toPy = {'arch': 'arch', 'image-id': 'image_id', 'priority': 'priority', 'region': 'region', 'root-storage-size': 'root_storage_size', 'root-storage-type': 'root_storage_type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt-type': 'virt_type'} + def __init__(self, arch=None, image_id=None, priority=None, region=None, root_storage_size=None, root_storage_type=None, series=None, source=None, stream=None, version=None, virt_type=None, **unknown_fields): + ''' + arch : str + image_id : str + priority : int + region : str + root_storage_size : int + root_storage_type : str + series : str + source : str + stream : str + version : str + virt_type : str + ''' + self.arch = arch + self.image_id = image_id + self.priority = priority + self.region = region + self.root_storage_size = root_storage_size + self.root_storage_type = root_storage_type + self.series = series + self.source = source + self.stream = stream + self.version = version + self.virt_type = virt_type + + + +class CloudImageMetadataList(Type): + _toSchema = {'metadata': 'metadata'} + _toPy = {'metadata': 'metadata'} + def __init__(self, metadata=None, **unknown_fields): + ''' - metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata> ++ metadata : typing.Sequence[~CloudImageMetadata] + ''' + self.metadata = [CloudImageMetadata.from_json(o) for o in metadata or []] + + + ++class CloudInfo(Type): ++ _toSchema = {'clouddetails': 'CloudDetails', 'users': 'users'} ++ _toPy = {'CloudDetails': 'clouddetails', 'users': 'users'} ++ def __init__(self, clouddetails=None, users=None, **unknown_fields): ++ ''' ++ clouddetails : CloudDetails ++ users : typing.Sequence[~CloudUserInfo] ++ ''' ++ self.clouddetails = CloudDetails.from_json(clouddetails) if clouddetails else None ++ self.users = [CloudUserInfo.from_json(o) for o in users or []] ++ ++ ++ ++class CloudInfoResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : CloudInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = CloudInfo.from_json(result) if result else None ++ ++ ++ ++class CloudInfoResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~CloudInfoResult] ++ ''' ++ self.results = [CloudInfoResult.from_json(o) for o in results or []] ++ ++ ++ +class CloudInstanceTypesConstraint(Type): + _toSchema = {'cloud_tag': 'cloud-tag', 'constraints': 'constraints', 'region': 'region'} + _toPy = {'cloud-tag': 'cloud_tag', 'constraints': 'constraints', 'region': 'region'} + def __init__(self, cloud_tag=None, constraints=None, region=None, **unknown_fields): + ''' + cloud_tag : str + constraints : Value + region : str + ''' + self.cloud_tag = cloud_tag + self.constraints = Value.from_json(constraints) if constraints else None + self.region = region + + + +class CloudInstanceTypesConstraints(Type): + _toSchema = {'constraints': 'constraints'} + _toPy = {'constraints': 'constraints'} + def __init__(self, constraints=None, **unknown_fields): + ''' - constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint> ++ constraints : typing.Sequence[~CloudInstanceTypesConstraint] + ''' + self.constraints = [CloudInstanceTypesConstraint.from_json(o) for o in constraints or []] + + + +class CloudRegion(Type): + _toSchema = {'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'name': 'name', 'storage_endpoint': 'storage-endpoint'} + _toPy = {'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'name': 'name', 'storage-endpoint': 'storage_endpoint'} + def __init__(self, endpoint=None, identity_endpoint=None, name=None, storage_endpoint=None, **unknown_fields): + ''' + endpoint : str + identity_endpoint : str + name : str + storage_endpoint : str + ''' + self.endpoint = endpoint + self.identity_endpoint = identity_endpoint + self.name = name + self.storage_endpoint = storage_endpoint + + + +class CloudResult(Type): + _toSchema = {'cloud': 'cloud', 'error': 'error'} + _toPy = {'cloud': 'cloud', 'error': 'error'} + def __init__(self, cloud=None, error=None, **unknown_fields): + ''' + cloud : Cloud + error : Error + ''' + self.cloud = Cloud.from_json(cloud) if cloud else None + self.error = Error.from_json(error) if error else None + + + +class CloudResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~CloudResult]<~CloudResult> ++ results : typing.Sequence[~CloudResult] + ''' + self.results = [CloudResult.from_json(o) for o in results or []] + + + +class CloudSpec(Type): + _toSchema = {'credential': 'credential', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'name': 'name', 'region': 'region', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'} + _toPy = {'credential': 'credential', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'name': 'name', 'region': 'region', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'} + def __init__(self, credential=None, endpoint=None, identity_endpoint=None, name=None, region=None, storage_endpoint=None, type_=None, **unknown_fields): + ''' + credential : CloudCredential + endpoint : str + identity_endpoint : str + name : str + region : str + storage_endpoint : str + type_ : str + ''' + self.credential = CloudCredential.from_json(credential) if credential else None + self.endpoint = endpoint + self.identity_endpoint = identity_endpoint + self.name = name + self.region = region + self.storage_endpoint = storage_endpoint + self.type_ = type_ + + + +class CloudSpecResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : CloudSpec + ''' + self.error = Error.from_json(error) if error else None + self.result = CloudSpec.from_json(result) if result else None + + + +class CloudSpecResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult> ++ results : typing.Sequence[~CloudSpecResult] + ''' + self.results = [CloudSpecResult.from_json(o) for o in results or []] + + + ++class CloudUserInfo(Type): ++ _toSchema = {'access': 'access', 'display_name': 'display-name', 'user': 'user'} ++ _toPy = {'access': 'access', 'display-name': 'display_name', 'user': 'user'} ++ def __init__(self, access=None, display_name=None, user=None, **unknown_fields): ++ ''' ++ access : str ++ display_name : str ++ user : str ++ ''' ++ self.access = access ++ self.display_name = display_name ++ self.user = user ++ ++ ++ +class CloudsResult(Type): + _toSchema = {'clouds': 'clouds'} + _toPy = {'clouds': 'clouds'} + def __init__(self, clouds=None, **unknown_fields): + ''' - clouds : typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud> ++ clouds : typing.Mapping[str, ~Cloud] + ''' + self.clouds = clouds + + + ++class ConfigResult(Type): ++ _toSchema = {'config': 'config', 'error': 'error'} ++ _toPy = {'config': 'config', 'error': 'error'} ++ def __init__(self, config=None, error=None, **unknown_fields): ++ ''' ++ config : typing.Mapping[str, typing.Any] ++ error : Error ++ ''' ++ self.config = config ++ self.error = Error.from_json(error) if error else None ++ ++ ++ +class ConfigSettingsResult(Type): + _toSchema = {'error': 'error', 'settings': 'settings'} + _toPy = {'error': 'error', 'settings': 'settings'} + def __init__(self, error=None, settings=None, **unknown_fields): + ''' + error : Error - settings : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ settings : typing.Mapping[str, typing.Any] + ''' + self.error = Error.from_json(error) if error else None + self.settings = settings + + + +class ConfigSettingsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult> ++ results : typing.Sequence[~ConfigSettingsResult] + ''' + self.results = [ConfigSettingsResult.from_json(o) for o in results or []] + + + +class ConfigValue(Type): + _toSchema = {'source': 'source', 'value': 'value'} + _toPy = {'source': 'source', 'value': 'value'} + def __init__(self, source=None, value=None, **unknown_fields): + ''' + source : str - value : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ value : typing.Mapping[str, typing.Any] + ''' + self.source = source + self.value = value + + + +class Constraints(Type): + _toSchema = {'count': 'Count', 'pool': 'Pool', 'size': 'Size'} + _toPy = {'Count': 'count', 'Pool': 'pool', 'Size': 'size'} + def __init__(self, count=None, pool=None, size=None, **unknown_fields): + ''' + count : int + pool : str + size : int + ''' + self.count = count + self.pool = pool + self.size = size + + + +class ConstraintsResult(Type): + _toSchema = {'constraints': 'constraints', 'error': 'error'} + _toPy = {'constraints': 'constraints', 'error': 'error'} + def __init__(self, constraints=None, error=None, **unknown_fields): + ''' + constraints : Value + error : Error + ''' + self.constraints = Value.from_json(constraints) if constraints else None + self.error = Error.from_json(error) if error else None + + + +class ConstraintsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult> ++ results : typing.Sequence[~ConstraintsResult] + ''' + self.results = [ConstraintsResult.from_json(o) for o in results or []] + + + +class ConsumeApplicationArg(Type): + _toSchema = {'application_alias': 'application-alias', 'application_url': 'application-url'} + _toPy = {'application-alias': 'application_alias', 'application-url': 'application_url'} + def __init__(self, application_alias=None, application_url=None, **unknown_fields): + ''' + application_alias : str + application_url : str + ''' + self.application_alias = application_alias + self.application_url = application_url + + + +class ConsumeApplicationArgs(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg> ++ args : typing.Sequence[~ConsumeApplicationArg] + ''' + self.args = [ConsumeApplicationArg.from_json(o) for o in args or []] + + + +class ConsumeApplicationResult(Type): + _toSchema = {'error': 'error', 'local_name': 'local-name'} + _toPy = {'error': 'error', 'local-name': 'local_name'} + def __init__(self, error=None, local_name=None, **unknown_fields): + ''' + error : Error + local_name : str + ''' + self.error = Error.from_json(error) if error else None + self.local_name = local_name + + + +class ConsumeApplicationResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult> ++ results : typing.Sequence[~ConsumeApplicationResult] + ''' + self.results = [ConsumeApplicationResult.from_json(o) for o in results or []] + + + ++class ConsumeOfferDetails(Type): ++ _toSchema = {'external_controller': 'external-controller', 'macaroon': 'macaroon', 'offer': 'offer'} ++ _toPy = {'external-controller': 'external_controller', 'macaroon': 'macaroon', 'offer': 'offer'} ++ def __init__(self, external_controller=None, macaroon=None, offer=None, **unknown_fields): ++ ''' ++ external_controller : ExternalControllerInfo ++ macaroon : Macaroon ++ offer : ApplicationOfferDetails ++ ''' ++ self.external_controller = ExternalControllerInfo.from_json(external_controller) if external_controller else None ++ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None ++ self.offer = ApplicationOfferDetails.from_json(offer) if offer else None ++ ++ ++ ++class ConsumeOfferDetailsResult(Type): ++ _toSchema = {'consumeofferdetails': 'ConsumeOfferDetails', 'error': 'error'} ++ _toPy = {'ConsumeOfferDetails': 'consumeofferdetails', 'error': 'error'} ++ def __init__(self, consumeofferdetails=None, error=None, **unknown_fields): ++ ''' ++ consumeofferdetails : ConsumeOfferDetails ++ error : Error ++ ''' ++ self.consumeofferdetails = ConsumeOfferDetails.from_json(consumeofferdetails) if consumeofferdetails else None ++ self.error = Error.from_json(error) if error else None ++ ++ ++ ++class ConsumeOfferDetailsResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ConsumeOfferDetailsResult] ++ ''' ++ self.results = [ConsumeOfferDetailsResult.from_json(o) for o in results or []] ++ ++ ++ +class ContainerConfig(Type): + _toSchema = {'apt_mirror': 'apt-mirror', 'apt_proxy': 'apt-proxy', 'authorized_keys': 'authorized-keys', 'provider_type': 'provider-type', 'proxy': 'proxy', 'ssl_hostname_verification': 'ssl-hostname-verification', 'updatebehavior': 'UpdateBehavior'} + _toPy = {'UpdateBehavior': 'updatebehavior', 'apt-mirror': 'apt_mirror', 'apt-proxy': 'apt_proxy', 'authorized-keys': 'authorized_keys', 'provider-type': 'provider_type', 'proxy': 'proxy', 'ssl-hostname-verification': 'ssl_hostname_verification'} + def __init__(self, updatebehavior=None, apt_mirror=None, apt_proxy=None, authorized_keys=None, provider_type=None, proxy=None, ssl_hostname_verification=None, **unknown_fields): + ''' + updatebehavior : UpdateBehavior + apt_mirror : str + apt_proxy : Settings + authorized_keys : str + provider_type : str + proxy : Settings + ssl_hostname_verification : bool + ''' + self.updatebehavior = UpdateBehavior.from_json(updatebehavior) if updatebehavior else None + self.apt_mirror = apt_mirror + self.apt_proxy = Settings.from_json(apt_proxy) if apt_proxy else None + self.authorized_keys = authorized_keys + self.provider_type = provider_type + self.proxy = Settings.from_json(proxy) if proxy else None + self.ssl_hostname_verification = ssl_hostname_verification + + + ++class ContainerLXDProfile(Type): ++ _toSchema = {'name': 'name', 'profile': 'profile'} ++ _toPy = {'name': 'name', 'profile': 'profile'} ++ def __init__(self, name=None, profile=None, **unknown_fields): ++ ''' ++ name : str ++ profile : CharmLXDProfile ++ ''' ++ self.name = name ++ self.profile = CharmLXDProfile.from_json(profile) if profile else None ++ ++ ++ +class ContainerManagerConfig(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, str] ++ config : typing.Mapping[str, str] + ''' + self.config = config + + + +class ContainerManagerConfigParams(Type): + _toSchema = {'type_': 'type'} + _toPy = {'type': 'type_'} + def __init__(self, type_=None, **unknown_fields): + ''' + type_ : str + ''' + self.type_ = type_ + + + ++class ContainerProfileResult(Type): ++ _toSchema = {'error': 'error', 'lxd_profiles': 'lxd-profiles'} ++ _toPy = {'error': 'error', 'lxd-profiles': 'lxd_profiles'} ++ def __init__(self, error=None, lxd_profiles=None, **unknown_fields): ++ ''' ++ error : Error ++ lxd_profiles : typing.Sequence[~ContainerLXDProfile] ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.lxd_profiles = [ContainerLXDProfile.from_json(o) for o in lxd_profiles or []] ++ ++ ++ ++class ContainerProfileResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ContainerProfileResult] ++ ''' ++ self.results = [ContainerProfileResult.from_json(o) for o in results or []] ++ ++ ++ ++class ControllerAPIInfoResult(Type): ++ _toSchema = {'addresses': 'addresses', 'cacert': 'cacert', 'error': 'error'} ++ _toPy = {'addresses': 'addresses', 'cacert': 'cacert', 'error': 'error'} ++ def __init__(self, addresses=None, cacert=None, error=None, **unknown_fields): ++ ''' ++ addresses : typing.Sequence[str] ++ cacert : str ++ error : Error ++ ''' ++ self.addresses = addresses ++ self.cacert = cacert ++ self.error = Error.from_json(error) if error else None ++ ++ ++ ++class ControllerAPIInfoResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ControllerAPIInfoResult] ++ ''' ++ self.results = [ControllerAPIInfoResult.from_json(o) for o in results or []] ++ ++ ++ +class ControllerConfigResult(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] ++ ''' ++ self.config = config ++ ++ ++ ++class ControllerConfigSet(Type): ++ _toSchema = {'config': 'config'} ++ _toPy = {'config': 'config'} ++ def __init__(self, config=None, **unknown_fields): ++ ''' ++ config : typing.Mapping[str, typing.Any] + ''' + self.config = config + + + ++class ControllerCredentialInfo(Type): ++ _toSchema = {'content': 'content', 'models': 'models'} ++ _toPy = {'content': 'content', 'models': 'models'} ++ def __init__(self, content=None, models=None, **unknown_fields): ++ ''' ++ content : CredentialContent ++ models : typing.Sequence[~ModelAccess] ++ ''' ++ self.content = CredentialContent.from_json(content) if content else None ++ self.models = [ModelAccess.from_json(o) for o in models or []] ++ ++ ++ +class ControllersChangeResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : ControllersChanges + ''' + self.error = Error.from_json(error) if error else None + self.result = ControllersChanges.from_json(result) if result else None + + + +class ControllersChangeResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult> ++ results : typing.Sequence[~ControllersChangeResult] + ''' + self.results = [ControllersChangeResult.from_json(o) for o in results or []] + + + +class ControllersChanges(Type): + _toSchema = {'added': 'added', 'converted': 'converted', 'demoted': 'demoted', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed'} + _toPy = {'added': 'added', 'converted': 'converted', 'demoted': 'demoted', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed'} + def __init__(self, added=None, converted=None, demoted=None, maintained=None, promoted=None, removed=None, **unknown_fields): + ''' - added : typing.Sequence<+T_co>[str] - converted : typing.Sequence<+T_co>[str] - demoted : typing.Sequence<+T_co>[str] - maintained : typing.Sequence<+T_co>[str] - promoted : typing.Sequence<+T_co>[str] - removed : typing.Sequence<+T_co>[str] ++ added : typing.Sequence[str] ++ converted : typing.Sequence[str] ++ demoted : typing.Sequence[str] ++ maintained : typing.Sequence[str] ++ promoted : typing.Sequence[str] ++ removed : typing.Sequence[str] + ''' + self.added = added + self.converted = converted + self.demoted = demoted + self.maintained = maintained + self.promoted = promoted + self.removed = removed + + + +class ControllersSpec(Type): + _toSchema = {'constraints': 'constraints', 'num_controllers': 'num-controllers', 'placement': 'placement', 'series': 'series'} + _toPy = {'constraints': 'constraints', 'num-controllers': 'num_controllers', 'placement': 'placement', 'series': 'series'} + def __init__(self, constraints=None, num_controllers=None, placement=None, series=None, **unknown_fields): + ''' + constraints : Value + num_controllers : int - placement : typing.Sequence<+T_co>[str] ++ placement : typing.Sequence[str] + series : str + ''' + self.constraints = Value.from_json(constraints) if constraints else None + self.num_controllers = num_controllers + self.placement = placement + self.series = series + + + +class ControllersSpecs(Type): + _toSchema = {'specs': 'specs'} + _toPy = {'specs': 'specs'} + def __init__(self, specs=None, **unknown_fields): + ''' - specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec> ++ specs : typing.Sequence[~ControllersSpec] + ''' + self.specs = [ControllersSpec.from_json(o) for o in specs or []] + + + +class CreateSpaceParams(Type): + _toSchema = {'provider_id': 'provider-id', 'public': 'public', 'space_tag': 'space-tag', 'subnet_tags': 'subnet-tags'} + _toPy = {'provider-id': 'provider_id', 'public': 'public', 'space-tag': 'space_tag', 'subnet-tags': 'subnet_tags'} + def __init__(self, provider_id=None, public=None, space_tag=None, subnet_tags=None, **unknown_fields): + ''' + provider_id : str + public : bool + space_tag : str - subnet_tags : typing.Sequence<+T_co>[str] ++ subnet_tags : typing.Sequence[str] + ''' + self.provider_id = provider_id + self.public = public + self.space_tag = space_tag + self.subnet_tags = subnet_tags + + + +class CreateSpacesParams(Type): + _toSchema = {'spaces': 'spaces'} + _toPy = {'spaces': 'spaces'} + def __init__(self, spaces=None, **unknown_fields): + ''' - spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams> ++ spaces : typing.Sequence[~CreateSpaceParams] + ''' + self.spaces = [CreateSpaceParams.from_json(o) for o in spaces or []] + + + ++class CredentialContent(Type): ++ _toSchema = {'attrs': 'attrs', 'auth_type': 'auth-type', 'cloud': 'cloud', 'name': 'name'} ++ _toPy = {'attrs': 'attrs', 'auth-type': 'auth_type', 'cloud': 'cloud', 'name': 'name'} ++ def __init__(self, attrs=None, auth_type=None, cloud=None, name=None, **unknown_fields): ++ ''' ++ attrs : typing.Mapping[str, str] ++ auth_type : str ++ cloud : str ++ name : str ++ ''' ++ self.attrs = attrs ++ self.auth_type = auth_type ++ self.cloud = cloud ++ self.name = name ++ ++ ++ ++class CredentialContentResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ControllerCredentialInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ControllerCredentialInfo.from_json(result) if result else None ++ ++ ++ ++class CredentialContentResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~CredentialContentResult] ++ ''' ++ self.results = [CredentialContentResult.from_json(o) for o in results or []] ++ ++ ++ +class Delta(Type): + _toSchema = {'entity': 'entity', 'removed': 'removed'} + _toPy = {'entity': 'entity', 'removed': 'removed'} + def __init__(self, entity=None, removed=None, **unknown_fields): + ''' - entity : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ entity : typing.Mapping[str, typing.Any] + removed : bool + ''' + self.entity = entity + self.removed = removed + + + +class DeployerConnectionValues(Type): + _toSchema = {'api_addresses': 'api-addresses', 'state_addresses': 'state-addresses'} + _toPy = {'api-addresses': 'api_addresses', 'state-addresses': 'state_addresses'} + def __init__(self, api_addresses=None, state_addresses=None, **unknown_fields): + ''' - api_addresses : typing.Sequence<+T_co>[str] - state_addresses : typing.Sequence<+T_co>[str] ++ api_addresses : typing.Sequence[str] ++ state_addresses : typing.Sequence[str] + ''' + self.api_addresses = api_addresses + self.state_addresses = state_addresses + + + +class DestroyApplicationInfo(Type): + _toSchema = {'destroyed_storage': 'destroyed-storage', 'destroyed_units': 'destroyed-units', 'detached_storage': 'detached-storage'} + _toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'} + def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields): + ''' - destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity> - destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity> - detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity> ++ destroyed_storage : typing.Sequence[~Entity] ++ destroyed_units : typing.Sequence[~Entity] ++ detached_storage : typing.Sequence[~Entity] + ''' + self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []] + self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []] + self.detached_storage = [Entity.from_json(o) for o in detached_storage or []] + + + ++class DestroyApplicationOffers(Type): ++ _toSchema = {'force': 'force', 'offer_urls': 'offer-urls'} ++ _toPy = {'force': 'force', 'offer-urls': 'offer_urls'} ++ def __init__(self, force=None, offer_urls=None, **unknown_fields): ++ ''' ++ force : bool ++ offer_urls : typing.Sequence[str] ++ ''' ++ self.force = force ++ self.offer_urls = offer_urls ++ ++ ++ ++class DestroyApplicationParams(Type): ++ _toSchema = {'application_tag': 'application-tag', 'destroy_storage': 'destroy-storage'} ++ _toPy = {'application-tag': 'application_tag', 'destroy-storage': 'destroy_storage'} ++ def __init__(self, application_tag=None, destroy_storage=None, **unknown_fields): ++ ''' ++ application_tag : str ++ destroy_storage : bool ++ ''' ++ self.application_tag = application_tag ++ self.destroy_storage = destroy_storage ++ ++ ++ +class DestroyApplicationResult(Type): + _toSchema = {'error': 'error', 'info': 'info'} + _toPy = {'error': 'error', 'info': 'info'} + def __init__(self, error=None, info=None, **unknown_fields): + ''' + error : Error + info : DestroyApplicationInfo + ''' + self.error = Error.from_json(error) if error else None + self.info = DestroyApplicationInfo.from_json(info) if info else None + + + +class DestroyApplicationResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult> ++ results : typing.Sequence[~DestroyApplicationResult] + ''' + self.results = [DestroyApplicationResult.from_json(o) for o in results or []] + + + +class DestroyApplicationUnits(Type): + _toSchema = {'unit_names': 'unit-names'} + _toPy = {'unit-names': 'unit_names'} + def __init__(self, unit_names=None, **unknown_fields): + ''' - unit_names : typing.Sequence<+T_co>[str] ++ unit_names : typing.Sequence[str] + ''' + self.unit_names = unit_names + + + ++class DestroyApplicationsParams(Type): ++ _toSchema = {'applications': 'applications'} ++ _toPy = {'applications': 'applications'} ++ def __init__(self, applications=None, **unknown_fields): ++ ''' ++ applications : typing.Sequence[~DestroyApplicationParams] ++ ''' ++ self.applications = [DestroyApplicationParams.from_json(o) for o in applications or []] ++ ++ ++ ++class DestroyConsumedApplicationParams(Type): ++ _toSchema = {'application_tag': 'application-tag'} ++ _toPy = {'application-tag': 'application_tag'} ++ def __init__(self, application_tag=None, **unknown_fields): ++ ''' ++ application_tag : str ++ ''' ++ self.application_tag = application_tag ++ ++ ++ ++class DestroyConsumedApplicationsParams(Type): ++ _toSchema = {'applications': 'applications'} ++ _toPy = {'applications': 'applications'} ++ def __init__(self, applications=None, **unknown_fields): ++ ''' ++ applications : typing.Sequence[~DestroyConsumedApplicationParams] ++ ''' ++ self.applications = [DestroyConsumedApplicationParams.from_json(o) for o in applications or []] ++ ++ ++ +class DestroyControllerArgs(Type): + _toSchema = {'destroy_models': 'destroy-models'} + _toPy = {'destroy-models': 'destroy_models'} + def __init__(self, destroy_models=None, **unknown_fields): + ''' + destroy_models : bool + ''' + self.destroy_models = destroy_models + + + +class DestroyMachineInfo(Type): + _toSchema = {'destroyed_storage': 'destroyed-storage', 'destroyed_units': 'destroyed-units', 'detached_storage': 'detached-storage'} + _toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'} + def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields): + ''' - destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity> - destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity> - detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity> ++ destroyed_storage : typing.Sequence[~Entity] ++ destroyed_units : typing.Sequence[~Entity] ++ detached_storage : typing.Sequence[~Entity] + ''' + self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []] + self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []] + self.detached_storage = [Entity.from_json(o) for o in detached_storage or []] + + + +class DestroyMachineResult(Type): + _toSchema = {'error': 'error', 'info': 'info'} + _toPy = {'error': 'error', 'info': 'info'} + def __init__(self, error=None, info=None, **unknown_fields): + ''' + error : Error + info : DestroyMachineInfo + ''' + self.error = Error.from_json(error) if error else None + self.info = DestroyMachineInfo.from_json(info) if info else None + + + +class DestroyMachineResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult> ++ results : typing.Sequence[~DestroyMachineResult] + ''' + self.results = [DestroyMachineResult.from_json(o) for o in results or []] + + + +class DestroyMachines(Type): + _toSchema = {'force': 'force', 'machine_names': 'machine-names'} + _toPy = {'force': 'force', 'machine-names': 'machine_names'} + def __init__(self, force=None, machine_names=None, **unknown_fields): + ''' + force : bool - machine_names : typing.Sequence<+T_co>[str] ++ machine_names : typing.Sequence[str] + ''' + self.force = force + self.machine_names = machine_names + + + ++class DestroyMachinesParams(Type): ++ _toSchema = {'force': 'force', 'keep': 'keep', 'machine_tags': 'machine-tags'} ++ _toPy = {'force': 'force', 'keep': 'keep', 'machine-tags': 'machine_tags'} ++ def __init__(self, force=None, keep=None, machine_tags=None, **unknown_fields): ++ ''' ++ force : bool ++ keep : bool ++ machine_tags : typing.Sequence[str] ++ ''' ++ self.force = force ++ self.keep = keep ++ self.machine_tags = machine_tags ++ ++ ++ ++class DestroyModelParams(Type): ++ _toSchema = {'destroy_storage': 'destroy-storage', 'model_tag': 'model-tag'} ++ _toPy = {'destroy-storage': 'destroy_storage', 'model-tag': 'model_tag'} ++ def __init__(self, destroy_storage=None, model_tag=None, **unknown_fields): ++ ''' ++ destroy_storage : bool ++ model_tag : str ++ ''' ++ self.destroy_storage = destroy_storage ++ self.model_tag = model_tag ++ ++ ++ ++class DestroyModelsParams(Type): ++ _toSchema = {'models': 'models'} ++ _toPy = {'models': 'models'} ++ def __init__(self, models=None, **unknown_fields): ++ ''' ++ models : typing.Sequence[~DestroyModelParams] ++ ''' ++ self.models = [DestroyModelParams.from_json(o) for o in models or []] ++ ++ ++ +class DestroyRelation(Type): + _toSchema = {'endpoints': 'endpoints'} + _toPy = {'endpoints': 'endpoints'} + def __init__(self, endpoints=None, **unknown_fields): + ''' - endpoints : typing.Sequence<+T_co>[str] ++ endpoints : typing.Sequence[str] + ''' + self.endpoints = endpoints + + + +class DestroyUnitInfo(Type): + _toSchema = {'destroyed_storage': 'destroyed-storage', 'detached_storage': 'detached-storage'} + _toPy = {'destroyed-storage': 'destroyed_storage', 'detached-storage': 'detached_storage'} + def __init__(self, destroyed_storage=None, detached_storage=None, **unknown_fields): + ''' - destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity> - detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity> ++ destroyed_storage : typing.Sequence[~Entity] ++ detached_storage : typing.Sequence[~Entity] + ''' + self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []] + self.detached_storage = [Entity.from_json(o) for o in detached_storage or []] + + + ++class DestroyUnitParams(Type): ++ _toSchema = {'destroy_storage': 'destroy-storage', 'unit_tag': 'unit-tag'} ++ _toPy = {'destroy-storage': 'destroy_storage', 'unit-tag': 'unit_tag'} ++ def __init__(self, destroy_storage=None, unit_tag=None, **unknown_fields): ++ ''' ++ destroy_storage : bool ++ unit_tag : str ++ ''' ++ self.destroy_storage = destroy_storage ++ self.unit_tag = unit_tag ++ ++ ++ +class DestroyUnitResult(Type): + _toSchema = {'error': 'error', 'info': 'info'} + _toPy = {'error': 'error', 'info': 'info'} + def __init__(self, error=None, info=None, **unknown_fields): + ''' + error : Error + info : DestroyUnitInfo + ''' + self.error = Error.from_json(error) if error else None + self.info = DestroyUnitInfo.from_json(info) if info else None + + + +class DestroyUnitResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult> ++ results : typing.Sequence[~DestroyUnitResult] + ''' + self.results = [DestroyUnitResult.from_json(o) for o in results or []] + + + ++class DestroyUnitsParams(Type): ++ _toSchema = {'units': 'units'} ++ _toPy = {'units': 'units'} ++ def __init__(self, units=None, **unknown_fields): ++ ''' ++ units : typing.Sequence[~DestroyUnitParams] ++ ''' ++ self.units = [DestroyUnitParams.from_json(o) for o in units or []] ++ ++ ++ +class DetailedStatus(Type): + _toSchema = {'data': 'data', 'err': 'err', 'info': 'info', 'kind': 'kind', 'life': 'life', 'since': 'since', 'status': 'status', 'version': 'version'} + _toPy = {'data': 'data', 'err': 'err', 'info': 'info', 'kind': 'kind', 'life': 'life', 'since': 'since', 'status': 'status', 'version': 'version'} + def __init__(self, data=None, err=None, info=None, kind=None, life=None, since=None, status=None, version=None, **unknown_fields): + ''' - data : typing.Mapping<~KT, +VT_co>[str, typing.Any] - err : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ data : typing.Mapping[str, typing.Any] ++ err : typing.Mapping[str, typing.Any] + info : str + kind : str + life : str + since : str + status : str + version : str + ''' + self.data = data + self.err = err + self.info = info + self.kind = kind + self.life = life + self.since = since + self.status = status + self.version = version + + + +class DeviceBridgeInfo(Type): + _toSchema = {'bridge_name': 'bridge-name', 'host_device_name': 'host-device-name'} + _toPy = {'bridge-name': 'bridge_name', 'host-device-name': 'host_device_name'} + def __init__(self, bridge_name=None, host_device_name=None, **unknown_fields): + ''' + bridge_name : str + host_device_name : str + ''' + self.bridge_name = bridge_name + self.host_device_name = host_device_name + + + +class DiscoverSpacesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace> ++ results : typing.Sequence[~ProviderSpace] + ''' + self.results = [ProviderSpace.from_json(o) for o in results or []] + + + +class DistributionGroupResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Sequence<+T_co>[str] ++ result : typing.Sequence[str] + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class DistributionGroupResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult> ++ results : typing.Sequence[~DistributionGroupResult] + ''' + self.results = [DistributionGroupResult.from_json(o) for o in results or []] + + + +class DumpModelRequest(Type): + _toSchema = {'entities': 'entities', 'simplified': 'simplified'} + _toPy = {'entities': 'entities', 'simplified': 'simplified'} + def __init__(self, entities=None, simplified=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + simplified : bool + ''' + self.entities = [Entity.from_json(o) for o in entities or []] + self.simplified = simplified + + + +class Endpoint(Type): + _toSchema = {'application_name': 'application-name', 'relation': 'relation'} + _toPy = {'application-name': 'application_name', 'relation': 'relation'} + def __init__(self, application_name=None, relation=None, **unknown_fields): + ''' + application_name : str + relation : CharmRelation + ''' + self.application_name = application_name + self.relation = CharmRelation.from_json(relation) if relation else None + + + - class EndpointStatus(Type): - _toSchema = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'} - _toPy = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'} - def __init__(self, application=None, name=None, role=None, subordinate=None, **unknown_fields): ++class EndpointFilterAttributes(Type): ++ _toSchema = {'interface': 'interface', 'name': 'name', 'role': 'role'} ++ _toPy = {'interface': 'interface', 'name': 'name', 'role': 'role'} ++ def __init__(self, interface=None, name=None, role=None, **unknown_fields): + ''' - application : str ++ interface : str + name : str + role : str - subordinate : bool ++ ''' ++ self.interface = interface ++ self.name = name ++ self.role = role ++ ++ ++ ++class EndpointStatus(Type): ++ _toSchema = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'} ++ _toPy = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'} ++ def __init__(self, application=None, name=None, role=None, subordinate=None, **unknown_fields): ++ ''' ++ application : str ++ name : str ++ role : str ++ subordinate : bool + ''' + self.application = application + self.name = name + self.role = role + self.subordinate = subordinate + + + +class Entities(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + ''' + self.entities = [Entity.from_json(o) for o in entities or []] + + + +class EntitiesCharmURL(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL> ++ entities : typing.Sequence[~EntityCharmURL] + ''' + self.entities = [EntityCharmURL.from_json(o) for o in entities or []] + + + +class EntitiesPortRanges(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange> ++ entities : typing.Sequence[~EntityPortRange] + ''' + self.entities = [EntityPortRange.from_json(o) for o in entities or []] + + + +class EntitiesResult(Type): + _toSchema = {'entities': 'entities', 'error': 'error'} + _toPy = {'entities': 'entities', 'error': 'error'} + def __init__(self, entities=None, error=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + error : Error + ''' + self.entities = [Entity.from_json(o) for o in entities or []] + self.error = Error.from_json(error) if error else None + + + +class EntitiesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult> ++ results : typing.Sequence[~EntitiesResult] + ''' + self.results = [EntitiesResult.from_json(o) for o in results or []] + + + +class EntitiesVersion(Type): + _toSchema = {'agent_tools': 'agent-tools'} + _toPy = {'agent-tools': 'agent_tools'} + def __init__(self, agent_tools=None, **unknown_fields): + ''' - agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion> ++ agent_tools : typing.Sequence[~EntityVersion] + ''' + self.agent_tools = [EntityVersion.from_json(o) for o in agent_tools or []] + + + +class EntitiesWatchResult(Type): + _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} + _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} + def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[str] ++ changes : typing.Sequence[str] + error : Error + watcher_id : str + ''' + self.changes = changes + self.error = Error.from_json(error) if error else None + self.watcher_id = watcher_id + + + +class Entity(Type): + _toSchema = {'tag': 'tag'} + _toPy = {'tag': 'tag'} + def __init__(self, tag=None, **unknown_fields): + ''' + tag : str + ''' + self.tag = tag + + + +class EntityAnnotations(Type): + _toSchema = {'annotations': 'annotations', 'entity': 'entity'} + _toPy = {'annotations': 'annotations', 'entity': 'entity'} + def __init__(self, annotations=None, entity=None, **unknown_fields): + ''' - annotations : typing.Mapping<~KT, +VT_co>[str, str] ++ annotations : typing.Mapping[str, str] + entity : str + ''' + self.annotations = annotations + self.entity = entity + + + +class EntityCharmURL(Type): + _toSchema = {'charm_url': 'charm-url', 'tag': 'tag'} + _toPy = {'charm-url': 'charm_url', 'tag': 'tag'} + def __init__(self, charm_url=None, tag=None, **unknown_fields): + ''' + charm_url : str + tag : str + ''' + self.charm_url = charm_url + self.tag = tag + + + ++class EntityMacaroonArg(Type): ++ _toSchema = {'macaroon': 'macaroon', 'tag': 'tag'} ++ _toPy = {'macaroon': 'macaroon', 'tag': 'tag'} ++ def __init__(self, macaroon=None, tag=None, **unknown_fields): ++ ''' ++ macaroon : Macaroon ++ tag : str ++ ''' ++ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None ++ self.tag = tag ++ ++ ++ ++class EntityMacaroonArgs(Type): ++ _toSchema = {'args': 'Args'} ++ _toPy = {'Args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~EntityMacaroonArg] ++ ''' ++ self.args = [EntityMacaroonArg.from_json(o) for o in args or []] ++ ++ ++ +class EntityMetrics(Type): + _toSchema = {'error': 'error', 'metrics': 'metrics'} + _toPy = {'error': 'error', 'metrics': 'metrics'} + def __init__(self, error=None, metrics=None, **unknown_fields): + ''' + error : Error - metrics : typing.Sequence<+T_co>[~MetricResult]<~MetricResult> ++ metrics : typing.Sequence[~MetricResult] + ''' + self.error = Error.from_json(error) if error else None + self.metrics = [MetricResult.from_json(o) for o in metrics or []] + + + +class EntityPassword(Type): + _toSchema = {'password': 'password', 'tag': 'tag'} + _toPy = {'password': 'password', 'tag': 'tag'} + def __init__(self, password=None, tag=None, **unknown_fields): + ''' + password : str + tag : str + ''' + self.password = password + self.tag = tag + + + +class EntityPasswords(Type): + _toSchema = {'changes': 'changes'} + _toPy = {'changes': 'changes'} + def __init__(self, changes=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword> ++ changes : typing.Sequence[~EntityPassword] + ''' + self.changes = [EntityPassword.from_json(o) for o in changes or []] + + + +class EntityPortRange(Type): + _toSchema = {'from_port': 'from-port', 'protocol': 'protocol', 'tag': 'tag', 'to_port': 'to-port'} + _toPy = {'from-port': 'from_port', 'protocol': 'protocol', 'tag': 'tag', 'to-port': 'to_port'} + def __init__(self, from_port=None, protocol=None, tag=None, to_port=None, **unknown_fields): + ''' + from_port : int + protocol : str + tag : str + to_port : int + ''' + self.from_port = from_port + self.protocol = protocol + self.tag = tag + self.to_port = to_port + + + +class EntityStatus(Type): + _toSchema = {'data': 'data', 'info': 'info', 'since': 'since', 'status': 'status'} + _toPy = {'data': 'data', 'info': 'info', 'since': 'since', 'status': 'status'} + def __init__(self, data=None, info=None, since=None, status=None, **unknown_fields): + ''' - data : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ data : typing.Mapping[str, typing.Any] + info : str + since : str + status : str + ''' + self.data = data + self.info = info + self.since = since + self.status = status + + + +class EntityStatusArgs(Type): + _toSchema = {'data': 'data', 'info': 'info', 'status': 'status', 'tag': 'tag'} + _toPy = {'data': 'data', 'info': 'info', 'status': 'status', 'tag': 'tag'} + def __init__(self, data=None, info=None, status=None, tag=None, **unknown_fields): + ''' - data : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ data : typing.Mapping[str, typing.Any] + info : str + status : str + tag : str + ''' + self.data = data + self.info = info + self.status = status + self.tag = tag + + + ++class EntityString(Type): ++ _toSchema = {'tag': 'tag', 'value': 'value'} ++ _toPy = {'tag': 'tag', 'value': 'value'} ++ def __init__(self, tag=None, value=None, **unknown_fields): ++ ''' ++ tag : str ++ value : str ++ ''' ++ self.tag = tag ++ self.value = value ++ ++ ++ +class EntityVersion(Type): + _toSchema = {'tag': 'tag', 'tools': 'tools'} + _toPy = {'tag': 'tag', 'tools': 'tools'} + def __init__(self, tag=None, tools=None, **unknown_fields): + ''' + tag : str + tools : Version + ''' + self.tag = tag + self.tools = Version.from_json(tools) if tools else None + + + +class EntityWorkloadVersion(Type): + _toSchema = {'tag': 'tag', 'workload_version': 'workload-version'} + _toPy = {'tag': 'tag', 'workload-version': 'workload_version'} + def __init__(self, tag=None, workload_version=None, **unknown_fields): + ''' + tag : str + workload_version : str + ''' + self.tag = tag + self.workload_version = workload_version + + + +class EntityWorkloadVersions(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion> ++ entities : typing.Sequence[~EntityWorkloadVersion] + ''' + self.entities = [EntityWorkloadVersion.from_json(o) for o in entities or []] + + + +class EnvListArgs(Type): + _toSchema = {'patterns': 'patterns'} + _toPy = {'patterns': 'patterns'} + def __init__(self, patterns=None, **unknown_fields): + ''' - patterns : typing.Sequence<+T_co>[str] ++ patterns : typing.Sequence[str] + ''' + self.patterns = patterns + + + +class EnvListResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~Payload]<~Payload> ++ results : typing.Sequence[~Payload] + ''' + self.results = [Payload.from_json(o) for o in results or []] + + + +class Error(Type): + _toSchema = {'code': 'code', 'info': 'info', 'message': 'message'} + _toPy = {'code': 'code', 'info': 'info', 'message': 'message'} + def __init__(self, code=None, info=None, message=None, **unknown_fields): + ''' + code : str + info : ErrorInfo + message : str + ''' + self.code = code + self.info = ErrorInfo.from_json(info) if info else None + self.message = message + + + +class ErrorInfo(Type): + _toSchema = {'macaroon': 'macaroon', 'macaroon_path': 'macaroon-path'} + _toPy = {'macaroon': 'macaroon', 'macaroon-path': 'macaroon_path'} + def __init__(self, macaroon=None, macaroon_path=None, **unknown_fields): + ''' + macaroon : Macaroon + macaroon_path : str + ''' + self.macaroon = Macaroon.from_json(macaroon) if macaroon else None + self.macaroon_path = macaroon_path + + + +class ErrorResult(Type): + _toSchema = {'error': 'error'} + _toPy = {'error': 'error'} + def __init__(self, error=None, **unknown_fields): + ''' + error : Error + ''' + self.error = Error.from_json(error) if error else None + + + +class ErrorResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult> ++ results : typing.Sequence[~ErrorResult] + ''' + self.results = [ErrorResult.from_json(o) for o in results or []] + + + ++class ExternalControllerInfo(Type): ++ _toSchema = {'addrs': 'addrs', 'ca_cert': 'ca-cert', 'controller_alias': 'controller-alias', 'controller_tag': 'controller-tag'} ++ _toPy = {'addrs': 'addrs', 'ca-cert': 'ca_cert', 'controller-alias': 'controller_alias', 'controller-tag': 'controller_tag'} ++ def __init__(self, addrs=None, ca_cert=None, controller_alias=None, controller_tag=None, **unknown_fields): ++ ''' ++ addrs : typing.Sequence[str] ++ ca_cert : str ++ controller_alias : str ++ controller_tag : str ++ ''' ++ self.addrs = addrs ++ self.ca_cert = ca_cert ++ self.controller_alias = controller_alias ++ self.controller_tag = controller_tag ++ ++ ++ ++class ExternalControllerInfoResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ExternalControllerInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ExternalControllerInfo.from_json(result) if result else None ++ ++ ++ ++class ExternalControllerInfoResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ExternalControllerInfoResult] ++ ''' ++ self.results = [ExternalControllerInfoResult.from_json(o) for o in results or []] ++ ++ ++ ++class FanConfigEntry(Type): ++ _toSchema = {'overlay': 'overlay', 'underlay': 'underlay'} ++ _toPy = {'overlay': 'overlay', 'underlay': 'underlay'} ++ def __init__(self, overlay=None, underlay=None, **unknown_fields): ++ ''' ++ overlay : str ++ underlay : str ++ ''' ++ self.overlay = overlay ++ self.underlay = underlay ++ ++ ++ ++class FanConfigResult(Type): ++ _toSchema = {'fans': 'fans'} ++ _toPy = {'fans': 'fans'} ++ def __init__(self, fans=None, **unknown_fields): ++ ''' ++ fans : typing.Sequence[~FanConfigEntry] ++ ''' ++ self.fans = [FanConfigEntry.from_json(o) for o in fans or []] ++ ++ ++ +class Filesystem(Type): + _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'volume_tag': 'volume-tag'} + _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'volume-tag': 'volume_tag'} + def __init__(self, filesystem_tag=None, info=None, volume_tag=None, **unknown_fields): + ''' + filesystem_tag : str + info : FilesystemInfo + volume_tag : str + ''' + self.filesystem_tag = filesystem_tag + self.info = FilesystemInfo.from_json(info) if info else None + self.volume_tag = volume_tag + + + +class FilesystemAttachment(Type): + _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'machine_tag': 'machine-tag'} + _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'machine-tag': 'machine_tag'} + def __init__(self, filesystem_tag=None, info=None, machine_tag=None, **unknown_fields): + ''' + filesystem_tag : str + info : FilesystemAttachmentInfo + machine_tag : str + ''' + self.filesystem_tag = filesystem_tag + self.info = FilesystemAttachmentInfo.from_json(info) if info else None + self.machine_tag = machine_tag + + + +class FilesystemAttachmentDetails(Type): + _toSchema = {'filesystemattachmentinfo': 'FilesystemAttachmentInfo', 'life': 'life'} + _toPy = {'FilesystemAttachmentInfo': 'filesystemattachmentinfo', 'life': 'life'} + def __init__(self, filesystemattachmentinfo=None, life=None, **unknown_fields): + ''' + filesystemattachmentinfo : FilesystemAttachmentInfo + life : str + ''' + self.filesystemattachmentinfo = FilesystemAttachmentInfo.from_json(filesystemattachmentinfo) if filesystemattachmentinfo else None + self.life = life + + + +class FilesystemAttachmentInfo(Type): + _toSchema = {'mount_point': 'mount-point', 'read_only': 'read-only'} + _toPy = {'mount-point': 'mount_point', 'read-only': 'read_only'} + def __init__(self, mount_point=None, read_only=None, **unknown_fields): + ''' + mount_point : str + read_only : bool + ''' + self.mount_point = mount_point + self.read_only = read_only + + + +class FilesystemAttachmentParams(Type): + _toSchema = {'filesystem_id': 'filesystem-id', 'filesystem_tag': 'filesystem-tag', 'instance_id': 'instance-id', 'machine_tag': 'machine-tag', 'mount_point': 'mount-point', 'provider': 'provider', 'read_only': 'read-only'} + _toPy = {'filesystem-id': 'filesystem_id', 'filesystem-tag': 'filesystem_tag', 'instance-id': 'instance_id', 'machine-tag': 'machine_tag', 'mount-point': 'mount_point', 'provider': 'provider', 'read-only': 'read_only'} + def __init__(self, filesystem_id=None, filesystem_tag=None, instance_id=None, machine_tag=None, mount_point=None, provider=None, read_only=None, **unknown_fields): + ''' + filesystem_id : str + filesystem_tag : str + instance_id : str + machine_tag : str + mount_point : str + provider : str + read_only : bool + ''' + self.filesystem_id = filesystem_id + self.filesystem_tag = filesystem_tag + self.instance_id = instance_id + self.machine_tag = machine_tag + self.mount_point = mount_point + self.provider = provider + self.read_only = read_only + + + +class FilesystemAttachmentParamsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : FilesystemAttachmentParams + ''' + self.error = Error.from_json(error) if error else None + self.result = FilesystemAttachmentParams.from_json(result) if result else None + + + +class FilesystemAttachmentParamsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult> ++ results : typing.Sequence[~FilesystemAttachmentParamsResult] + ''' + self.results = [FilesystemAttachmentParamsResult.from_json(o) for o in results or []] + + + +class FilesystemAttachmentResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : FilesystemAttachment + ''' + self.error = Error.from_json(error) if error else None + self.result = FilesystemAttachment.from_json(result) if result else None + + + +class FilesystemAttachmentResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult> ++ results : typing.Sequence[~FilesystemAttachmentResult] + ''' + self.results = [FilesystemAttachmentResult.from_json(o) for o in results or []] + + + +class FilesystemAttachments(Type): + _toSchema = {'filesystem_attachments': 'filesystem-attachments'} + _toPy = {'filesystem-attachments': 'filesystem_attachments'} + def __init__(self, filesystem_attachments=None, **unknown_fields): + ''' - filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment> ++ filesystem_attachments : typing.Sequence[~FilesystemAttachment] + ''' + self.filesystem_attachments = [FilesystemAttachment.from_json(o) for o in filesystem_attachments or []] + + + +class FilesystemDetails(Type): + _toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'machine_attachments': 'machine-attachments', 'status': 'status', 'storage': 'storage', 'volume_tag': 'volume-tag'} + _toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'machine-attachments': 'machine_attachments', 'status': 'status', 'storage': 'storage', 'volume-tag': 'volume_tag'} + def __init__(self, filesystem_tag=None, info=None, machine_attachments=None, status=None, storage=None, volume_tag=None, **unknown_fields): + ''' + filesystem_tag : str + info : FilesystemInfo - machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~FilesystemAttachmentInfo]<~FilesystemAttachmentInfo> ++ machine_attachments : typing.Mapping[str, ~FilesystemAttachmentInfo] + status : EntityStatus + storage : StorageDetails + volume_tag : str + ''' + self.filesystem_tag = filesystem_tag + self.info = FilesystemInfo.from_json(info) if info else None + self.machine_attachments = machine_attachments + self.status = EntityStatus.from_json(status) if status else None + self.storage = StorageDetails.from_json(storage) if storage else None + self.volume_tag = volume_tag + + + +class FilesystemDetailsListResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Sequence<+T_co>[~FilesystemDetails]<~FilesystemDetails> ++ result : typing.Sequence[~FilesystemDetails] + ''' + self.error = Error.from_json(error) if error else None + self.result = [FilesystemDetails.from_json(o) for o in result or []] + + + +class FilesystemDetailsListResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult> ++ results : typing.Sequence[~FilesystemDetailsListResult] + ''' + self.results = [FilesystemDetailsListResult.from_json(o) for o in results or []] + + + +class FilesystemFilter(Type): + _toSchema = {'machines': 'machines'} + _toPy = {'machines': 'machines'} + def __init__(self, machines=None, **unknown_fields): + ''' - machines : typing.Sequence<+T_co>[str] ++ machines : typing.Sequence[str] + ''' + self.machines = machines + + + +class FilesystemFilters(Type): + _toSchema = {'filters': 'filters'} + _toPy = {'filters': 'filters'} + def __init__(self, filters=None, **unknown_fields): + ''' - filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter> ++ filters : typing.Sequence[~FilesystemFilter] + ''' + self.filters = [FilesystemFilter.from_json(o) for o in filters or []] + + + +class FilesystemInfo(Type): + _toSchema = {'filesystem_id': 'filesystem-id', 'size': 'size'} + _toPy = {'filesystem-id': 'filesystem_id', 'size': 'size'} + def __init__(self, filesystem_id=None, size=None, **unknown_fields): + ''' + filesystem_id : str + size : int + ''' + self.filesystem_id = filesystem_id + self.size = size + + + +class FilesystemParams(Type): + _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'filesystem_tag': 'filesystem-tag', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume_tag': 'volume-tag'} + _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'filesystem-tag': 'filesystem_tag', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume-tag': 'volume_tag'} + def __init__(self, attachment=None, attributes=None, filesystem_tag=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields): + ''' + attachment : FilesystemAttachmentParams - attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ attributes : typing.Mapping[str, typing.Any] + filesystem_tag : str + provider : str + size : int - tags : typing.Mapping<~KT, +VT_co>[str, str] ++ tags : typing.Mapping[str, str] + volume_tag : str + ''' + self.attachment = FilesystemAttachmentParams.from_json(attachment) if attachment else None + self.attributes = attributes + self.filesystem_tag = filesystem_tag + self.provider = provider + self.size = size + self.tags = tags + self.volume_tag = volume_tag + + + +class FilesystemParamsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : FilesystemParams + ''' + self.error = Error.from_json(error) if error else None + self.result = FilesystemParams.from_json(result) if result else None + + + +class FilesystemParamsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult> ++ results : typing.Sequence[~FilesystemParamsResult] + ''' + self.results = [FilesystemParamsResult.from_json(o) for o in results or []] + + + +class FilesystemResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : Filesystem + ''' + self.error = Error.from_json(error) if error else None + self.result = Filesystem.from_json(result) if result else None + + + +class FilesystemResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult> ++ results : typing.Sequence[~FilesystemResult] + ''' + self.results = [FilesystemResult.from_json(o) for o in results or []] + + + +class Filesystems(Type): + _toSchema = {'filesystems': 'filesystems'} + _toPy = {'filesystems': 'filesystems'} + def __init__(self, filesystems=None, **unknown_fields): + ''' - filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem> ++ filesystems : typing.Sequence[~Filesystem] + ''' + self.filesystems = [Filesystem.from_json(o) for o in filesystems or []] + + + +class FindActionsByNames(Type): + _toSchema = {'names': 'names'} + _toPy = {'names': 'names'} + def __init__(self, names=None, **unknown_fields): + ''' - names : typing.Sequence<+T_co>[str] ++ names : typing.Sequence[str] + ''' + self.names = names + + + +class FindTags(Type): + _toSchema = {'prefixes': 'prefixes'} + _toPy = {'prefixes': 'prefixes'} + def __init__(self, prefixes=None, **unknown_fields): + ''' - prefixes : typing.Sequence<+T_co>[str] ++ prefixes : typing.Sequence[str] + ''' + self.prefixes = prefixes + + + +class FindTagsResults(Type): + _toSchema = {'matches': 'matches'} + _toPy = {'matches': 'matches'} + def __init__(self, matches=None, **unknown_fields): + ''' - matches : typing.Sequence<+T_co>[~Entity]<~Entity> ++ matches : typing.Sequence[~Entity] + ''' + self.matches = [Entity.from_json(o) for o in matches or []] + + + +class FindToolsParams(Type): + _toSchema = {'arch': 'arch', 'major': 'major', 'minor': 'minor', 'number': 'number', 'series': 'series'} + _toPy = {'arch': 'arch', 'major': 'major', 'minor': 'minor', 'number': 'number', 'series': 'series'} + def __init__(self, arch=None, major=None, minor=None, number=None, series=None, **unknown_fields): + ''' + arch : str + major : int + minor : int + number : Number + series : str + ''' + self.arch = arch + self.major = major + self.minor = minor + self.number = Number.from_json(number) if number else None + self.series = series + + + +class FindToolsResult(Type): + _toSchema = {'error': 'error', 'list_': 'list'} + _toPy = {'error': 'error', 'list': 'list_'} + def __init__(self, error=None, list_=None, **unknown_fields): + ''' + error : Error - list_ : typing.Sequence<+T_co>[~Tools]<~Tools> ++ list_ : typing.Sequence[~Tools] + ''' + self.error = Error.from_json(error) if error else None + self.list_ = [Tools.from_json(o) for o in list_ or []] + + + ++class FirewallRule(Type): ++ _toSchema = {'known_service': 'known-service', 'whitelist_cidrs': 'whitelist-cidrs'} ++ _toPy = {'known-service': 'known_service', 'whitelist-cidrs': 'whitelist_cidrs'} ++ def __init__(self, known_service=None, whitelist_cidrs=None, **unknown_fields): ++ ''' ++ known_service : str ++ whitelist_cidrs : typing.Sequence[str] ++ ''' ++ self.known_service = known_service ++ self.whitelist_cidrs = whitelist_cidrs ++ ++ ++ ++class FirewallRuleArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~FirewallRule] ++ ''' ++ self.args = [FirewallRule.from_json(o) for o in args or []] ++ ++ ++ +class FullStatus(Type): - _toSchema = {'applications': 'applications', 'machines': 'machines', 'model': 'model', 'relations': 'relations', 'remote_applications': 'remote-applications'} - _toPy = {'applications': 'applications', 'machines': 'machines', 'model': 'model', 'relations': 'relations', 'remote-applications': 'remote_applications'} - def __init__(self, applications=None, machines=None, model=None, relations=None, remote_applications=None, **unknown_fields): ++ _toSchema = {'applications': 'applications', 'controller_timestamp': 'controller-timestamp', 'machines': 'machines', 'model': 'model', 'offers': 'offers', 'relations': 'relations', 'remote_applications': 'remote-applications'} ++ _toPy = {'applications': 'applications', 'controller-timestamp': 'controller_timestamp', 'machines': 'machines', 'model': 'model', 'offers': 'offers', 'relations': 'relations', 'remote-applications': 'remote_applications'} ++ def __init__(self, applications=None, controller_timestamp=None, machines=None, model=None, offers=None, relations=None, remote_applications=None, **unknown_fields): + ''' - applications : typing.Mapping<~KT, +VT_co>[str, ~ApplicationStatus]<~ApplicationStatus> - machines : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus> ++ applications : typing.Mapping[str, ~ApplicationStatus] ++ controller_timestamp : str ++ machines : typing.Mapping[str, ~MachineStatus] + model : ModelStatusInfo - relations : typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus> - remote_applications : typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~RemoteApplicationStatus> ++ offers : typing.Mapping[str, ~ApplicationOfferStatus] ++ relations : typing.Sequence[~RelationStatus] ++ remote_applications : typing.Mapping[str, ~RemoteApplicationStatus] + ''' + self.applications = applications ++ self.controller_timestamp = controller_timestamp + self.machines = machines + self.model = ModelStatusInfo.from_json(model) if model else None ++ self.offers = offers + self.relations = [RelationStatus.from_json(o) for o in relations or []] + self.remote_applications = remote_applications + + + +class GetApplicationConstraints(Type): + _toSchema = {'application': 'application'} + _toPy = {'application': 'application'} + def __init__(self, application=None, **unknown_fields): + ''' + application : str + ''' + self.application = application + + + +class GetConstraintsResults(Type): + _toSchema = {'constraints': 'constraints'} + _toPy = {'constraints': 'constraints'} + def __init__(self, constraints=None, **unknown_fields): + ''' + constraints : Value + ''' + self.constraints = Value.from_json(constraints) if constraints else None + + + +class GetLeadershipSettingsBulkResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult> ++ results : typing.Sequence[~GetLeadershipSettingsResult] + ''' + self.results = [GetLeadershipSettingsResult.from_json(o) for o in results or []] + + + +class GetLeadershipSettingsResult(Type): + _toSchema = {'error': 'error', 'settings': 'settings'} + _toPy = {'error': 'error', 'settings': 'settings'} + def __init__(self, error=None, settings=None, **unknown_fields): + ''' + error : Error - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + ''' + self.error = Error.from_json(error) if error else None + self.settings = settings + + + ++class GetTokenArg(Type): ++ _toSchema = {'tag': 'tag'} ++ _toPy = {'tag': 'tag'} ++ def __init__(self, tag=None, **unknown_fields): ++ ''' ++ tag : str ++ ''' ++ self.tag = tag ++ ++ ++ ++class GetTokenArgs(Type): ++ _toSchema = {'args': 'Args'} ++ _toPy = {'Args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~GetTokenArg] ++ ''' ++ self.args = [GetTokenArg.from_json(o) for o in args or []] ++ ++ ++ ++class GoalState(Type): ++ _toSchema = {'relations': 'relations', 'units': 'units'} ++ _toPy = {'relations': 'relations', 'units': 'units'} ++ def __init__(self, relations=None, units=None, **unknown_fields): ++ ''' ++ relations : typing.Mapping[str, typing.Any] ++ units : typing.Mapping[str, ~GoalStateStatus] ++ ''' ++ self.relations = relations ++ self.units = units ++ ++ ++ ++class GoalStateResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : GoalState ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = GoalState.from_json(result) if result else None ++ ++ ++ ++class GoalStateResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~GoalStateResult] ++ ''' ++ self.results = [GoalStateResult.from_json(o) for o in results or []] ++ ++ ++ ++class GoalStateStatus(Type): ++ _toSchema = {'since': 'since', 'status': 'status'} ++ _toPy = {'since': 'since', 'status': 'status'} ++ def __init__(self, since=None, status=None, **unknown_fields): ++ ''' ++ since : str ++ status : str ++ ''' ++ self.since = since ++ self.status = status ++ ++ ++ +class HAMember(Type): + _toSchema = {'public_address': 'public-address', 'series': 'series', 'tag': 'tag'} + _toPy = {'public-address': 'public_address', 'series': 'series', 'tag': 'tag'} + def __init__(self, public_address=None, series=None, tag=None, **unknown_fields): + ''' + public_address : Address + series : str + tag : str + ''' + self.public_address = Address.from_json(public_address) if public_address else None + self.series = series + self.tag = tag + + + +class HardwareCharacteristics(Type): + _toSchema = {'arch': 'arch', 'availability_zone': 'availability-zone', 'cpu_cores': 'cpu-cores', 'cpu_power': 'cpu-power', 'mem': 'mem', 'root_disk': 'root-disk', 'tags': 'tags'} + _toPy = {'arch': 'arch', 'availability-zone': 'availability_zone', 'cpu-cores': 'cpu_cores', 'cpu-power': 'cpu_power', 'mem': 'mem', 'root-disk': 'root_disk', 'tags': 'tags'} + def __init__(self, arch=None, availability_zone=None, cpu_cores=None, cpu_power=None, mem=None, root_disk=None, tags=None, **unknown_fields): + ''' + arch : str + availability_zone : str + cpu_cores : int + cpu_power : int + mem : int + root_disk : int - tags : typing.Sequence<+T_co>[str] ++ tags : typing.Sequence[str] + ''' + self.arch = arch + self.availability_zone = availability_zone + self.cpu_cores = cpu_cores + self.cpu_power = cpu_power + self.mem = mem + self.root_disk = root_disk + self.tags = tags + + + +class History(Type): + _toSchema = {'error': 'error', 'statuses': 'statuses'} + _toPy = {'error': 'error', 'statuses': 'statuses'} + def __init__(self, error=None, statuses=None, **unknown_fields): + ''' + error : Error - statuses : typing.Sequence<+T_co>[~DetailedStatus]<~DetailedStatus> ++ statuses : typing.Sequence[~DetailedStatus] + ''' + self.error = Error.from_json(error) if error else None + self.statuses = [DetailedStatus.from_json(o) for o in statuses or []] + + + +class HostNetworkChange(Type): + _toSchema = {'error': 'error', 'new_bridges': 'new-bridges', 'reconfigure_delay': 'reconfigure-delay'} + _toPy = {'error': 'error', 'new-bridges': 'new_bridges', 'reconfigure-delay': 'reconfigure_delay'} + def __init__(self, error=None, new_bridges=None, reconfigure_delay=None, **unknown_fields): + ''' + error : Error - new_bridges : typing.Sequence<+T_co>[~DeviceBridgeInfo]<~DeviceBridgeInfo> ++ new_bridges : typing.Sequence[~DeviceBridgeInfo] + reconfigure_delay : int + ''' + self.error = Error.from_json(error) if error else None + self.new_bridges = [DeviceBridgeInfo.from_json(o) for o in new_bridges or []] + self.reconfigure_delay = reconfigure_delay + + + +class HostNetworkChangeResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange> ++ results : typing.Sequence[~HostNetworkChange] + ''' + self.results = [HostNetworkChange.from_json(o) for o in results or []] + + + +class HostPort(Type): + _toSchema = {'address': 'Address', 'port': 'port'} + _toPy = {'Address': 'address', 'port': 'port'} + def __init__(self, address=None, port=None, **unknown_fields): + ''' + address : Address + port : int + ''' + self.address = Address.from_json(address) if address else None + self.port = port + + + +class HostedModelConfig(Type): + _toSchema = {'cloud_spec': 'cloud-spec', 'config': 'config', 'error': 'error', 'name': 'name', 'owner': 'owner'} + _toPy = {'cloud-spec': 'cloud_spec', 'config': 'config', 'error': 'error', 'name': 'name', 'owner': 'owner'} + def __init__(self, cloud_spec=None, config=None, error=None, name=None, owner=None, **unknown_fields): + ''' + cloud_spec : CloudSpec - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + error : Error + name : str + owner : str + ''' + self.cloud_spec = CloudSpec.from_json(cloud_spec) if cloud_spec else None + self.config = config + self.error = Error.from_json(error) if error else None + self.name = name + self.owner = owner + + + +class HostedModelConfigsResults(Type): + _toSchema = {'models': 'models'} + _toPy = {'models': 'models'} + def __init__(self, models=None, **unknown_fields): + ''' - models : typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig> ++ models : typing.Sequence[~HostedModelConfig] + ''' + self.models = [HostedModelConfig.from_json(o) for o in models or []] + + + +class ImageFilterParams(Type): + _toSchema = {'images': 'images'} + _toPy = {'images': 'images'} + def __init__(self, images=None, **unknown_fields): + ''' - images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec> ++ images : typing.Sequence[~ImageSpec] + ''' + self.images = [ImageSpec.from_json(o) for o in images or []] + + + +class ImageMetadata(Type): + _toSchema = {'arch': 'arch', 'created': 'created', 'kind': 'kind', 'series': 'series', 'url': 'url'} + _toPy = {'arch': 'arch', 'created': 'created', 'kind': 'kind', 'series': 'series', 'url': 'url'} + def __init__(self, arch=None, created=None, kind=None, series=None, url=None, **unknown_fields): + ''' + arch : str + created : str + kind : str + series : str + url : str + ''' + self.arch = arch + self.created = created + self.kind = kind + self.series = series + self.url = url + + + +class ImageMetadataFilter(Type): + _toSchema = {'arches': 'arches', 'region': 'region', 'root_storage_type': 'root-storage-type', 'series': 'series', 'stream': 'stream', 'virt_type': 'virt-type'} + _toPy = {'arches': 'arches', 'region': 'region', 'root-storage-type': 'root_storage_type', 'series': 'series', 'stream': 'stream', 'virt-type': 'virt_type'} + def __init__(self, arches=None, region=None, root_storage_type=None, series=None, stream=None, virt_type=None, **unknown_fields): + ''' - arches : typing.Sequence<+T_co>[str] ++ arches : typing.Sequence[str] + region : str + root_storage_type : str - series : typing.Sequence<+T_co>[str] ++ series : typing.Sequence[str] + stream : str + virt_type : str + ''' + self.arches = arches + self.region = region + self.root_storage_type = root_storage_type + self.series = series + self.stream = stream + self.virt_type = virt_type + + + +class ImageSpec(Type): + _toSchema = {'arch': 'arch', 'kind': 'kind', 'series': 'series'} + _toPy = {'arch': 'arch', 'kind': 'kind', 'series': 'series'} + def __init__(self, arch=None, kind=None, series=None, **unknown_fields): + ''' + arch : str + kind : str + series : str + ''' + self.arch = arch + self.kind = kind + self.series = series + + + ++class ImportStorageDetails(Type): ++ _toSchema = {'storage_tag': 'storage-tag'} ++ _toPy = {'storage-tag': 'storage_tag'} ++ def __init__(self, storage_tag=None, **unknown_fields): ++ ''' ++ storage_tag : str ++ ''' ++ self.storage_tag = storage_tag ++ ++ ++ ++class ImportStorageParams(Type): ++ _toSchema = {'kind': 'kind', 'pool': 'pool', 'provider_id': 'provider-id', 'storage_name': 'storage-name'} ++ _toPy = {'kind': 'kind', 'pool': 'pool', 'provider-id': 'provider_id', 'storage-name': 'storage_name'} ++ def __init__(self, kind=None, pool=None, provider_id=None, storage_name=None, **unknown_fields): ++ ''' ++ kind : int ++ pool : str ++ provider_id : str ++ storage_name : str ++ ''' ++ self.kind = kind ++ self.pool = pool ++ self.provider_id = provider_id ++ self.storage_name = storage_name ++ ++ ++ ++class ImportStorageResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ImportStorageDetails ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ImportStorageDetails.from_json(result) if result else None ++ ++ ++ ++class ImportStorageResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ImportStorageResult] ++ ''' ++ self.results = [ImportStorageResult.from_json(o) for o in results or []] ++ ++ ++ ++class IngressNetworksChangeEvent(Type): ++ _toSchema = {'application_token': 'application-token', 'ingress_required': 'ingress-required', 'macaroons': 'macaroons', 'networks': 'networks', 'relation_token': 'relation-token'} ++ _toPy = {'application-token': 'application_token', 'ingress-required': 'ingress_required', 'macaroons': 'macaroons', 'networks': 'networks', 'relation-token': 'relation_token'} ++ def __init__(self, application_token=None, ingress_required=None, macaroons=None, networks=None, relation_token=None, **unknown_fields): ++ ''' ++ application_token : str ++ ingress_required : bool ++ macaroons : typing.Sequence[~Macaroon] ++ networks : typing.Sequence[str] ++ relation_token : str ++ ''' ++ self.application_token = application_token ++ self.ingress_required = ingress_required ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.networks = networks ++ self.relation_token = relation_token ++ ++ ++ ++class IngressNetworksChanges(Type): ++ _toSchema = {'changes': 'changes'} ++ _toPy = {'changes': 'changes'} ++ def __init__(self, changes=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~IngressNetworksChangeEvent] ++ ''' ++ self.changes = [IngressNetworksChangeEvent.from_json(o) for o in changes or []] ++ ++ ++ +class InitiateMigrationArgs(Type): + _toSchema = {'specs': 'specs'} + _toPy = {'specs': 'specs'} + def __init__(self, specs=None, **unknown_fields): + ''' - specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec> ++ specs : typing.Sequence[~MigrationSpec] + ''' + self.specs = [MigrationSpec.from_json(o) for o in specs or []] + + + +class InitiateMigrationResult(Type): + _toSchema = {'error': 'error', 'migration_id': 'migration-id', 'model_tag': 'model-tag'} + _toPy = {'error': 'error', 'migration-id': 'migration_id', 'model-tag': 'model_tag'} + def __init__(self, error=None, migration_id=None, model_tag=None, **unknown_fields): + ''' + error : Error + migration_id : str + model_tag : str + ''' + self.error = Error.from_json(error) if error else None + self.migration_id = migration_id + self.model_tag = model_tag + + + +class InitiateMigrationResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult> ++ results : typing.Sequence[~InitiateMigrationResult] + ''' + self.results = [InitiateMigrationResult.from_json(o) for o in results or []] + + + +class InstanceInfo(Type): + _toSchema = {'characteristics': 'characteristics', 'instance_id': 'instance-id', 'network_config': 'network-config', 'nonce': 'nonce', 'tag': 'tag', 'volume_attachments': 'volume-attachments', 'volumes': 'volumes'} + _toPy = {'characteristics': 'characteristics', 'instance-id': 'instance_id', 'network-config': 'network_config', 'nonce': 'nonce', 'tag': 'tag', 'volume-attachments': 'volume_attachments', 'volumes': 'volumes'} + def __init__(self, characteristics=None, instance_id=None, network_config=None, nonce=None, tag=None, volume_attachments=None, volumes=None, **unknown_fields): + ''' + characteristics : HardwareCharacteristics + instance_id : str - network_config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ network_config : typing.Sequence[~NetworkConfig] + nonce : str + tag : str - volume_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo> - volumes : typing.Sequence<+T_co>[~Volume]<~Volume> ++ volume_attachments : typing.Mapping[str, ~VolumeAttachmentInfo] ++ volumes : typing.Sequence[~Volume] + ''' + self.characteristics = HardwareCharacteristics.from_json(characteristics) if characteristics else None + self.instance_id = instance_id + self.network_config = [NetworkConfig.from_json(o) for o in network_config or []] + self.nonce = nonce + self.tag = tag + self.volume_attachments = volume_attachments + self.volumes = [Volume.from_json(o) for o in volumes or []] + + + +class InstanceType(Type): + _toSchema = {'arches': 'arches', 'cost': 'cost', 'cpu_cores': 'cpu-cores', 'deprecated': 'deprecated', 'memory': 'memory', 'name': 'name', 'root_disk': 'root-disk', 'virt_type': 'virt-type'} + _toPy = {'arches': 'arches', 'cost': 'cost', 'cpu-cores': 'cpu_cores', 'deprecated': 'deprecated', 'memory': 'memory', 'name': 'name', 'root-disk': 'root_disk', 'virt-type': 'virt_type'} + def __init__(self, arches=None, cost=None, cpu_cores=None, deprecated=None, memory=None, name=None, root_disk=None, virt_type=None, **unknown_fields): + ''' - arches : typing.Sequence<+T_co>[str] ++ arches : typing.Sequence[str] + cost : int + cpu_cores : int + deprecated : bool + memory : int + name : str + root_disk : int + virt_type : str + ''' + self.arches = arches + self.cost = cost + self.cpu_cores = cpu_cores + self.deprecated = deprecated + self.memory = memory + self.name = name + self.root_disk = root_disk + self.virt_type = virt_type + + + +class InstanceTypesResult(Type): + _toSchema = {'cost_currency': 'cost-currency', 'cost_divisor': 'cost-divisor', 'cost_unit': 'cost-unit', 'error': 'error', 'instance_types': 'instance-types'} + _toPy = {'cost-currency': 'cost_currency', 'cost-divisor': 'cost_divisor', 'cost-unit': 'cost_unit', 'error': 'error', 'instance-types': 'instance_types'} + def __init__(self, cost_currency=None, cost_divisor=None, cost_unit=None, error=None, instance_types=None, **unknown_fields): + ''' + cost_currency : str + cost_divisor : int + cost_unit : str + error : Error - instance_types : typing.Sequence<+T_co>[~InstanceType]<~InstanceType> ++ instance_types : typing.Sequence[~InstanceType] + ''' + self.cost_currency = cost_currency + self.cost_divisor = cost_divisor + self.cost_unit = cost_unit + self.error = Error.from_json(error) if error else None + self.instance_types = [InstanceType.from_json(o) for o in instance_types or []] + + + +class InstanceTypesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult> ++ results : typing.Sequence[~InstanceTypesResult] + ''' + self.results = [InstanceTypesResult.from_json(o) for o in results or []] + + + +class InstancesInfo(Type): + _toSchema = {'machines': 'machines'} + _toPy = {'machines': 'machines'} + def __init__(self, machines=None, **unknown_fields): + ''' - machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo> ++ machines : typing.Sequence[~InstanceInfo] + ''' + self.machines = [InstanceInfo.from_json(o) for o in machines or []] + + + +class IntResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : int + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class IntResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~IntResult]<~IntResult> ++ results : typing.Sequence[~IntResult] + ''' + self.results = [IntResult.from_json(o) for o in results or []] + + + +class InterfaceAddress(Type): + _toSchema = {'cidr': 'cidr', 'value': 'value'} + _toPy = {'cidr': 'cidr', 'value': 'value'} + def __init__(self, cidr=None, value=None, **unknown_fields): + ''' + cidr : str + value : str + ''' + self.cidr = cidr + self.value = value + + + ++class InvalidateCredentialArg(Type): ++ _toSchema = {'reason': 'reason'} ++ _toPy = {'reason': 'reason'} ++ def __init__(self, reason=None, **unknown_fields): ++ ''' ++ reason : str ++ ''' ++ self.reason = reason ++ ++ ++ +class IsMasterResult(Type): + _toSchema = {'master': 'master'} + _toPy = {'master': 'master'} + def __init__(self, master=None, **unknown_fields): + ''' + master : bool + ''' + self.master = master + + + +class IsMeteredResult(Type): + _toSchema = {'metered': 'metered'} + _toPy = {'metered': 'metered'} + def __init__(self, metered=None, **unknown_fields): + ''' + metered : bool + ''' + self.metered = metered + + + +class JobsResult(Type): + _toSchema = {'error': 'error', 'jobs': 'jobs'} + _toPy = {'error': 'error', 'jobs': 'jobs'} + def __init__(self, error=None, jobs=None, **unknown_fields): + ''' + error : Error - jobs : typing.Sequence<+T_co>[str] ++ jobs : typing.Sequence[str] + ''' + self.error = Error.from_json(error) if error else None + self.jobs = jobs + + + +class JobsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~JobsResult]<~JobsResult> ++ results : typing.Sequence[~JobsResult] + ''' + self.results = [JobsResult.from_json(o) for o in results or []] + + + - class LifeResult(Type): - _toSchema = {'error': 'error', 'life': 'life'} - _toPy = {'error': 'error', 'life': 'life'} - def __init__(self, error=None, life=None, **unknown_fields): ++class KnownServiceArgs(Type): ++ _toSchema = {'known_services': 'known-services'} ++ _toPy = {'known-services': 'known_services'} ++ def __init__(self, known_services=None, **unknown_fields): + ''' - error : Error - life : str ++ known_services : typing.Sequence[str] + ''' - self.error = Error.from_json(error) if error else None - self.life = life ++ self.known_services = known_services + + + - class LifeResults(Type): - _toSchema = {'results': 'results'} - _toPy = {'results': 'results'} - def __init__(self, results=None, **unknown_fields): ++class KubernetesDeviceParams(Type): ++ _toSchema = {'attributes': 'Attributes', 'count': 'Count', 'type_': 'Type'} ++ _toPy = {'Attributes': 'attributes', 'Count': 'count', 'Type': 'type_'} ++ def __init__(self, attributes=None, count=None, type_=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~LifeResult]<~LifeResult> ++ attributes : typing.Mapping[str, str] ++ count : int ++ type_ : str + ''' - self.results = [LifeResult.from_json(o) for o in results or []] ++ self.attributes = attributes ++ self.count = count ++ self.type_ = type_ + + + - class ListCloudImageMetadataResult(Type): - _toSchema = {'result': 'result'} - _toPy = {'result': 'result'} - def __init__(self, result=None, **unknown_fields): ++class KubernetesFilesystemAttachmentParams(Type): ++ _toSchema = {'mount_point': 'mount-point', 'provider': 'provider', 'read_only': 'read-only'} ++ _toPy = {'mount-point': 'mount_point', 'provider': 'provider', 'read-only': 'read_only'} ++ def __init__(self, mount_point=None, provider=None, read_only=None, **unknown_fields): + ''' - result : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata> ++ mount_point : str ++ provider : str ++ read_only : bool + ''' - self.result = [CloudImageMetadata.from_json(o) for o in result or []] ++ self.mount_point = mount_point ++ self.provider = provider ++ self.read_only = read_only + + + - class ListImageResult(Type): - _toSchema = {'result': 'result'} - _toPy = {'result': 'result'} - def __init__(self, result=None, **unknown_fields): ++class KubernetesFilesystemInfo(Type): ++ _toSchema = {'data': 'data', 'filesystem_id': 'filesystem-id', 'info': 'info', 'mount_point': 'mount-point', 'pool': 'pool', 'read_only': 'read-only', 'size': 'size', 'status': 'status', 'storagename': 'storagename', 'volume': 'volume'} ++ _toPy = {'data': 'data', 'filesystem-id': 'filesystem_id', 'info': 'info', 'mount-point': 'mount_point', 'pool': 'pool', 'read-only': 'read_only', 'size': 'size', 'status': 'status', 'storagename': 'storagename', 'volume': 'volume'} ++ def __init__(self, data=None, filesystem_id=None, info=None, mount_point=None, pool=None, read_only=None, size=None, status=None, storagename=None, volume=None, **unknown_fields): + ''' - result : typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata> ++ data : typing.Mapping[str, typing.Any] ++ filesystem_id : str ++ info : str ++ mount_point : str ++ pool : str ++ read_only : bool ++ size : int ++ status : str ++ storagename : str ++ volume : KubernetesVolumeInfo + ''' - self.result = [ImageMetadata.from_json(o) for o in result or []] ++ self.data = data ++ self.filesystem_id = filesystem_id ++ self.info = info ++ self.mount_point = mount_point ++ self.pool = pool ++ self.read_only = read_only ++ self.size = size ++ self.status = status ++ self.storagename = storagename ++ self.volume = KubernetesVolumeInfo.from_json(volume) if volume else None + + + - class ListResourcesArgs(Type): - _toSchema = {'entities': 'entities'} - _toPy = {'entities': 'entities'} - def __init__(self, entities=None, **unknown_fields): ++class KubernetesFilesystemParams(Type): ++ _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'} ++ _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'} ++ def __init__(self, attachment=None, attributes=None, provider=None, size=None, storagename=None, tags=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ attachment : KubernetesFilesystemAttachmentParams ++ attributes : typing.Mapping[str, typing.Any] ++ provider : str ++ size : int ++ storagename : str ++ tags : typing.Mapping[str, str] + ''' - self.entities = [Entity.from_json(o) for o in entities or []] ++ self.attachment = KubernetesFilesystemAttachmentParams.from_json(attachment) if attachment else None ++ self.attributes = attributes ++ self.provider = provider ++ self.size = size ++ self.storagename = storagename ++ self.tags = tags + + + - class ListSSHKeys(Type): ++class KubernetesProvisioningInfo(Type): ++ _toSchema = {'constraints': 'constraints', 'devices': 'devices', 'filesystems': 'filesystems', 'placement': 'placement', 'pod_spec': 'pod-spec', 'tags': 'tags', 'volumes': 'volumes'} ++ _toPy = {'constraints': 'constraints', 'devices': 'devices', 'filesystems': 'filesystems', 'placement': 'placement', 'pod-spec': 'pod_spec', 'tags': 'tags', 'volumes': 'volumes'} ++ def __init__(self, constraints=None, devices=None, filesystems=None, placement=None, pod_spec=None, tags=None, volumes=None, **unknown_fields): ++ ''' ++ constraints : Value ++ devices : typing.Sequence[~KubernetesDeviceParams] ++ filesystems : typing.Sequence[~KubernetesFilesystemParams] ++ placement : str ++ pod_spec : str ++ tags : typing.Mapping[str, str] ++ volumes : typing.Sequence[~KubernetesVolumeParams] ++ ''' ++ self.constraints = Value.from_json(constraints) if constraints else None ++ self.devices = [KubernetesDeviceParams.from_json(o) for o in devices or []] ++ self.filesystems = [KubernetesFilesystemParams.from_json(o) for o in filesystems or []] ++ self.placement = placement ++ self.pod_spec = pod_spec ++ self.tags = tags ++ self.volumes = [KubernetesVolumeParams.from_json(o) for o in volumes or []] ++ ++ ++ ++class KubernetesProvisioningInfoResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : KubernetesProvisioningInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = KubernetesProvisioningInfo.from_json(result) if result else None ++ ++ ++ ++class KubernetesProvisioningInfoResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~KubernetesProvisioningInfoResult] ++ ''' ++ self.results = [KubernetesProvisioningInfoResult.from_json(o) for o in results or []] ++ ++ ++ ++class KubernetesVolumeAttachmentParams(Type): ++ _toSchema = {'provider': 'provider', 'read_only': 'read-only'} ++ _toPy = {'provider': 'provider', 'read-only': 'read_only'} ++ def __init__(self, provider=None, read_only=None, **unknown_fields): ++ ''' ++ provider : str ++ read_only : bool ++ ''' ++ self.provider = provider ++ self.read_only = read_only ++ ++ ++ ++class KubernetesVolumeInfo(Type): ++ _toSchema = {'data': 'data', 'info': 'info', 'persistent': 'persistent', 'pool': 'pool', 'size': 'size', 'status': 'status', 'volume_id': 'volume-id'} ++ _toPy = {'data': 'data', 'info': 'info', 'persistent': 'persistent', 'pool': 'pool', 'size': 'size', 'status': 'status', 'volume-id': 'volume_id'} ++ def __init__(self, data=None, info=None, persistent=None, pool=None, size=None, status=None, volume_id=None, **unknown_fields): ++ ''' ++ data : typing.Mapping[str, typing.Any] ++ info : str ++ persistent : bool ++ pool : str ++ size : int ++ status : str ++ volume_id : str ++ ''' ++ self.data = data ++ self.info = info ++ self.persistent = persistent ++ self.pool = pool ++ self.size = size ++ self.status = status ++ self.volume_id = volume_id ++ ++ ++ ++class KubernetesVolumeParams(Type): ++ _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'} ++ _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'} ++ def __init__(self, attachment=None, attributes=None, provider=None, size=None, storagename=None, tags=None, **unknown_fields): ++ ''' ++ attachment : KubernetesVolumeAttachmentParams ++ attributes : typing.Mapping[str, typing.Any] ++ provider : str ++ size : int ++ storagename : str ++ tags : typing.Mapping[str, str] ++ ''' ++ self.attachment = KubernetesVolumeAttachmentParams.from_json(attachment) if attachment else None ++ self.attributes = attributes ++ self.provider = provider ++ self.size = size ++ self.storagename = storagename ++ self.tags = tags ++ ++ ++ ++class LXDProfile(Type): ++ _toSchema = {'config': 'config', 'description': 'description', 'devices': 'devices'} ++ _toPy = {'config': 'config', 'description': 'description', 'devices': 'devices'} ++ def __init__(self, config=None, description=None, devices=None, **unknown_fields): ++ ''' ++ config : typing.Mapping[str, str] ++ description : str ++ devices : typing.Mapping[str, typing.Any] ++ ''' ++ self.config = config ++ self.description = description ++ self.devices = devices ++ ++ ++ ++class LXDProfileUpgradeMessages(Type): ++ _toSchema = {'application': 'application', 'watcher_id': 'watcher-id'} ++ _toPy = {'application': 'application', 'watcher-id': 'watcher_id'} ++ def __init__(self, application=None, watcher_id=None, **unknown_fields): ++ ''' ++ application : Entity ++ watcher_id : str ++ ''' ++ self.application = Entity.from_json(application) if application else None ++ self.watcher_id = watcher_id ++ ++ ++ ++class LXDProfileUpgradeMessagesResult(Type): ++ _toSchema = {'error': 'error', 'message': 'message', 'unit_name': 'unit-name'} ++ _toPy = {'error': 'error', 'message': 'message', 'unit-name': 'unit_name'} ++ def __init__(self, error=None, message=None, unit_name=None, **unknown_fields): ++ ''' ++ error : Error ++ message : str ++ unit_name : str ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.message = message ++ self.unit_name = unit_name ++ ++ ++ ++class LXDProfileUpgradeMessagesResults(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~LXDProfileUpgradeMessagesResult] ++ ''' ++ self.args = [LXDProfileUpgradeMessagesResult.from_json(o) for o in args or []] ++ ++ ++ ++class LifeResult(Type): ++ _toSchema = {'error': 'error', 'life': 'life'} ++ _toPy = {'error': 'error', 'life': 'life'} ++ def __init__(self, error=None, life=None, **unknown_fields): ++ ''' ++ error : Error ++ life : str ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.life = life ++ ++ ++ ++class LifeResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~LifeResult] ++ ''' ++ self.results = [LifeResult.from_json(o) for o in results or []] ++ ++ ++ ++class ListCloudImageMetadataResult(Type): ++ _toSchema = {'result': 'result'} ++ _toPy = {'result': 'result'} ++ def __init__(self, result=None, **unknown_fields): ++ ''' ++ result : typing.Sequence[~CloudImageMetadata] ++ ''' ++ self.result = [CloudImageMetadata.from_json(o) for o in result or []] ++ ++ ++ ++class ListCloudInfo(Type): ++ _toSchema = {'clouddetails': 'CloudDetails', 'user_access': 'user-access'} ++ _toPy = {'CloudDetails': 'clouddetails', 'user-access': 'user_access'} ++ def __init__(self, clouddetails=None, user_access=None, **unknown_fields): ++ ''' ++ clouddetails : CloudDetails ++ user_access : str ++ ''' ++ self.clouddetails = CloudDetails.from_json(clouddetails) if clouddetails else None ++ self.user_access = user_access ++ ++ ++ ++class ListCloudInfoResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ListCloudInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ListCloudInfo.from_json(result) if result else None ++ ++ ++ ++class ListCloudInfoResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ListCloudInfoResult] ++ ''' ++ self.results = [ListCloudInfoResult.from_json(o) for o in results or []] ++ ++ ++ ++class ListCloudsRequest(Type): ++ _toSchema = {'all_': 'all', 'user_tag': 'user-tag'} ++ _toPy = {'all': 'all_', 'user-tag': 'user_tag'} ++ def __init__(self, all_=None, user_tag=None, **unknown_fields): ++ ''' ++ all_ : bool ++ user_tag : str ++ ''' ++ self.all_ = all_ ++ self.user_tag = user_tag ++ ++ ++ ++class ListFirewallRulesResults(Type): ++ _toSchema = {'rules': 'Rules'} ++ _toPy = {'Rules': 'rules'} ++ def __init__(self, rules=None, **unknown_fields): ++ ''' ++ rules : typing.Sequence[~FirewallRule] ++ ''' ++ self.rules = [FirewallRule.from_json(o) for o in rules or []] ++ ++ ++ ++class ListImageResult(Type): ++ _toSchema = {'result': 'result'} ++ _toPy = {'result': 'result'} ++ def __init__(self, result=None, **unknown_fields): ++ ''' ++ result : typing.Sequence[~ImageMetadata] ++ ''' ++ self.result = [ImageMetadata.from_json(o) for o in result or []] ++ ++ ++ ++class ListResourcesArgs(Type): ++ _toSchema = {'entities': 'entities'} ++ _toPy = {'entities': 'entities'} ++ def __init__(self, entities=None, **unknown_fields): ++ ''' ++ entities : typing.Sequence[~Entity] ++ ''' ++ self.entities = [Entity.from_json(o) for o in entities or []] ++ ++ ++ ++class ListSSHKeys(Type): + _toSchema = {'entities': 'entities', 'mode': 'mode'} + _toPy = {'entities': 'entities', 'mode': 'mode'} + def __init__(self, entities=None, mode=None, **unknown_fields): + ''' + entities : Entities + mode : bool + ''' + self.entities = Entities.from_json(entities) if entities else None + self.mode = mode + + + +class ListSpacesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~Space]<~Space> ++ results : typing.Sequence[~Space] + ''' + self.results = [Space.from_json(o) for o in results or []] + + + +class ListSubnetsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ results : typing.Sequence[~Subnet] + ''' + self.results = [Subnet.from_json(o) for o in results or []] + + + +class ListUnitResourcesArgs(Type): + _toSchema = {'resource_names': 'resource-names'} + _toPy = {'resource-names': 'resource_names'} + def __init__(self, resource_names=None, **unknown_fields): + ''' - resource_names : typing.Sequence<+T_co>[str] ++ resource_names : typing.Sequence[str] + ''' + self.resource_names = resource_names + + + +class LogForwardingGetLastSentParams(Type): + _toSchema = {'ids': 'ids'} + _toPy = {'ids': 'ids'} + def __init__(self, ids=None, **unknown_fields): + ''' - ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID> ++ ids : typing.Sequence[~LogForwardingID] + ''' + self.ids = [LogForwardingID.from_json(o) for o in ids or []] + + + +class LogForwardingGetLastSentResult(Type): + _toSchema = {'err': 'err', 'record_id': 'record-id', 'record_timestamp': 'record-timestamp'} + _toPy = {'err': 'err', 'record-id': 'record_id', 'record-timestamp': 'record_timestamp'} + def __init__(self, err=None, record_id=None, record_timestamp=None, **unknown_fields): + ''' + err : Error + record_id : int + record_timestamp : int + ''' + self.err = Error.from_json(err) if err else None + self.record_id = record_id + self.record_timestamp = record_timestamp + + + +class LogForwardingGetLastSentResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult> ++ results : typing.Sequence[~LogForwardingGetLastSentResult] + ''' + self.results = [LogForwardingGetLastSentResult.from_json(o) for o in results or []] + + + +class LogForwardingID(Type): + _toSchema = {'model': 'model', 'sink': 'sink'} + _toPy = {'model': 'model', 'sink': 'sink'} + def __init__(self, model=None, sink=None, **unknown_fields): + ''' + model : str + sink : str + ''' + self.model = model + self.sink = sink + + + +class LogForwardingSetLastSentParam(Type): + _toSchema = {'logforwardingid': 'LogForwardingID', 'record_id': 'record-id', 'record_timestamp': 'record-timestamp'} + _toPy = {'LogForwardingID': 'logforwardingid', 'record-id': 'record_id', 'record-timestamp': 'record_timestamp'} + def __init__(self, logforwardingid=None, record_id=None, record_timestamp=None, **unknown_fields): + ''' + logforwardingid : LogForwardingID + record_id : int + record_timestamp : int + ''' + self.logforwardingid = LogForwardingID.from_json(logforwardingid) if logforwardingid else None + self.record_id = record_id + self.record_timestamp = record_timestamp + + + +class LogForwardingSetLastSentParams(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam> ++ params : typing.Sequence[~LogForwardingSetLastSentParam] + ''' + self.params = [LogForwardingSetLastSentParam.from_json(o) for o in params or []] + + + +class LookUpArg(Type): + _toSchema = {'id_': 'id', 'name': 'name'} + _toPy = {'id': 'id_', 'name': 'name'} + def __init__(self, id_=None, name=None, **unknown_fields): + ''' + id_ : str + name : str + ''' + self.id_ = id_ + self.name = name + + + +class LookUpArgs(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~LookUpArg]<~LookUpArg> ++ args : typing.Sequence[~LookUpArg] + ''' + self.args = [LookUpArg.from_json(o) for o in args or []] + + + +class LookUpPayloadArg(Type): + _toSchema = {'id_': 'id', 'name': 'name'} + _toPy = {'id': 'id_', 'name': 'name'} + def __init__(self, id_=None, name=None, **unknown_fields): + ''' + id_ : str + name : str + ''' + self.id_ = id_ + self.name = name + + + +class LookUpPayloadArgs(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg> ++ args : typing.Sequence[~LookUpPayloadArg] + ''' + self.args = [LookUpPayloadArg.from_json(o) for o in args or []] + + + +class Macaroon(Type): + _toSchema = {} + _toPy = {} + def __init__(self, **unknown_fields): + ''' + + ''' + pass + + + ++class MacaroonResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : Macaroon ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = Macaroon.from_json(result) if result else None ++ ++ ++ ++class MacaroonResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~MacaroonResult] ++ ''' ++ self.results = [MacaroonResult.from_json(o) for o in results or []] ++ ++ ++ +class MachineAddresses(Type): + _toSchema = {'addresses': 'addresses', 'tag': 'tag'} + _toPy = {'addresses': 'addresses', 'tag': 'tag'} + def __init__(self, addresses=None, tag=None, **unknown_fields): + ''' - addresses : typing.Sequence<+T_co>[~Address]<~Address> ++ addresses : typing.Sequence[~Address] + tag : str + ''' + self.addresses = [Address.from_json(o) for o in addresses or []] + self.tag = tag + + + +class MachineAddressesResult(Type): + _toSchema = {'addresses': 'addresses', 'error': 'error'} + _toPy = {'addresses': 'addresses', 'error': 'error'} + def __init__(self, addresses=None, error=None, **unknown_fields): + ''' - addresses : typing.Sequence<+T_co>[~Address]<~Address> ++ addresses : typing.Sequence[~Address] + error : Error + ''' + self.addresses = [Address.from_json(o) for o in addresses or []] + self.error = Error.from_json(error) if error else None + + + +class MachineAddressesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult> ++ results : typing.Sequence[~MachineAddressesResult] + ''' + self.results = [MachineAddressesResult.from_json(o) for o in results or []] + + + +class MachineBlockDevices(Type): + _toSchema = {'block_devices': 'block-devices', 'machine': 'machine'} + _toPy = {'block-devices': 'block_devices', 'machine': 'machine'} + def __init__(self, block_devices=None, machine=None, **unknown_fields): + ''' - block_devices : typing.Sequence<+T_co>[~BlockDevice]<~BlockDevice> ++ block_devices : typing.Sequence[~BlockDevice] + machine : str + ''' + self.block_devices = [BlockDevice.from_json(o) for o in block_devices or []] + self.machine = machine + + + +class MachineContainers(Type): + _toSchema = {'container_types': 'container-types', 'machine_tag': 'machine-tag'} + _toPy = {'container-types': 'container_types', 'machine-tag': 'machine_tag'} + def __init__(self, container_types=None, machine_tag=None, **unknown_fields): + ''' - container_types : typing.Sequence<+T_co>[str] ++ container_types : typing.Sequence[str] + machine_tag : str + ''' + self.container_types = container_types + self.machine_tag = machine_tag + + + +class MachineContainersParams(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers> ++ params : typing.Sequence[~MachineContainers] + ''' + self.params = [MachineContainers.from_json(o) for o in params or []] + + + +class MachineHardware(Type): + _toSchema = {'arch': 'arch', 'availability_zone': 'availability-zone', 'cores': 'cores', 'cpu_power': 'cpu-power', 'mem': 'mem', 'root_disk': 'root-disk', 'tags': 'tags'} + _toPy = {'arch': 'arch', 'availability-zone': 'availability_zone', 'cores': 'cores', 'cpu-power': 'cpu_power', 'mem': 'mem', 'root-disk': 'root_disk', 'tags': 'tags'} + def __init__(self, arch=None, availability_zone=None, cores=None, cpu_power=None, mem=None, root_disk=None, tags=None, **unknown_fields): + ''' + arch : str + availability_zone : str + cores : int + cpu_power : int + mem : int + root_disk : int - tags : typing.Sequence<+T_co>[str] ++ tags : typing.Sequence[str] + ''' + self.arch = arch + self.availability_zone = availability_zone + self.cores = cores + self.cpu_power = cpu_power + self.mem = mem + self.root_disk = root_disk + self.tags = tags + + + +class MachineNetworkConfigResult(Type): + _toSchema = {'error': 'error', 'info': 'info'} + _toPy = {'error': 'error', 'info': 'info'} + def __init__(self, error=None, info=None, **unknown_fields): + ''' + error : Error - info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ info : typing.Sequence[~NetworkConfig] + ''' + self.error = Error.from_json(error) if error else None + self.info = [NetworkConfig.from_json(o) for o in info or []] + + + +class MachineNetworkConfigResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult> ++ results : typing.Sequence[~MachineNetworkConfigResult] + ''' + self.results = [MachineNetworkConfigResult.from_json(o) for o in results or []] + + + +class MachinePortRange(Type): + _toSchema = {'port_range': 'port-range', 'relation_tag': 'relation-tag', 'unit_tag': 'unit-tag'} + _toPy = {'port-range': 'port_range', 'relation-tag': 'relation_tag', 'unit-tag': 'unit_tag'} + def __init__(self, port_range=None, relation_tag=None, unit_tag=None, **unknown_fields): + ''' + port_range : PortRange + relation_tag : str + unit_tag : str + ''' + self.port_range = PortRange.from_json(port_range) if port_range else None + self.relation_tag = relation_tag + self.unit_tag = unit_tag + + + +class MachinePorts(Type): + _toSchema = {'machine_tag': 'machine-tag', 'subnet_tag': 'subnet-tag'} + _toPy = {'machine-tag': 'machine_tag', 'subnet-tag': 'subnet_tag'} + def __init__(self, machine_tag=None, subnet_tag=None, **unknown_fields): + ''' + machine_tag : str + subnet_tag : str + ''' + self.machine_tag = machine_tag + self.subnet_tag = subnet_tag + + + +class MachinePortsParams(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts> ++ params : typing.Sequence[~MachinePorts] + ''' + self.params = [MachinePorts.from_json(o) for o in params or []] + + + +class MachinePortsResult(Type): + _toSchema = {'error': 'error', 'ports': 'ports'} + _toPy = {'error': 'error', 'ports': 'ports'} + def __init__(self, error=None, ports=None, **unknown_fields): + ''' + error : Error - ports : typing.Sequence<+T_co>[~MachinePortRange]<~MachinePortRange> ++ ports : typing.Sequence[~MachinePortRange] + ''' + self.error = Error.from_json(error) if error else None + self.ports = [MachinePortRange.from_json(o) for o in ports or []] + + + +class MachinePortsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult> ++ results : typing.Sequence[~MachinePortsResult] + ''' + self.results = [MachinePortsResult.from_json(o) for o in results or []] + + + +class MachineStatus(Type): + _toSchema = {'agent_status': 'agent-status', 'containers': 'containers', 'dns_name': 'dns-name', 'hardware': 'hardware', 'has_vote': 'has-vote', 'id_': 'id', 'instance_id': 'instance-id', 'instance_status': 'instance-status', 'ip_addresses': 'ip-addresses', 'jobs': 'jobs', 'series': 'series', 'wants_vote': 'wants-vote'} + _toPy = {'agent-status': 'agent_status', 'containers': 'containers', 'dns-name': 'dns_name', 'hardware': 'hardware', 'has-vote': 'has_vote', 'id': 'id_', 'instance-id': 'instance_id', 'instance-status': 'instance_status', 'ip-addresses': 'ip_addresses', 'jobs': 'jobs', 'series': 'series', 'wants-vote': 'wants_vote'} + def __init__(self, agent_status=None, containers=None, dns_name=None, hardware=None, has_vote=None, id_=None, instance_id=None, instance_status=None, ip_addresses=None, jobs=None, series=None, wants_vote=None, **unknown_fields): + ''' + agent_status : DetailedStatus - containers : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus> ++ containers : typing.Mapping[str, ~MachineStatus] + dns_name : str + hardware : str + has_vote : bool + id_ : str + instance_id : str + instance_status : DetailedStatus - ip_addresses : typing.Sequence<+T_co>[str] - jobs : typing.Sequence<+T_co>[str] ++ ip_addresses : typing.Sequence[str] ++ jobs : typing.Sequence[str] + series : str + wants_vote : bool + ''' + self.agent_status = DetailedStatus.from_json(agent_status) if agent_status else None + self.containers = containers + self.dns_name = dns_name + self.hardware = hardware + self.has_vote = has_vote + self.id_ = id_ + self.instance_id = instance_id + self.instance_status = DetailedStatus.from_json(instance_status) if instance_status else None + self.ip_addresses = ip_addresses + self.jobs = jobs + self.series = series + self.wants_vote = wants_vote + + + +class MachineStorageId(Type): + _toSchema = {'attachment_tag': 'attachment-tag', 'machine_tag': 'machine-tag'} + _toPy = {'attachment-tag': 'attachment_tag', 'machine-tag': 'machine_tag'} + def __init__(self, attachment_tag=None, machine_tag=None, **unknown_fields): + ''' + attachment_tag : str + machine_tag : str + ''' + self.attachment_tag = attachment_tag + self.machine_tag = machine_tag + + + +class MachineStorageIds(Type): + _toSchema = {'ids': 'ids'} + _toPy = {'ids': 'ids'} + def __init__(self, ids=None, **unknown_fields): + ''' - ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> ++ ids : typing.Sequence[~MachineStorageId] + ''' + self.ids = [MachineStorageId.from_json(o) for o in ids or []] + + + +class MachineStorageIdsWatchResult(Type): + _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} + _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} + def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId> ++ changes : typing.Sequence[~MachineStorageId] + error : Error + watcher_id : str + ''' + self.changes = [MachineStorageId.from_json(o) for o in changes or []] + self.error = Error.from_json(error) if error else None + self.watcher_id = watcher_id + + + +class MachineStorageIdsWatchResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult> ++ results : typing.Sequence[~MachineStorageIdsWatchResult] + ''' + self.results = [MachineStorageIdsWatchResult.from_json(o) for o in results or []] + + + +class MapResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ result : typing.Mapping[str, typing.Any] + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class MapResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MapResult]<~MapResult> ++ results : typing.Sequence[~MapResult] + ''' + self.results = [MapResult.from_json(o) for o in results or []] + + + +class MasterMigrationStatus(Type): + _toSchema = {'migration_id': 'migration-id', 'phase': 'phase', 'phase_changed_time': 'phase-changed-time', 'spec': 'spec'} + _toPy = {'migration-id': 'migration_id', 'phase': 'phase', 'phase-changed-time': 'phase_changed_time', 'spec': 'spec'} + def __init__(self, migration_id=None, phase=None, phase_changed_time=None, spec=None, **unknown_fields): + ''' + migration_id : str + phase : str + phase_changed_time : str + spec : MigrationSpec + ''' + self.migration_id = migration_id + self.phase = phase + self.phase_changed_time = phase_changed_time + self.spec = MigrationSpec.from_json(spec) if spec else None + + + +class Member(Type): + _toSchema = {'address': 'Address', 'arbiter': 'Arbiter', 'buildindexes': 'BuildIndexes', 'hidden': 'Hidden', 'id_': 'Id', 'priority': 'Priority', 'slavedelay': 'SlaveDelay', 'tags': 'Tags', 'votes': 'Votes'} + _toPy = {'Address': 'address', 'Arbiter': 'arbiter', 'BuildIndexes': 'buildindexes', 'Hidden': 'hidden', 'Id': 'id_', 'Priority': 'priority', 'SlaveDelay': 'slavedelay', 'Tags': 'tags', 'Votes': 'votes'} + def __init__(self, address=None, arbiter=None, buildindexes=None, hidden=None, id_=None, priority=None, slavedelay=None, tags=None, votes=None, **unknown_fields): + ''' + address : str + arbiter : bool + buildindexes : bool + hidden : bool + id_ : int + priority : float + slavedelay : int - tags : typing.Mapping<~KT, +VT_co>[str, str] ++ tags : typing.Mapping[str, str] + votes : int + ''' + self.address = address + self.arbiter = arbiter + self.buildindexes = buildindexes + self.hidden = hidden + self.id_ = id_ + self.priority = priority + self.slavedelay = slavedelay + self.tags = tags + self.votes = votes + + + +class MergeLeadershipSettingsBulkParams(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam> ++ params : typing.Sequence[~MergeLeadershipSettingsParam] + ''' + self.params = [MergeLeadershipSettingsParam.from_json(o) for o in params or []] + + + +class MergeLeadershipSettingsParam(Type): + _toSchema = {'application_tag': 'application-tag', 'settings': 'settings'} + _toPy = {'application-tag': 'application_tag', 'settings': 'settings'} + def __init__(self, application_tag=None, settings=None, **unknown_fields): + ''' + application_tag : str - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + ''' + self.application_tag = application_tag + self.settings = settings + + + +class MetadataImageIds(Type): + _toSchema = {'image_ids': 'image-ids'} + _toPy = {'image-ids': 'image_ids'} + def __init__(self, image_ids=None, **unknown_fields): + ''' - image_ids : typing.Sequence<+T_co>[str] ++ image_ids : typing.Sequence[str] + ''' + self.image_ids = image_ids + + + +class MetadataSaveParams(Type): + _toSchema = {'metadata': 'metadata'} + _toPy = {'metadata': 'metadata'} + def __init__(self, metadata=None, **unknown_fields): + ''' - metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList> ++ metadata : typing.Sequence[~CloudImageMetadataList] + ''' + self.metadata = [CloudImageMetadataList.from_json(o) for o in metadata or []] + + + +class MeterStatus(Type): + _toSchema = {'color': 'color', 'message': 'message'} + _toPy = {'color': 'color', 'message': 'message'} + def __init__(self, color=None, message=None, **unknown_fields): + ''' + color : str + message : str + ''' + self.color = color + self.message = message + + + +class MeterStatusParam(Type): + _toSchema = {'code': 'code', 'info': 'info', 'tag': 'tag'} + _toPy = {'code': 'code', 'info': 'info', 'tag': 'tag'} + def __init__(self, code=None, info=None, tag=None, **unknown_fields): + ''' + code : str + info : str + tag : str + ''' + self.code = code + self.info = info + self.tag = tag + + + +class MeterStatusParams(Type): + _toSchema = {'statues': 'statues'} + _toPy = {'statues': 'statues'} + def __init__(self, statues=None, **unknown_fields): + ''' - statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam> ++ statues : typing.Sequence[~MeterStatusParam] + ''' + self.statues = [MeterStatusParam.from_json(o) for o in statues or []] + + + +class MeterStatusResult(Type): + _toSchema = {'code': 'code', 'error': 'error', 'info': 'info'} + _toPy = {'code': 'code', 'error': 'error', 'info': 'info'} + def __init__(self, code=None, error=None, info=None, **unknown_fields): + ''' + code : str + error : Error + info : str + ''' + self.code = code + self.error = Error.from_json(error) if error else None + self.info = info + + + +class MeterStatusResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult> ++ results : typing.Sequence[~MeterStatusResult] + ''' + self.results = [MeterStatusResult.from_json(o) for o in results or []] + + + +class Metric(Type): + _toSchema = {'key': 'key', 'time': 'time', 'value': 'value'} + _toPy = {'key': 'key', 'time': 'time', 'value': 'value'} + def __init__(self, key=None, time=None, value=None, **unknown_fields): + ''' + key : str + time : str + value : str + ''' + self.key = key + self.time = time + self.value = value + + + +class MetricBatch(Type): + _toSchema = {'charm_url': 'charm-url', 'created': 'created', 'metrics': 'metrics', 'uuid': 'uuid'} + _toPy = {'charm-url': 'charm_url', 'created': 'created', 'metrics': 'metrics', 'uuid': 'uuid'} + def __init__(self, charm_url=None, created=None, metrics=None, uuid=None, **unknown_fields): + ''' + charm_url : str + created : str - metrics : typing.Sequence<+T_co>[~Metric]<~Metric> ++ metrics : typing.Sequence[~Metric] + uuid : str + ''' + self.charm_url = charm_url + self.created = created + self.metrics = [Metric.from_json(o) for o in metrics or []] + self.uuid = uuid + + + +class MetricBatchParam(Type): + _toSchema = {'batch': 'batch', 'tag': 'tag'} + _toPy = {'batch': 'batch', 'tag': 'tag'} + def __init__(self, batch=None, tag=None, **unknown_fields): + ''' + batch : MetricBatch + tag : str + ''' + self.batch = MetricBatch.from_json(batch) if batch else None + self.tag = tag + + + +class MetricBatchParams(Type): + _toSchema = {'batches': 'batches'} + _toPy = {'batches': 'batches'} + def __init__(self, batches=None, **unknown_fields): + ''' - batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam> ++ batches : typing.Sequence[~MetricBatchParam] + ''' + self.batches = [MetricBatchParam.from_json(o) for o in batches or []] + + + +class MetricResult(Type): + _toSchema = {'key': 'key', 'time': 'time', 'unit': 'unit', 'value': 'value'} + _toPy = {'key': 'key', 'time': 'time', 'unit': 'unit', 'value': 'value'} + def __init__(self, key=None, time=None, unit=None, value=None, **unknown_fields): + ''' + key : str + time : str + unit : str + value : str + ''' + self.key = key + self.time = time + self.unit = unit + self.value = value + + + +class MetricResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics> ++ results : typing.Sequence[~EntityMetrics] + ''' + self.results = [EntityMetrics.from_json(o) for o in results or []] + + + +class MigrationModelInfo(Type): + _toSchema = {'agent_version': 'agent-version', 'name': 'name', 'owner_tag': 'owner-tag', 'uuid': 'uuid'} + _toPy = {'agent-version': 'agent_version', 'name': 'name', 'owner-tag': 'owner_tag', 'uuid': 'uuid'} + def __init__(self, agent_version=None, name=None, owner_tag=None, uuid=None, **unknown_fields): + ''' + agent_version : Number + name : str + owner_tag : str + uuid : str + ''' + self.agent_version = Number.from_json(agent_version) if agent_version else None + self.name = name + self.owner_tag = owner_tag + self.uuid = uuid + + + +class MigrationSpec(Type): + _toSchema = {'external_control': 'external-control', 'model_tag': 'model-tag', 'skip_initial_prechecks': 'skip-initial-prechecks', 'target_info': 'target-info'} + _toPy = {'external-control': 'external_control', 'model-tag': 'model_tag', 'skip-initial-prechecks': 'skip_initial_prechecks', 'target-info': 'target_info'} + def __init__(self, external_control=None, model_tag=None, skip_initial_prechecks=None, target_info=None, **unknown_fields): + ''' + external_control : bool + model_tag : str + skip_initial_prechecks : bool + target_info : MigrationTargetInfo + ''' + self.external_control = external_control + self.model_tag = model_tag + self.skip_initial_prechecks = skip_initial_prechecks + self.target_info = MigrationTargetInfo.from_json(target_info) if target_info else None + + + +class MigrationStatus(Type): + _toSchema = {'attempt': 'attempt', 'external_control': 'external-control', 'migration_id': 'migration-id', 'phase': 'phase', 'source_api_addrs': 'source-api-addrs', 'source_ca_cert': 'source-ca-cert', 'target_api_addrs': 'target-api-addrs', 'target_ca_cert': 'target-ca-cert'} + _toPy = {'attempt': 'attempt', 'external-control': 'external_control', 'migration-id': 'migration_id', 'phase': 'phase', 'source-api-addrs': 'source_api_addrs', 'source-ca-cert': 'source_ca_cert', 'target-api-addrs': 'target_api_addrs', 'target-ca-cert': 'target_ca_cert'} + def __init__(self, attempt=None, external_control=None, migration_id=None, phase=None, source_api_addrs=None, source_ca_cert=None, target_api_addrs=None, target_ca_cert=None, **unknown_fields): + ''' + attempt : int + external_control : bool + migration_id : str + phase : str - source_api_addrs : typing.Sequence<+T_co>[str] ++ source_api_addrs : typing.Sequence[str] + source_ca_cert : str - target_api_addrs : typing.Sequence<+T_co>[str] ++ target_api_addrs : typing.Sequence[str] + target_ca_cert : str + ''' + self.attempt = attempt + self.external_control = external_control + self.migration_id = migration_id + self.phase = phase + self.source_api_addrs = source_api_addrs + self.source_ca_cert = source_ca_cert + self.target_api_addrs = target_api_addrs + self.target_ca_cert = target_ca_cert + + + +class MigrationTargetInfo(Type): + _toSchema = {'addrs': 'addrs', 'auth_tag': 'auth-tag', 'ca_cert': 'ca-cert', 'controller_tag': 'controller-tag', 'macaroons': 'macaroons', 'password': 'password'} + _toPy = {'addrs': 'addrs', 'auth-tag': 'auth_tag', 'ca-cert': 'ca_cert', 'controller-tag': 'controller_tag', 'macaroons': 'macaroons', 'password': 'password'} + def __init__(self, addrs=None, auth_tag=None, ca_cert=None, controller_tag=None, macaroons=None, password=None, **unknown_fields): + ''' - addrs : typing.Sequence<+T_co>[str] ++ addrs : typing.Sequence[str] + auth_tag : str + ca_cert : str + controller_tag : str + macaroons : str + password : str + ''' + self.addrs = addrs + self.auth_tag = auth_tag + self.ca_cert = ca_cert + self.controller_tag = controller_tag + self.macaroons = macaroons + self.password = password + + + +class MinionReport(Type): + _toSchema = {'migration_id': 'migration-id', 'phase': 'phase', 'success': 'success'} + _toPy = {'migration-id': 'migration_id', 'phase': 'phase', 'success': 'success'} + def __init__(self, migration_id=None, phase=None, success=None, **unknown_fields): + ''' + migration_id : str + phase : str + success : bool + ''' + self.migration_id = migration_id + self.phase = phase + self.success = success + + + +class MinionReports(Type): + _toSchema = {'failed': 'failed', 'migration_id': 'migration-id', 'phase': 'phase', 'success_count': 'success-count', 'unknown_count': 'unknown-count', 'unknown_sample': 'unknown-sample'} + _toPy = {'failed': 'failed', 'migration-id': 'migration_id', 'phase': 'phase', 'success-count': 'success_count', 'unknown-count': 'unknown_count', 'unknown-sample': 'unknown_sample'} + def __init__(self, failed=None, migration_id=None, phase=None, success_count=None, unknown_count=None, unknown_sample=None, **unknown_fields): + ''' - failed : typing.Sequence<+T_co>[str] ++ failed : typing.Sequence[str] + migration_id : str + phase : str + success_count : int + unknown_count : int - unknown_sample : typing.Sequence<+T_co>[str] ++ unknown_sample : typing.Sequence[str] + ''' + self.failed = failed + self.migration_id = migration_id + self.phase = phase + self.success_count = success_count + self.unknown_count = unknown_count + self.unknown_sample = unknown_sample + + + +class Model(Type): + _toSchema = {'name': 'name', 'owner_tag': 'owner-tag', 'uuid': 'uuid'} + _toPy = {'name': 'name', 'owner-tag': 'owner_tag', 'uuid': 'uuid'} + def __init__(self, name=None, owner_tag=None, uuid=None, **unknown_fields): + ''' + name : str + owner_tag : str + uuid : str + ''' + self.name = name + self.owner_tag = owner_tag + self.uuid = uuid + + + ++class ModelAccess(Type): ++ _toSchema = {'access': 'access', 'model': 'model'} ++ _toPy = {'access': 'access', 'model': 'model'} ++ def __init__(self, access=None, model=None, **unknown_fields): ++ ''' ++ access : str ++ model : str ++ ''' ++ self.access = access ++ self.model = model ++ ++ ++ +class ModelArgs(Type): + _toSchema = {'model_tag': 'model-tag'} + _toPy = {'model-tag': 'model_tag'} + def __init__(self, model_tag=None, **unknown_fields): + ''' + model_tag : str + ''' + self.model_tag = model_tag + + + +class ModelBlockInfo(Type): + _toSchema = {'blocks': 'blocks', 'model_uuid': 'model-uuid', 'name': 'name', 'owner_tag': 'owner-tag'} + _toPy = {'blocks': 'blocks', 'model-uuid': 'model_uuid', 'name': 'name', 'owner-tag': 'owner_tag'} + def __init__(self, blocks=None, model_uuid=None, name=None, owner_tag=None, **unknown_fields): + ''' - blocks : typing.Sequence<+T_co>[str] ++ blocks : typing.Sequence[str] + model_uuid : str + name : str + owner_tag : str + ''' + self.blocks = blocks + self.model_uuid = model_uuid + self.name = name + self.owner_tag = owner_tag + + + +class ModelBlockInfoList(Type): + _toSchema = {'models': 'models'} + _toPy = {'models': 'models'} + def __init__(self, models=None, **unknown_fields): + ''' - models : typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo> ++ models : typing.Sequence[~ModelBlockInfo] + ''' + self.models = [ModelBlockInfo.from_json(o) for o in models or []] + + + +class ModelConfigResult(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + ''' + self.config = config + + + +class ModelConfigResults(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue> ++ config : typing.Mapping[str, ~ConfigValue] + ''' + self.config = config + + + +class ModelCreateArgs(Type): + _toSchema = {'cloud_tag': 'cloud-tag', 'config': 'config', 'credential': 'credential', 'name': 'name', 'owner_tag': 'owner-tag', 'region': 'region'} + _toPy = {'cloud-tag': 'cloud_tag', 'config': 'config', 'credential': 'credential', 'name': 'name', 'owner-tag': 'owner_tag', 'region': 'region'} + def __init__(self, cloud_tag=None, config=None, credential=None, name=None, owner_tag=None, region=None, **unknown_fields): + ''' + cloud_tag : str - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + credential : str + name : str + owner_tag : str + region : str + ''' + self.cloud_tag = cloud_tag + self.config = config + self.credential = credential + self.name = name + self.owner_tag = owner_tag + self.region = region + + + ++class ModelCredential(Type): ++ _toSchema = {'credential_tag': 'credential-tag', 'exists': 'exists', 'model_tag': 'model-tag', 'valid': 'valid'} ++ _toPy = {'credential-tag': 'credential_tag', 'exists': 'exists', 'model-tag': 'model_tag', 'valid': 'valid'} ++ def __init__(self, credential_tag=None, exists=None, model_tag=None, valid=None, **unknown_fields): ++ ''' ++ credential_tag : str ++ exists : bool ++ model_tag : str ++ valid : bool ++ ''' ++ self.credential_tag = credential_tag ++ self.exists = exists ++ self.model_tag = model_tag ++ self.valid = valid ++ ++ ++ +class ModelDefaultValues(Type): + _toSchema = {'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'config': 'config'} + _toPy = {'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'config': 'config'} + def __init__(self, cloud_region=None, cloud_tag=None, config=None, **unknown_fields): + ''' + cloud_region : str + cloud_tag : str - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + ''' + self.cloud_region = cloud_region + self.cloud_tag = cloud_tag + self.config = config + + + +class ModelDefaults(Type): + _toSchema = {'controller': 'controller', 'default': 'default', 'regions': 'regions'} + _toPy = {'controller': 'controller', 'default': 'default', 'regions': 'regions'} + def __init__(self, controller=None, default=None, regions=None, **unknown_fields): + ''' - controller : typing.Mapping<~KT, +VT_co>[str, typing.Any] - default : typing.Mapping<~KT, +VT_co>[str, typing.Any] - regions : typing.Sequence<+T_co>[~RegionDefaults]<~RegionDefaults> ++ controller : typing.Mapping[str, typing.Any] ++ default : typing.Mapping[str, typing.Any] ++ regions : typing.Sequence[~RegionDefaults] + ''' + self.controller = controller + self.default = default + self.regions = [RegionDefaults.from_json(o) for o in regions or []] + + + +class ModelDefaultsResult(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults> ++ config : typing.Mapping[str, ~ModelDefaults] + ''' + self.config = config + + + ++class ModelEntityCount(Type): ++ _toSchema = {'count': 'count', 'entity': 'entity'} ++ _toPy = {'count': 'count', 'entity': 'entity'} ++ def __init__(self, count=None, entity=None, **unknown_fields): ++ ''' ++ count : int ++ entity : str ++ ''' ++ self.count = count ++ self.entity = entity ++ ++ ++ ++class ModelFilesystemInfo(Type): ++ _toSchema = {'detachable': 'detachable', 'id_': 'id', 'message': 'message', 'provider_id': 'provider-id', 'status': 'status'} ++ _toPy = {'detachable': 'detachable', 'id': 'id_', 'message': 'message', 'provider-id': 'provider_id', 'status': 'status'} ++ def __init__(self, detachable=None, id_=None, message=None, provider_id=None, status=None, **unknown_fields): ++ ''' ++ detachable : bool ++ id_ : str ++ message : str ++ provider_id : str ++ status : str ++ ''' ++ self.detachable = detachable ++ self.id_ = id_ ++ self.message = message ++ self.provider_id = provider_id ++ self.status = status ++ ++ ++ +class ModelInfo(Type): - _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'default_series': 'default-series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'users': 'users', 'uuid': 'uuid'} - _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'default-series': 'default_series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'users': 'users', 'uuid': 'uuid'} - def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, default_series=None, life=None, machines=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, users=None, uuid=None, **unknown_fields): ++ _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'default_series': 'default-series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'type_': 'type', 'users': 'users', 'uuid': 'uuid'} ++ _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'default-series': 'default_series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'type': 'type_', 'users': 'users', 'uuid': 'uuid'} ++ def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, default_series=None, life=None, machines=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, type_=None, users=None, uuid=None, **unknown_fields): + ''' + agent_version : Number + cloud_credential_tag : str + cloud_region : str + cloud_tag : str + controller_uuid : str + default_series : str + life : str - machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo> ++ machines : typing.Sequence[~ModelMachineInfo] + migration : ModelMigrationStatus + name : str + owner_tag : str + provider_type : str + sla : ModelSLAInfo + status : EntityStatus - users : typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo> ++ type_ : str ++ users : typing.Sequence[~ModelUserInfo] + uuid : str + ''' + self.agent_version = Number.from_json(agent_version) if agent_version else None + self.cloud_credential_tag = cloud_credential_tag + self.cloud_region = cloud_region + self.cloud_tag = cloud_tag + self.controller_uuid = controller_uuid + self.default_series = default_series + self.life = life + self.machines = [ModelMachineInfo.from_json(o) for o in machines or []] + self.migration = ModelMigrationStatus.from_json(migration) if migration else None + self.name = name + self.owner_tag = owner_tag + self.provider_type = provider_type + self.sla = ModelSLAInfo.from_json(sla) if sla else None + self.status = EntityStatus.from_json(status) if status else None ++ self.type_ = type_ + self.users = [ModelUserInfo.from_json(o) for o in users or []] + self.uuid = uuid + + + +class ModelInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : ModelInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = ModelInfo.from_json(result) if result else None + + + +class ModelInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult> ++ results : typing.Sequence[~ModelInfoResult] + ''' + self.results = [ModelInfoResult.from_json(o) for o in results or []] + + + +class ModelInstanceTypesConstraint(Type): + _toSchema = {'value': 'value'} + _toPy = {'value': 'value'} + def __init__(self, value=None, **unknown_fields): + ''' + value : Value + ''' + self.value = Value.from_json(value) if value else None + + + +class ModelInstanceTypesConstraints(Type): + _toSchema = {'constraints': 'constraints'} + _toPy = {'constraints': 'constraints'} + def __init__(self, constraints=None, **unknown_fields): + ''' - constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint> ++ constraints : typing.Sequence[~ModelInstanceTypesConstraint] + ''' + self.constraints = [ModelInstanceTypesConstraint.from_json(o) for o in constraints or []] + + + +class ModelMachineInfo(Type): + _toSchema = {'hardware': 'hardware', 'has_vote': 'has-vote', 'id_': 'id', 'instance_id': 'instance-id', 'status': 'status', 'wants_vote': 'wants-vote'} + _toPy = {'hardware': 'hardware', 'has-vote': 'has_vote', 'id': 'id_', 'instance-id': 'instance_id', 'status': 'status', 'wants-vote': 'wants_vote'} + def __init__(self, hardware=None, has_vote=None, id_=None, instance_id=None, status=None, wants_vote=None, **unknown_fields): + ''' + hardware : MachineHardware + has_vote : bool + id_ : str + instance_id : str + status : str + wants_vote : bool + ''' + self.hardware = MachineHardware.from_json(hardware) if hardware else None + self.has_vote = has_vote + self.id_ = id_ + self.instance_id = instance_id + self.status = status + self.wants_vote = wants_vote + + + +class ModelMigrationStatus(Type): + _toSchema = {'end': 'end', 'start': 'start', 'status': 'status'} + _toPy = {'end': 'end', 'start': 'start', 'status': 'status'} + def __init__(self, end=None, start=None, status=None, **unknown_fields): + ''' + end : str + start : str + status : str + ''' + self.end = end + self.start = start + self.status = status + + + +class ModelResult(Type): + _toSchema = {'error': 'error', 'name': 'name', 'uuid': 'uuid'} + _toPy = {'error': 'error', 'name': 'name', 'uuid': 'uuid'} + def __init__(self, error=None, name=None, uuid=None, **unknown_fields): + ''' + error : Error + name : str + uuid : str + ''' + self.error = Error.from_json(error) if error else None + self.name = name + self.uuid = uuid + + + +class ModelSLA(Type): + _toSchema = {'creds': 'creds', 'level': 'level'} + _toPy = {'creds': 'creds', 'level': 'level'} + def __init__(self, creds=None, level=None, **unknown_fields): + ''' - creds : typing.Sequence<+T_co>[int] ++ creds : typing.Sequence[int] + level : str + ''' + self.creds = creds + self.level = level + + + +class ModelSLAInfo(Type): + _toSchema = {'level': 'level', 'owner': 'owner'} + _toPy = {'level': 'level', 'owner': 'owner'} + def __init__(self, level=None, owner=None, **unknown_fields): + ''' + level : str + owner : str + ''' + self.level = level + self.owner = owner + + + ++class ModelSequencesResult(Type): ++ _toSchema = {'sequences': 'sequences'} ++ _toPy = {'sequences': 'sequences'} ++ def __init__(self, sequences=None, **unknown_fields): ++ ''' ++ sequences : typing.Mapping[str, int] ++ ''' ++ self.sequences = sequences ++ ++ ++ +class ModelSet(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ config : typing.Mapping[str, typing.Any] + ''' + self.config = config + + + +class ModelStatus(Type): + _toSchema = {'application_count': 'application-count', 'hosted_machine_count': 'hosted-machine-count', 'life': 'life', 'machines': 'machines', 'model_tag': 'model-tag', 'owner_tag': 'owner-tag'} + _toPy = {'application-count': 'application_count', 'hosted-machine-count': 'hosted_machine_count', 'life': 'life', 'machines': 'machines', 'model-tag': 'model_tag', 'owner-tag': 'owner_tag'} + def __init__(self, application_count=None, hosted_machine_count=None, life=None, machines=None, model_tag=None, owner_tag=None, **unknown_fields): + ''' + application_count : int + hosted_machine_count : int + life : str - machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo> ++ machines : typing.Sequence[~ModelMachineInfo] + model_tag : str + owner_tag : str + ''' + self.application_count = application_count + self.hosted_machine_count = hosted_machine_count + self.life = life + self.machines = [ModelMachineInfo.from_json(o) for o in machines or []] + self.model_tag = model_tag + self.owner_tag = owner_tag + + + +class ModelStatusInfo(Type): - _toSchema = {'available_version': 'available-version', 'cloud_tag': 'cloud-tag', 'meter_status': 'meter-status', 'model_status': 'model-status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'} - _toPy = {'available-version': 'available_version', 'cloud-tag': 'cloud_tag', 'meter-status': 'meter_status', 'model-status': 'model_status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'} - def __init__(self, available_version=None, cloud_tag=None, meter_status=None, model_status=None, name=None, region=None, sla=None, version=None, **unknown_fields): ++ _toSchema = {'available_version': 'available-version', 'cloud_tag': 'cloud-tag', 'meter_status': 'meter-status', 'model_status': 'model-status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'type_': 'type', 'version': 'version'} ++ _toPy = {'available-version': 'available_version', 'cloud-tag': 'cloud_tag', 'meter-status': 'meter_status', 'model-status': 'model_status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'type': 'type_', 'version': 'version'} ++ def __init__(self, available_version=None, cloud_tag=None, meter_status=None, model_status=None, name=None, region=None, sla=None, type_=None, version=None, **unknown_fields): + ''' + available_version : str + cloud_tag : str + meter_status : MeterStatus + model_status : DetailedStatus + name : str + region : str + sla : str ++ type_ : str + version : str + ''' + self.available_version = available_version + self.cloud_tag = cloud_tag + self.meter_status = MeterStatus.from_json(meter_status) if meter_status else None + self.model_status = DetailedStatus.from_json(model_status) if model_status else None + self.name = name + self.region = region + self.sla = sla ++ self.type_ = type_ + self.version = version + + + +class ModelStatusResults(Type): + _toSchema = {'models': 'models'} + _toPy = {'models': 'models'} + def __init__(self, models=None, **unknown_fields): + ''' - models : typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus> ++ models : typing.Sequence[~ModelStatus] + ''' + self.models = [ModelStatus.from_json(o) for o in models or []] + + + ++class ModelSummariesRequest(Type): ++ _toSchema = {'all_': 'all', 'user_tag': 'user-tag'} ++ _toPy = {'all': 'all_', 'user-tag': 'user_tag'} ++ def __init__(self, all_=None, user_tag=None, **unknown_fields): ++ ''' ++ all_ : bool ++ user_tag : str ++ ''' ++ self.all_ = all_ ++ self.user_tag = user_tag ++ ++ ++ ++class ModelSummary(Type): ++ _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'counts': 'counts', 'default_series': 'default-series', 'last_connection': 'last-connection', 'life': 'life', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'type_': 'type', 'user_access': 'user-access', 'uuid': 'uuid'} ++ _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'counts': 'counts', 'default-series': 'default_series', 'last-connection': 'last_connection', 'life': 'life', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'type': 'type_', 'user-access': 'user_access', 'uuid': 'uuid'} ++ def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, counts=None, default_series=None, last_connection=None, life=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, type_=None, user_access=None, uuid=None, **unknown_fields): ++ ''' ++ agent_version : Number ++ cloud_credential_tag : str ++ cloud_region : str ++ cloud_tag : str ++ controller_uuid : str ++ counts : typing.Sequence[~ModelEntityCount] ++ default_series : str ++ last_connection : str ++ life : str ++ migration : ModelMigrationStatus ++ name : str ++ owner_tag : str ++ provider_type : str ++ sla : ModelSLAInfo ++ status : EntityStatus ++ type_ : str ++ user_access : str ++ uuid : str ++ ''' ++ self.agent_version = Number.from_json(agent_version) if agent_version else None ++ self.cloud_credential_tag = cloud_credential_tag ++ self.cloud_region = cloud_region ++ self.cloud_tag = cloud_tag ++ self.controller_uuid = controller_uuid ++ self.counts = [ModelEntityCount.from_json(o) for o in counts or []] ++ self.default_series = default_series ++ self.last_connection = last_connection ++ self.life = life ++ self.migration = ModelMigrationStatus.from_json(migration) if migration else None ++ self.name = name ++ self.owner_tag = owner_tag ++ self.provider_type = provider_type ++ self.sla = ModelSLAInfo.from_json(sla) if sla else None ++ self.status = EntityStatus.from_json(status) if status else None ++ self.type_ = type_ ++ self.user_access = user_access ++ self.uuid = uuid ++ ++ ++ ++class ModelSummaryResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : ModelSummary ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = ModelSummary.from_json(result) if result else None ++ ++ ++ ++class ModelSummaryResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ModelSummaryResult] ++ ''' ++ self.results = [ModelSummaryResult.from_json(o) for o in results or []] ++ ++ ++ +class ModelTag(Type): + _toSchema = {} + _toPy = {} + def __init__(self, **unknown_fields): + ''' + + ''' + pass + + + +class ModelUnset(Type): + _toSchema = {'keys': 'keys'} + _toPy = {'keys': 'keys'} + def __init__(self, keys=None, **unknown_fields): + ''' - keys : typing.Sequence<+T_co>[str] ++ keys : typing.Sequence[str] + ''' + self.keys = keys + + + +class ModelUnsetKeys(Type): + _toSchema = {'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'keys': 'keys'} + _toPy = {'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'keys': 'keys'} + def __init__(self, cloud_region=None, cloud_tag=None, keys=None, **unknown_fields): + ''' + cloud_region : str + cloud_tag : str - keys : typing.Sequence<+T_co>[str] ++ keys : typing.Sequence[str] + ''' + self.cloud_region = cloud_region + self.cloud_tag = cloud_tag + self.keys = keys + + + +class ModelUserInfo(Type): + _toSchema = {'access': 'access', 'display_name': 'display-name', 'last_connection': 'last-connection', 'user': 'user'} + _toPy = {'access': 'access', 'display-name': 'display_name', 'last-connection': 'last_connection', 'user': 'user'} + def __init__(self, access=None, display_name=None, last_connection=None, user=None, **unknown_fields): + ''' + access : str + display_name : str + last_connection : str + user : str + ''' + self.access = access + self.display_name = display_name + self.last_connection = last_connection + self.user = user + + + +class ModelUserInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : ModelUserInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = ModelUserInfo.from_json(result) if result else None + + + +class ModelUserInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult> ++ results : typing.Sequence[~ModelUserInfoResult] + ''' + self.results = [ModelUserInfoResult.from_json(o) for o in results or []] + + + ++class ModelVolumeInfo(Type): ++ _toSchema = {'detachable': 'detachable', 'id_': 'id', 'message': 'message', 'provider_id': 'provider-id', 'status': 'status'} ++ _toPy = {'detachable': 'detachable', 'id': 'id_', 'message': 'message', 'provider-id': 'provider_id', 'status': 'status'} ++ def __init__(self, detachable=None, id_=None, message=None, provider_id=None, status=None, **unknown_fields): ++ ''' ++ detachable : bool ++ id_ : str ++ message : str ++ provider_id : str ++ status : str ++ ''' ++ self.detachable = detachable ++ self.id_ = id_ ++ self.message = message ++ self.provider_id = provider_id ++ self.status = status ++ ++ ++ ++class ModifyCloudAccess(Type): ++ _toSchema = {'access': 'access', 'action': 'action', 'cloud_tag': 'cloud-tag', 'user_tag': 'user-tag'} ++ _toPy = {'access': 'access', 'action': 'action', 'cloud-tag': 'cloud_tag', 'user-tag': 'user_tag'} ++ def __init__(self, access=None, action=None, cloud_tag=None, user_tag=None, **unknown_fields): ++ ''' ++ access : str ++ action : str ++ cloud_tag : str ++ user_tag : str ++ ''' ++ self.access = access ++ self.action = action ++ self.cloud_tag = cloud_tag ++ self.user_tag = user_tag ++ ++ ++ ++class ModifyCloudAccessRequest(Type): ++ _toSchema = {'changes': 'changes'} ++ _toPy = {'changes': 'changes'} ++ def __init__(self, changes=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~ModifyCloudAccess] ++ ''' ++ self.changes = [ModifyCloudAccess.from_json(o) for o in changes or []] ++ ++ ++ +class ModifyControllerAccess(Type): + _toSchema = {'access': 'access', 'action': 'action', 'user_tag': 'user-tag'} + _toPy = {'access': 'access', 'action': 'action', 'user-tag': 'user_tag'} + def __init__(self, access=None, action=None, user_tag=None, **unknown_fields): + ''' + access : str + action : str + user_tag : str + ''' + self.access = access + self.action = action + self.user_tag = user_tag + + + +class ModifyControllerAccessRequest(Type): + _toSchema = {'changes': 'changes'} + _toPy = {'changes': 'changes'} + def __init__(self, changes=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess> ++ changes : typing.Sequence[~ModifyControllerAccess] + ''' + self.changes = [ModifyControllerAccess.from_json(o) for o in changes or []] + + + +class ModifyModelAccess(Type): + _toSchema = {'access': 'access', 'action': 'action', 'model_tag': 'model-tag', 'user_tag': 'user-tag'} + _toPy = {'access': 'access', 'action': 'action', 'model-tag': 'model_tag', 'user-tag': 'user_tag'} + def __init__(self, access=None, action=None, model_tag=None, user_tag=None, **unknown_fields): + ''' + access : str + action : str + model_tag : str + user_tag : str + ''' + self.access = access + self.action = action + self.model_tag = model_tag + self.user_tag = user_tag + + + +class ModifyModelAccessRequest(Type): + _toSchema = {'changes': 'changes'} + _toPy = {'changes': 'changes'} + def __init__(self, changes=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess> ++ changes : typing.Sequence[~ModifyModelAccess] + ''' + self.changes = [ModifyModelAccess.from_json(o) for o in changes or []] + + + ++class ModifyOfferAccess(Type): ++ _toSchema = {'access': 'access', 'action': 'action', 'offer_url': 'offer-url', 'user_tag': 'user-tag'} ++ _toPy = {'access': 'access', 'action': 'action', 'offer-url': 'offer_url', 'user-tag': 'user_tag'} ++ def __init__(self, access=None, action=None, offer_url=None, user_tag=None, **unknown_fields): ++ ''' ++ access : str ++ action : str ++ offer_url : str ++ user_tag : str ++ ''' ++ self.access = access ++ self.action = action ++ self.offer_url = offer_url ++ self.user_tag = user_tag ++ ++ ++ ++class ModifyOfferAccessRequest(Type): ++ _toSchema = {'changes': 'changes'} ++ _toPy = {'changes': 'changes'} ++ def __init__(self, changes=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~ModifyOfferAccess] ++ ''' ++ self.changes = [ModifyOfferAccess.from_json(o) for o in changes or []] ++ ++ ++ +class ModifyUserSSHKeys(Type): + _toSchema = {'ssh_keys': 'ssh-keys', 'user': 'user'} + _toPy = {'ssh-keys': 'ssh_keys', 'user': 'user'} + def __init__(self, ssh_keys=None, user=None, **unknown_fields): + ''' - ssh_keys : typing.Sequence<+T_co>[str] ++ ssh_keys : typing.Sequence[str] + user : str + ''' + self.ssh_keys = ssh_keys + self.user = user + + + +class MongoUpgradeResults(Type): + _toSchema = {'ha_members': 'ha-members', 'master': 'master', 'rs_members': 'rs-members'} + _toPy = {'ha-members': 'ha_members', 'master': 'master', 'rs-members': 'rs_members'} + def __init__(self, ha_members=None, master=None, rs_members=None, **unknown_fields): + ''' - ha_members : typing.Sequence<+T_co>[~HAMember]<~HAMember> ++ ha_members : typing.Sequence[~HAMember] + master : HAMember - rs_members : typing.Sequence<+T_co>[~Member]<~Member> ++ rs_members : typing.Sequence[~Member] + ''' + self.ha_members = [HAMember.from_json(o) for o in ha_members or []] + self.master = HAMember.from_json(master) if master else None + self.rs_members = [Member.from_json(o) for o in rs_members or []] + + + +class MongoVersion(Type): + _toSchema = {'engine': 'engine', 'major': 'major', 'minor': 'minor', 'patch': 'patch'} + _toPy = {'engine': 'engine', 'major': 'major', 'minor': 'minor', 'patch': 'patch'} + def __init__(self, engine=None, major=None, minor=None, patch=None, **unknown_fields): + ''' + engine : str + major : int + minor : int + patch : str + ''' + self.engine = engine + self.major = major + self.minor = minor + self.patch = patch + + + +class NetworkConfig(Type): + _toSchema = {'address': 'address', 'cidr': 'cidr', 'config_type': 'config-type', 'device_index': 'device-index', 'disabled': 'disabled', 'dns_search_domains': 'dns-search-domains', 'dns_servers': 'dns-servers', 'gateway_address': 'gateway-address', 'interface_name': 'interface-name', 'interface_type': 'interface-type', 'mac_address': 'mac-address', 'mtu': 'mtu', 'no_auto_start': 'no-auto-start', 'parent_interface_name': 'parent-interface-name', 'provider_address_id': 'provider-address-id', 'provider_id': 'provider-id', 'provider_space_id': 'provider-space-id', 'provider_subnet_id': 'provider-subnet-id', 'provider_vlan_id': 'provider-vlan-id', 'vlan_tag': 'vlan-tag'} + _toPy = {'address': 'address', 'cidr': 'cidr', 'config-type': 'config_type', 'device-index': 'device_index', 'disabled': 'disabled', 'dns-search-domains': 'dns_search_domains', 'dns-servers': 'dns_servers', 'gateway-address': 'gateway_address', 'interface-name': 'interface_name', 'interface-type': 'interface_type', 'mac-address': 'mac_address', 'mtu': 'mtu', 'no-auto-start': 'no_auto_start', 'parent-interface-name': 'parent_interface_name', 'provider-address-id': 'provider_address_id', 'provider-id': 'provider_id', 'provider-space-id': 'provider_space_id', 'provider-subnet-id': 'provider_subnet_id', 'provider-vlan-id': 'provider_vlan_id', 'vlan-tag': 'vlan_tag'} + def __init__(self, address=None, cidr=None, config_type=None, device_index=None, disabled=None, dns_search_domains=None, dns_servers=None, gateway_address=None, interface_name=None, interface_type=None, mac_address=None, mtu=None, no_auto_start=None, parent_interface_name=None, provider_address_id=None, provider_id=None, provider_space_id=None, provider_subnet_id=None, provider_vlan_id=None, vlan_tag=None, **unknown_fields): + ''' + address : str + cidr : str + config_type : str + device_index : int + disabled : bool - dns_search_domains : typing.Sequence<+T_co>[str] - dns_servers : typing.Sequence<+T_co>[str] ++ dns_search_domains : typing.Sequence[str] ++ dns_servers : typing.Sequence[str] + gateway_address : str + interface_name : str + interface_type : str + mac_address : str + mtu : int + no_auto_start : bool + parent_interface_name : str + provider_address_id : str + provider_id : str + provider_space_id : str + provider_subnet_id : str + provider_vlan_id : str + vlan_tag : int + ''' + self.address = address + self.cidr = cidr + self.config_type = config_type + self.device_index = device_index + self.disabled = disabled + self.dns_search_domains = dns_search_domains + self.dns_servers = dns_servers + self.gateway_address = gateway_address + self.interface_name = interface_name + self.interface_type = interface_type + self.mac_address = mac_address + self.mtu = mtu + self.no_auto_start = no_auto_start + self.parent_interface_name = parent_interface_name + self.provider_address_id = provider_address_id + self.provider_id = provider_id + self.provider_space_id = provider_space_id + self.provider_subnet_id = provider_subnet_id + self.provider_vlan_id = provider_vlan_id + self.vlan_tag = vlan_tag + + + +class NetworkInfo(Type): + _toSchema = {'addresses': 'addresses', 'interface_name': 'interface-name', 'mac_address': 'mac-address'} + _toPy = {'addresses': 'addresses', 'interface-name': 'interface_name', 'mac-address': 'mac_address'} + def __init__(self, addresses=None, interface_name=None, mac_address=None, **unknown_fields): + ''' - addresses : typing.Sequence<+T_co>[~InterfaceAddress]<~InterfaceAddress> ++ addresses : typing.Sequence[~InterfaceAddress] + interface_name : str + mac_address : str + ''' + self.addresses = [InterfaceAddress.from_json(o) for o in addresses or []] + self.interface_name = interface_name + self.mac_address = mac_address + + + +class NetworkInfoParams(Type): + _toSchema = {'bindings': 'bindings', 'unit': 'unit'} + _toPy = {'bindings': 'bindings', 'unit': 'unit'} + def __init__(self, bindings=None, unit=None, **unknown_fields): + ''' - bindings : typing.Sequence<+T_co>[str] ++ bindings : typing.Sequence[str] + unit : str + ''' + self.bindings = bindings + self.unit = unit + + + +class NetworkInfoResult(Type): + _toSchema = {'error': 'error', 'network_info': 'network-info'} + _toPy = {'error': 'error', 'network-info': 'network_info'} + def __init__(self, error=None, network_info=None, **unknown_fields): + ''' + error : Error - network_info : typing.Sequence<+T_co>[~NetworkInfo]<~NetworkInfo> ++ network_info : typing.Sequence[~NetworkInfo] + ''' + self.error = Error.from_json(error) if error else None + self.network_info = [NetworkInfo.from_json(o) for o in network_info or []] + + + +class NetworkInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult> ++ results : typing.Mapping[str, ~NetworkInfoResult] + ''' + self.results = results + + + +class NetworkInterface(Type): + _toSchema = {'dns_nameservers': 'dns-nameservers', 'gateway': 'gateway', 'ip_addresses': 'ip-addresses', 'is_up': 'is-up', 'mac_address': 'mac-address', 'space': 'space'} + _toPy = {'dns-nameservers': 'dns_nameservers', 'gateway': 'gateway', 'ip-addresses': 'ip_addresses', 'is-up': 'is_up', 'mac-address': 'mac_address', 'space': 'space'} + def __init__(self, dns_nameservers=None, gateway=None, ip_addresses=None, is_up=None, mac_address=None, space=None, **unknown_fields): + ''' - dns_nameservers : typing.Sequence<+T_co>[str] ++ dns_nameservers : typing.Sequence[str] + gateway : str - ip_addresses : typing.Sequence<+T_co>[str] ++ ip_addresses : typing.Sequence[str] + is_up : bool + mac_address : str + space : str + ''' + self.dns_nameservers = dns_nameservers + self.gateway = gateway + self.ip_addresses = ip_addresses + self.is_up = is_up + self.mac_address = mac_address + self.space = space + + + +class NetworkRoute(Type): + _toSchema = {'destination_cidr': 'destination-cidr', 'gateway_ip': 'gateway-ip', 'metric': 'metric'} + _toPy = {'destination-cidr': 'destination_cidr', 'gateway-ip': 'gateway_ip', 'metric': 'metric'} + def __init__(self, destination_cidr=None, gateway_ip=None, metric=None, **unknown_fields): + ''' + destination_cidr : str + gateway_ip : str + metric : int + ''' + self.destination_cidr = destination_cidr + self.gateway_ip = gateway_ip + self.metric = metric + + + +class NotifyWatchResult(Type): + _toSchema = {'error': 'error', 'notifywatcherid': 'NotifyWatcherId'} + _toPy = {'NotifyWatcherId': 'notifywatcherid', 'error': 'error'} + def __init__(self, notifywatcherid=None, error=None, **unknown_fields): + ''' + notifywatcherid : str + error : Error + ''' + self.notifywatcherid = notifywatcherid + self.error = Error.from_json(error) if error else None + + + +class NotifyWatchResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult> ++ results : typing.Sequence[~NotifyWatchResult] + ''' + self.results = [NotifyWatchResult.from_json(o) for o in results or []] + + + +class Number(Type): + _toSchema = {'build': 'Build', 'major': 'Major', 'minor': 'Minor', 'patch': 'Patch', 'tag': 'Tag'} + _toPy = {'Build': 'build', 'Major': 'major', 'Minor': 'minor', 'Patch': 'patch', 'Tag': 'tag'} + def __init__(self, build=None, major=None, minor=None, patch=None, tag=None, **unknown_fields): + ''' + build : int + major : int + minor : int + patch : int + tag : str + ''' + self.build = build + self.major = major + self.minor = minor + self.patch = patch + self.tag = tag + + + ++class OfferArg(Type): ++ _toSchema = {'macaroons': 'macaroons', 'offer_uuid': 'offer-uuid'} ++ _toPy = {'macaroons': 'macaroons', 'offer-uuid': 'offer_uuid'} ++ def __init__(self, macaroons=None, offer_uuid=None, **unknown_fields): ++ ''' ++ macaroons : typing.Sequence[~Macaroon] ++ offer_uuid : str ++ ''' ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.offer_uuid = offer_uuid ++ ++ ++ ++class OfferArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~OfferArg] ++ ''' ++ self.args = [OfferArg.from_json(o) for o in args or []] ++ ++ ++ ++class OfferConnection(Type): ++ _toSchema = {'endpoint': 'endpoint', 'ingress_subnets': 'ingress-subnets', 'relation_id': 'relation-id', 'source_model_tag': 'source-model-tag', 'status': 'status', 'username': 'username'} ++ _toPy = {'endpoint': 'endpoint', 'ingress-subnets': 'ingress_subnets', 'relation-id': 'relation_id', 'source-model-tag': 'source_model_tag', 'status': 'status', 'username': 'username'} ++ def __init__(self, endpoint=None, ingress_subnets=None, relation_id=None, source_model_tag=None, status=None, username=None, **unknown_fields): ++ ''' ++ endpoint : str ++ ingress_subnets : typing.Sequence[str] ++ relation_id : int ++ source_model_tag : str ++ status : EntityStatus ++ username : str ++ ''' ++ self.endpoint = endpoint ++ self.ingress_subnets = ingress_subnets ++ self.relation_id = relation_id ++ self.source_model_tag = source_model_tag ++ self.status = EntityStatus.from_json(status) if status else None ++ self.username = username ++ ++ ++ ++class OfferFilter(Type): ++ _toSchema = {'allowed_users': 'allowed-users', 'application_description': 'application-description', 'application_name': 'application-name', 'application_user': 'application-user', 'connected_users': 'connected-users', 'endpoints': 'endpoints', 'model_name': 'model-name', 'offer_name': 'offer-name', 'owner_name': 'owner-name'} ++ _toPy = {'allowed-users': 'allowed_users', 'application-description': 'application_description', 'application-name': 'application_name', 'application-user': 'application_user', 'connected-users': 'connected_users', 'endpoints': 'endpoints', 'model-name': 'model_name', 'offer-name': 'offer_name', 'owner-name': 'owner_name'} ++ def __init__(self, allowed_users=None, application_description=None, application_name=None, application_user=None, connected_users=None, endpoints=None, model_name=None, offer_name=None, owner_name=None, **unknown_fields): ++ ''' ++ allowed_users : typing.Sequence[str] ++ application_description : str ++ application_name : str ++ application_user : str ++ connected_users : typing.Sequence[str] ++ endpoints : typing.Sequence[~EndpointFilterAttributes] ++ model_name : str ++ offer_name : str ++ owner_name : str ++ ''' ++ self.allowed_users = allowed_users ++ self.application_description = application_description ++ self.application_name = application_name ++ self.application_user = application_user ++ self.connected_users = connected_users ++ self.endpoints = [EndpointFilterAttributes.from_json(o) for o in endpoints or []] ++ self.model_name = model_name ++ self.offer_name = offer_name ++ self.owner_name = owner_name ++ ++ ++ ++class OfferFilters(Type): ++ _toSchema = {'filters': 'Filters'} ++ _toPy = {'Filters': 'filters'} ++ def __init__(self, filters=None, **unknown_fields): ++ ''' ++ filters : typing.Sequence[~OfferFilter] ++ ''' ++ self.filters = [OfferFilter.from_json(o) for o in filters or []] ++ ++ ++ ++class OfferStatusChange(Type): ++ _toSchema = {'offer_name': 'offer-name', 'status': 'status'} ++ _toPy = {'offer-name': 'offer_name', 'status': 'status'} ++ def __init__(self, offer_name=None, status=None, **unknown_fields): ++ ''' ++ offer_name : str ++ status : EntityStatus ++ ''' ++ self.offer_name = offer_name ++ self.status = EntityStatus.from_json(status) if status else None ++ ++ ++ ++class OfferStatusWatchResult(Type): ++ _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} ++ _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} ++ def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~OfferStatusChange] ++ error : Error ++ watcher_id : str ++ ''' ++ self.changes = [OfferStatusChange.from_json(o) for o in changes or []] ++ self.error = Error.from_json(error) if error else None ++ self.watcher_id = watcher_id ++ ++ ++ ++class OfferStatusWatchResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~OfferStatusWatchResult] ++ ''' ++ self.results = [OfferStatusWatchResult.from_json(o) for o in results or []] ++ ++ ++ ++class OfferURLs(Type): ++ _toSchema = {'offer_urls': 'offer-urls'} ++ _toPy = {'offer-urls': 'offer_urls'} ++ def __init__(self, offer_urls=None, **unknown_fields): ++ ''' ++ offer_urls : typing.Sequence[str] ++ ''' ++ self.offer_urls = offer_urls ++ ++ ++ ++class OfferUserDetails(Type): ++ _toSchema = {'access': 'access', 'display_name': 'display-name', 'user': 'user'} ++ _toPy = {'access': 'access', 'display-name': 'display_name', 'user': 'user'} ++ def __init__(self, access=None, display_name=None, user=None, **unknown_fields): ++ ''' ++ access : str ++ display_name : str ++ user : str ++ ''' ++ self.access = access ++ self.display_name = display_name ++ self.user = user ++ ++ ++ ++class OperatorProvisioningInfo(Type): ++ _toSchema = {'api_addresses': 'api-addresses', 'charm_storage': 'charm-storage', 'image_path': 'image-path', 'tags': 'tags', 'version': 'version'} ++ _toPy = {'api-addresses': 'api_addresses', 'charm-storage': 'charm_storage', 'image-path': 'image_path', 'tags': 'tags', 'version': 'version'} ++ def __init__(self, api_addresses=None, charm_storage=None, image_path=None, tags=None, version=None, **unknown_fields): ++ ''' ++ api_addresses : typing.Sequence[str] ++ charm_storage : KubernetesFilesystemParams ++ image_path : str ++ tags : typing.Mapping[str, str] ++ version : Number ++ ''' ++ self.api_addresses = api_addresses ++ self.charm_storage = KubernetesFilesystemParams.from_json(charm_storage) if charm_storage else None ++ self.image_path = image_path ++ self.tags = tags ++ self.version = Number.from_json(version) if version else None ++ ++ ++ +class Payload(Type): + _toSchema = {'class_': 'class', 'id_': 'id', 'labels': 'labels', 'machine': 'machine', 'status': 'status', 'type_': 'type', 'unit': 'unit'} + _toPy = {'class': 'class_', 'id': 'id_', 'labels': 'labels', 'machine': 'machine', 'status': 'status', 'type': 'type_', 'unit': 'unit'} + def __init__(self, class_=None, id_=None, labels=None, machine=None, status=None, type_=None, unit=None, **unknown_fields): + ''' + class_ : str + id_ : str - labels : typing.Sequence<+T_co>[str] ++ labels : typing.Sequence[str] + machine : str + status : str + type_ : str + unit : str + ''' + self.class_ = class_ + self.id_ = id_ + self.labels = labels + self.machine = machine + self.status = status + self.type_ = type_ + self.unit = unit + + + +class PayloadListArgs(Type): + _toSchema = {'patterns': 'patterns'} + _toPy = {'patterns': 'patterns'} + def __init__(self, patterns=None, **unknown_fields): + ''' - patterns : typing.Sequence<+T_co>[str] ++ patterns : typing.Sequence[str] + ''' + self.patterns = patterns + + + +class PayloadListResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~Payload]<~Payload> ++ results : typing.Sequence[~Payload] + ''' + self.results = [Payload.from_json(o) for o in results or []] + + + +class PayloadResult(Type): + _toSchema = {'entity': 'Entity', 'error': 'error', 'not_found': 'not-found', 'payload': 'payload'} + _toPy = {'Entity': 'entity', 'error': 'error', 'not-found': 'not_found', 'payload': 'payload'} + def __init__(self, entity=None, error=None, not_found=None, payload=None, **unknown_fields): + ''' + entity : Entity + error : Error + not_found : bool + payload : Payload + ''' + self.entity = Entity.from_json(entity) if entity else None + self.error = Error.from_json(error) if error else None + self.not_found = not_found + self.payload = Payload.from_json(payload) if payload else None + + + +class PayloadResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult> ++ results : typing.Sequence[~PayloadResult] + ''' + self.results = [PayloadResult.from_json(o) for o in results or []] + + + +class PhaseResult(Type): + _toSchema = {'error': 'error', 'phase': 'phase'} + _toPy = {'error': 'error', 'phase': 'phase'} + def __init__(self, error=None, phase=None, **unknown_fields): + ''' + error : Error + phase : str + ''' + self.error = Error.from_json(error) if error else None + self.phase = phase + + + +class PhaseResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult> ++ results : typing.Sequence[~PhaseResult] + ''' + self.results = [PhaseResult.from_json(o) for o in results or []] + + + ++class PinApplicationResult(Type): ++ _toSchema = {'application_name': 'application-name', 'error': 'error'} ++ _toPy = {'application-name': 'application_name', 'error': 'error'} ++ def __init__(self, application_name=None, error=None, **unknown_fields): ++ ''' ++ application_name : str ++ error : Error ++ ''' ++ self.application_name = application_name ++ self.error = Error.from_json(error) if error else None ++ ++ ++ ++class PinApplicationsResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~PinApplicationResult] ++ ''' ++ self.results = [PinApplicationResult.from_json(o) for o in results or []] ++ ++ ++ ++class PinnedLeadershipResult(Type): ++ _toSchema = {'result': 'result'} ++ _toPy = {'result': 'result'} ++ def __init__(self, result=None, **unknown_fields): ++ ''' ++ result : typing.Sequence[str] ++ ''' ++ self.result = result ++ ++ ++ +class Placement(Type): + _toSchema = {'directive': 'directive', 'scope': 'scope'} + _toPy = {'directive': 'directive', 'scope': 'scope'} + def __init__(self, directive=None, scope=None, **unknown_fields): + ''' + directive : str + scope : str + ''' + self.directive = directive + self.scope = scope + + + +class PortRange(Type): + _toSchema = {'from_port': 'from-port', 'protocol': 'protocol', 'to_port': 'to-port'} + _toPy = {'from-port': 'from_port', 'protocol': 'protocol', 'to-port': 'to_port'} + def __init__(self, from_port=None, protocol=None, to_port=None, **unknown_fields): + ''' + from_port : int + protocol : str + to_port : int + ''' + self.from_port = from_port + self.protocol = protocol + self.to_port = to_port + + + +class PrivateAddress(Type): + _toSchema = {'target': 'target'} + _toPy = {'target': 'target'} + def __init__(self, target=None, **unknown_fields): + ''' + target : str + ''' + self.target = target + + + +class PrivateAddressResults(Type): + _toSchema = {'private_address': 'private-address'} + _toPy = {'private-address': 'private_address'} + def __init__(self, private_address=None, **unknown_fields): + ''' + private_address : str + ''' + self.private_address = private_address + + + ++class ProfileChangeResult(Type): ++ _toSchema = {'error': 'error', 'new_profile_name': 'new-profile-name', 'old_profile_name': 'old-profile-name', 'profile': 'profile', 'subordinate': 'subordinate'} ++ _toPy = {'error': 'error', 'new-profile-name': 'new_profile_name', 'old-profile-name': 'old_profile_name', 'profile': 'profile', 'subordinate': 'subordinate'} ++ def __init__(self, error=None, new_profile_name=None, old_profile_name=None, profile=None, subordinate=None, **unknown_fields): ++ ''' ++ error : Error ++ new_profile_name : str ++ old_profile_name : str ++ profile : CharmLXDProfile ++ subordinate : bool ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.new_profile_name = new_profile_name ++ self.old_profile_name = old_profile_name ++ self.profile = CharmLXDProfile.from_json(profile) if profile else None ++ self.subordinate = subordinate ++ ++ ++ ++class ProfileChangeResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ProfileChangeResult] ++ ''' ++ self.results = [ProfileChangeResult.from_json(o) for o in results or []] ++ ++ ++ +class ProviderInterfaceInfo(Type): + _toSchema = {'interface_name': 'interface-name', 'mac_address': 'mac-address', 'provider_id': 'provider-id'} + _toPy = {'interface-name': 'interface_name', 'mac-address': 'mac_address', 'provider-id': 'provider_id'} + def __init__(self, interface_name=None, mac_address=None, provider_id=None, **unknown_fields): + ''' + interface_name : str + mac_address : str + provider_id : str + ''' + self.interface_name = interface_name + self.mac_address = mac_address + self.provider_id = provider_id + + + +class ProviderInterfaceInfoResult(Type): + _toSchema = {'error': 'error', 'interfaces': 'interfaces', 'machine_tag': 'machine-tag'} + _toPy = {'error': 'error', 'interfaces': 'interfaces', 'machine-tag': 'machine_tag'} + def __init__(self, error=None, interfaces=None, machine_tag=None, **unknown_fields): + ''' + error : Error - interfaces : typing.Sequence<+T_co>[~ProviderInterfaceInfo]<~ProviderInterfaceInfo> ++ interfaces : typing.Sequence[~ProviderInterfaceInfo] + machine_tag : str + ''' + self.error = Error.from_json(error) if error else None + self.interfaces = [ProviderInterfaceInfo.from_json(o) for o in interfaces or []] + self.machine_tag = machine_tag + + + +class ProviderInterfaceInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult> ++ results : typing.Sequence[~ProviderInterfaceInfoResult] + ''' + self.results = [ProviderInterfaceInfoResult.from_json(o) for o in results or []] + + + +class ProviderSpace(Type): + _toSchema = {'error': 'error', 'name': 'name', 'provider_id': 'provider-id', 'subnets': 'subnets'} + _toPy = {'error': 'error', 'name': 'name', 'provider-id': 'provider_id', 'subnets': 'subnets'} + def __init__(self, error=None, name=None, provider_id=None, subnets=None, **unknown_fields): + ''' + error : Error + name : str + provider_id : str - subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ subnets : typing.Sequence[~Subnet] + ''' + self.error = Error.from_json(error) if error else None + self.name = name + self.provider_id = provider_id + self.subnets = [Subnet.from_json(o) for o in subnets or []] + + + +class ProvisioningInfo(Type): + _toSchema = {'constraints': 'constraints', 'controller_config': 'controller-config', 'endpoint_bindings': 'endpoint-bindings', 'image_metadata': 'image-metadata', 'jobs': 'jobs', 'placement': 'placement', 'series': 'series', 'subnets_to_zones': 'subnets-to-zones', 'tags': 'tags', 'volumes': 'volumes'} + _toPy = {'constraints': 'constraints', 'controller-config': 'controller_config', 'endpoint-bindings': 'endpoint_bindings', 'image-metadata': 'image_metadata', 'jobs': 'jobs', 'placement': 'placement', 'series': 'series', 'subnets-to-zones': 'subnets_to_zones', 'tags': 'tags', 'volumes': 'volumes'} + def __init__(self, constraints=None, controller_config=None, endpoint_bindings=None, image_metadata=None, jobs=None, placement=None, series=None, subnets_to_zones=None, tags=None, volumes=None, **unknown_fields): + ''' + constraints : Value - controller_config : typing.Mapping<~KT, +VT_co>[str, typing.Any] - endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str] - image_metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata> - jobs : typing.Sequence<+T_co>[str] ++ controller_config : typing.Mapping[str, typing.Any] ++ endpoint_bindings : typing.Mapping[str, str] ++ image_metadata : typing.Sequence[~CloudImageMetadata] ++ jobs : typing.Sequence[str] + placement : str + series : str - subnets_to_zones : typing.Sequence<+T_co>[str] - tags : typing.Mapping<~KT, +VT_co>[str, str] - volumes : typing.Sequence<+T_co>[~VolumeParams]<~VolumeParams> ++ subnets_to_zones : typing.Sequence[str] ++ tags : typing.Mapping[str, str] ++ volumes : typing.Sequence[~VolumeParams] + ''' + self.constraints = Value.from_json(constraints) if constraints else None + self.controller_config = controller_config + self.endpoint_bindings = endpoint_bindings + self.image_metadata = [CloudImageMetadata.from_json(o) for o in image_metadata or []] + self.jobs = jobs + self.placement = placement + self.series = series + self.subnets_to_zones = subnets_to_zones + self.tags = tags + self.volumes = [VolumeParams.from_json(o) for o in volumes or []] + + + +class ProvisioningInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : ProvisioningInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = ProvisioningInfo.from_json(result) if result else None + + + +class ProvisioningInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult> ++ results : typing.Sequence[~ProvisioningInfoResult] + ''' + self.results = [ProvisioningInfoResult.from_json(o) for o in results or []] + + + +class ProvisioningScriptParams(Type): + _toSchema = {'data_dir': 'data-dir', 'disable_package_commands': 'disable-package-commands', 'machine_id': 'machine-id', 'nonce': 'nonce'} + _toPy = {'data-dir': 'data_dir', 'disable-package-commands': 'disable_package_commands', 'machine-id': 'machine_id', 'nonce': 'nonce'} + def __init__(self, data_dir=None, disable_package_commands=None, machine_id=None, nonce=None, **unknown_fields): + ''' + data_dir : str + disable_package_commands : bool + machine_id : str + nonce : str + ''' + self.data_dir = data_dir + self.disable_package_commands = disable_package_commands + self.machine_id = machine_id + self.nonce = nonce + + + +class ProvisioningScriptResult(Type): + _toSchema = {'script': 'script'} + _toPy = {'script': 'script'} + def __init__(self, script=None, **unknown_fields): + ''' + script : str + ''' + self.script = script + + + +class ProxyConfig(Type): + _toSchema = {'ftp': 'ftp', 'http': 'http', 'https': 'https', 'no_proxy': 'no-proxy'} + _toPy = {'ftp': 'ftp', 'http': 'http', 'https': 'https', 'no-proxy': 'no_proxy'} + def __init__(self, ftp=None, http=None, https=None, no_proxy=None, **unknown_fields): + ''' + ftp : str + http : str + https : str + no_proxy : str + ''' + self.ftp = ftp + self.http = http + self.https = https + self.no_proxy = no_proxy + + + +class ProxyConfigResult(Type): + _toSchema = {'apt_proxy_settings': 'apt-proxy-settings', 'error': 'error', 'proxy_settings': 'proxy-settings'} + _toPy = {'apt-proxy-settings': 'apt_proxy_settings', 'error': 'error', 'proxy-settings': 'proxy_settings'} + def __init__(self, apt_proxy_settings=None, error=None, proxy_settings=None, **unknown_fields): + ''' + apt_proxy_settings : ProxyConfig + error : Error + proxy_settings : ProxyConfig + ''' + self.apt_proxy_settings = ProxyConfig.from_json(apt_proxy_settings) if apt_proxy_settings else None + self.error = Error.from_json(error) if error else None + self.proxy_settings = ProxyConfig.from_json(proxy_settings) if proxy_settings else None + + + +class ProxyConfigResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult> ++ results : typing.Sequence[~ProxyConfigResult] + ''' + self.results = [ProxyConfigResult.from_json(o) for o in results or []] + + + +class PublicAddress(Type): + _toSchema = {'target': 'target'} + _toPy = {'target': 'target'} + def __init__(self, target=None, **unknown_fields): + ''' + target : str + ''' + self.target = target + + + +class PublicAddressResults(Type): + _toSchema = {'public_address': 'public-address'} + _toPy = {'public-address': 'public_address'} + def __init__(self, public_address=None, **unknown_fields): + ''' + public_address : str + ''' + self.public_address = public_address + + + ++class QueryApplicationOffersResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ApplicationOfferAdminDetails] ++ ''' ++ self.results = [ApplicationOfferAdminDetails.from_json(o) for o in results or []] ++ ++ ++ +class RebootActionResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : str + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class RebootActionResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult> ++ results : typing.Sequence[~RebootActionResult] + ''' + self.results = [RebootActionResult.from_json(o) for o in results or []] + + + +class RegionDefaults(Type): + _toSchema = {'region_name': 'region-name', 'value': 'value'} + _toPy = {'region-name': 'region_name', 'value': 'value'} + def __init__(self, region_name=None, value=None, **unknown_fields): + ''' + region_name : str - value : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ value : typing.Mapping[str, typing.Any] + ''' + self.region_name = region_name + self.value = value + + + ++class RegisterRemoteRelationArg(Type): ++ _toSchema = {'application_token': 'application-token', 'local_endpoint_name': 'local-endpoint-name', 'macaroons': 'macaroons', 'offer_uuid': 'offer-uuid', 'relation_token': 'relation-token', 'remote_endpoint': 'remote-endpoint', 'remote_space': 'remote-space', 'source_model_tag': 'source-model-tag'} ++ _toPy = {'application-token': 'application_token', 'local-endpoint-name': 'local_endpoint_name', 'macaroons': 'macaroons', 'offer-uuid': 'offer_uuid', 'relation-token': 'relation_token', 'remote-endpoint': 'remote_endpoint', 'remote-space': 'remote_space', 'source-model-tag': 'source_model_tag'} ++ def __init__(self, application_token=None, local_endpoint_name=None, macaroons=None, offer_uuid=None, relation_token=None, remote_endpoint=None, remote_space=None, source_model_tag=None, **unknown_fields): ++ ''' ++ application_token : str ++ local_endpoint_name : str ++ macaroons : typing.Sequence[~Macaroon] ++ offer_uuid : str ++ relation_token : str ++ remote_endpoint : RemoteEndpoint ++ remote_space : RemoteSpace ++ source_model_tag : str ++ ''' ++ self.application_token = application_token ++ self.local_endpoint_name = local_endpoint_name ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.offer_uuid = offer_uuid ++ self.relation_token = relation_token ++ self.remote_endpoint = RemoteEndpoint.from_json(remote_endpoint) if remote_endpoint else None ++ self.remote_space = RemoteSpace.from_json(remote_space) if remote_space else None ++ self.source_model_tag = source_model_tag ++ ++ ++ ++class RegisterRemoteRelationArgs(Type): ++ _toSchema = {'relations': 'relations'} ++ _toPy = {'relations': 'relations'} ++ def __init__(self, relations=None, **unknown_fields): ++ ''' ++ relations : typing.Sequence[~RegisterRemoteRelationArg] ++ ''' ++ self.relations = [RegisterRemoteRelationArg.from_json(o) for o in relations or []] ++ ++ ++ ++class RegisterRemoteRelationResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : RemoteRelationDetails ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = RemoteRelationDetails.from_json(result) if result else None ++ ++ ++ ++class RegisterRemoteRelationResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RegisterRemoteRelationResult] ++ ''' ++ self.results = [RegisterRemoteRelationResult.from_json(o) for o in results or []] ++ ++ ++ +class RelationChange(Type): + _toSchema = {'changedunits': 'changedunits', 'departedunits': 'departedunits', 'id_': 'id', 'life': 'life'} + _toPy = {'changedunits': 'changedunits', 'departedunits': 'departedunits', 'id': 'id_', 'life': 'life'} + def __init__(self, changedunits=None, departedunits=None, id_=None, life=None, **unknown_fields): + ''' - changedunits : typing.Mapping<~KT, +VT_co>[str, ~RelationUnitChange]<~RelationUnitChange> - departedunits : typing.Sequence<+T_co>[str] ++ changedunits : typing.Mapping[str, ~RelationUnitChange] ++ departedunits : typing.Sequence[str] + id_ : int + life : str + ''' + self.changedunits = changedunits + self.departedunits = departedunits + self.id_ = id_ + self.life = life + + + +class RelationIds(Type): + _toSchema = {'relation_ids': 'relation-ids'} + _toPy = {'relation-ids': 'relation_ids'} + def __init__(self, relation_ids=None, **unknown_fields): + ''' - relation_ids : typing.Sequence<+T_co>[int] ++ relation_ids : typing.Sequence[int] + ''' + self.relation_ids = relation_ids + + + ++class RelationLifeSuspendedStatusChange(Type): ++ _toSchema = {'key': 'key', 'life': 'life', 'suspended': 'suspended', 'suspended_reason': 'suspended-reason'} ++ _toPy = {'key': 'key', 'life': 'life', 'suspended': 'suspended', 'suspended-reason': 'suspended_reason'} ++ def __init__(self, key=None, life=None, suspended=None, suspended_reason=None, **unknown_fields): ++ ''' ++ key : str ++ life : str ++ suspended : bool ++ suspended_reason : str ++ ''' ++ self.key = key ++ self.life = life ++ self.suspended = suspended ++ self.suspended_reason = suspended_reason ++ ++ ++ ++class RelationLifeSuspendedStatusWatchResult(Type): ++ _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} ++ _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} ++ def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~RelationLifeSuspendedStatusChange] ++ error : Error ++ watcher_id : str ++ ''' ++ self.changes = [RelationLifeSuspendedStatusChange.from_json(o) for o in changes or []] ++ self.error = Error.from_json(error) if error else None ++ self.watcher_id = watcher_id ++ ++ ++ +class RelationResult(Type): + _toSchema = {'endpoint': 'endpoint', 'error': 'error', 'id_': 'id', 'key': 'key', 'life': 'life'} + _toPy = {'endpoint': 'endpoint', 'error': 'error', 'id': 'id_', 'key': 'key', 'life': 'life'} + def __init__(self, endpoint=None, error=None, id_=None, key=None, life=None, **unknown_fields): + ''' + endpoint : Endpoint + error : Error + id_ : int + key : str + life : str + ''' + self.endpoint = Endpoint.from_json(endpoint) if endpoint else None + self.error = Error.from_json(error) if error else None + self.id_ = id_ + self.key = key + self.life = life + + + +class RelationResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~RelationResult]<~RelationResult> ++ results : typing.Sequence[~RelationResult] + ''' + self.results = [RelationResult.from_json(o) for o in results or []] + + + +class RelationStatus(Type): + _toSchema = {'endpoints': 'endpoints', 'id_': 'id', 'interface': 'interface', 'key': 'key', 'scope': 'scope'} + _toPy = {'endpoints': 'endpoints', 'id': 'id_', 'interface': 'interface', 'key': 'key', 'scope': 'scope'} + def __init__(self, endpoints=None, id_=None, interface=None, key=None, scope=None, **unknown_fields): + ''' - endpoints : typing.Sequence<+T_co>[~EndpointStatus]<~EndpointStatus> ++ endpoints : typing.Sequence[~EndpointStatus] + id_ : int + interface : str + key : str + scope : str + ''' + self.endpoints = [EndpointStatus.from_json(o) for o in endpoints or []] + self.id_ = id_ + self.interface = interface + self.key = key + self.scope = scope + + + ++class RelationStatusArg(Type): ++ _toSchema = {'message': 'message', 'relation_id': 'relation-id', 'status': 'status', 'unit_tag': 'unit-tag'} ++ _toPy = {'message': 'message', 'relation-id': 'relation_id', 'status': 'status', 'unit-tag': 'unit_tag'} ++ def __init__(self, message=None, relation_id=None, status=None, unit_tag=None, **unknown_fields): ++ ''' ++ message : str ++ relation_id : int ++ status : str ++ unit_tag : str ++ ''' ++ self.message = message ++ self.relation_id = relation_id ++ self.status = status ++ self.unit_tag = unit_tag ++ ++ ++ ++class RelationStatusArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~RelationStatusArg] ++ ''' ++ self.args = [RelationStatusArg.from_json(o) for o in args or []] ++ ++ ++ ++class RelationStatusWatchResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RelationLifeSuspendedStatusWatchResult] ++ ''' ++ self.results = [RelationLifeSuspendedStatusWatchResult.from_json(o) for o in results or []] ++ ++ ++ ++class RelationSuspendedArg(Type): ++ _toSchema = {'message': 'message', 'relation_id': 'relation-id', 'suspended': 'suspended'} ++ _toPy = {'message': 'message', 'relation-id': 'relation_id', 'suspended': 'suspended'} ++ def __init__(self, message=None, relation_id=None, suspended=None, **unknown_fields): ++ ''' ++ message : str ++ relation_id : int ++ suspended : bool ++ ''' ++ self.message = message ++ self.relation_id = relation_id ++ self.suspended = suspended ++ ++ ++ ++class RelationSuspendedArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~RelationSuspendedArg] ++ ''' ++ self.args = [RelationSuspendedArg.from_json(o) for o in args or []] ++ ++ ++ +class RelationUnit(Type): + _toSchema = {'relation': 'relation', 'unit': 'unit'} + _toPy = {'relation': 'relation', 'unit': 'unit'} + def __init__(self, relation=None, unit=None, **unknown_fields): + ''' + relation : str + unit : str + ''' + self.relation = relation + self.unit = unit + + + +class RelationUnitChange(Type): + _toSchema = {'settings': 'settings'} + _toPy = {'settings': 'settings'} + def __init__(self, settings=None, **unknown_fields): + ''' - settings : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ settings : typing.Mapping[str, typing.Any] + ''' + self.settings = settings + + + +class RelationUnitPair(Type): + _toSchema = {'local_unit': 'local-unit', 'relation': 'relation', 'remote_unit': 'remote-unit'} + _toPy = {'local-unit': 'local_unit', 'relation': 'relation', 'remote-unit': 'remote_unit'} + def __init__(self, local_unit=None, relation=None, remote_unit=None, **unknown_fields): + ''' + local_unit : str + relation : str + remote_unit : str + ''' + self.local_unit = local_unit + self.relation = relation + self.remote_unit = remote_unit + + + +class RelationUnitPairs(Type): + _toSchema = {'relation_unit_pairs': 'relation-unit-pairs'} + _toPy = {'relation-unit-pairs': 'relation_unit_pairs'} + def __init__(self, relation_unit_pairs=None, **unknown_fields): + ''' - relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair> ++ relation_unit_pairs : typing.Sequence[~RelationUnitPair] + ''' + self.relation_unit_pairs = [RelationUnitPair.from_json(o) for o in relation_unit_pairs or []] + + + +class RelationUnitSettings(Type): + _toSchema = {'relation': 'relation', 'settings': 'settings', 'unit': 'unit'} + _toPy = {'relation': 'relation', 'settings': 'settings', 'unit': 'unit'} + def __init__(self, relation=None, settings=None, unit=None, **unknown_fields): + ''' + relation : str - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + unit : str + ''' + self.relation = relation + self.settings = settings + self.unit = unit + + + ++class RelationUnitStatus(Type): ++ _toSchema = {'in_scope': 'in-scope', 'relation_tag': 'relation-tag', 'suspended': 'suspended'} ++ _toPy = {'in-scope': 'in_scope', 'relation-tag': 'relation_tag', 'suspended': 'suspended'} ++ def __init__(self, in_scope=None, relation_tag=None, suspended=None, **unknown_fields): ++ ''' ++ in_scope : bool ++ relation_tag : str ++ suspended : bool ++ ''' ++ self.in_scope = in_scope ++ self.relation_tag = relation_tag ++ self.suspended = suspended ++ ++ ++ ++class RelationUnitStatusResult(Type): ++ _toSchema = {'error': 'error', 'results': 'results'} ++ _toPy = {'error': 'error', 'results': 'results'} ++ def __init__(self, error=None, results=None, **unknown_fields): ++ ''' ++ error : Error ++ results : typing.Sequence[~RelationUnitStatus] ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.results = [RelationUnitStatus.from_json(o) for o in results or []] ++ ++ ++ ++class RelationUnitStatusResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RelationUnitStatusResult] ++ ''' ++ self.results = [RelationUnitStatusResult.from_json(o) for o in results or []] ++ ++ ++ +class RelationUnits(Type): + _toSchema = {'relation_units': 'relation-units'} + _toPy = {'relation-units': 'relation_units'} + def __init__(self, relation_units=None, **unknown_fields): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit> ++ relation_units : typing.Sequence[~RelationUnit] + ''' + self.relation_units = [RelationUnit.from_json(o) for o in relation_units or []] + + + +class RelationUnitsChange(Type): + _toSchema = {'changed': 'changed', 'departed': 'departed'} + _toPy = {'changed': 'changed', 'departed': 'departed'} + def __init__(self, changed=None, departed=None, **unknown_fields): + ''' - changed : typing.Mapping<~KT, +VT_co>[str, ~UnitSettings]<~UnitSettings> - departed : typing.Sequence<+T_co>[str] ++ changed : typing.Mapping[str, ~UnitSettings] ++ departed : typing.Sequence[str] + ''' + self.changed = changed + self.departed = departed + + + +class RelationUnitsSettings(Type): + _toSchema = {'relation_units': 'relation-units'} + _toPy = {'relation-units': 'relation_units'} + def __init__(self, relation_units=None, **unknown_fields): + ''' - relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings> ++ relation_units : typing.Sequence[~RelationUnitSettings] + ''' + self.relation_units = [RelationUnitSettings.from_json(o) for o in relation_units or []] + + + +class RelationUnitsWatchResult(Type): + _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} + _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} + def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): + ''' + changes : RelationUnitsChange + error : Error + watcher_id : str + ''' + self.changes = RelationUnitsChange.from_json(changes) if changes else None + self.error = Error.from_json(error) if error else None + self.watcher_id = watcher_id + + + +class RelationUnitsWatchResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult> ++ results : typing.Sequence[~RelationUnitsWatchResult] + ''' + self.results = [RelationUnitsWatchResult.from_json(o) for o in results or []] + + + ++class RemoteApplication(Type): ++ _toSchema = {'is_consumer_proxy': 'is-consumer-proxy', 'life': 'life', 'macaroon': 'macaroon', 'model_uuid': 'model-uuid', 'name': 'name', 'offer_uuid': 'offer-uuid', 'status': 'status'} ++ _toPy = {'is-consumer-proxy': 'is_consumer_proxy', 'life': 'life', 'macaroon': 'macaroon', 'model-uuid': 'model_uuid', 'name': 'name', 'offer-uuid': 'offer_uuid', 'status': 'status'} ++ def __init__(self, is_consumer_proxy=None, life=None, macaroon=None, model_uuid=None, name=None, offer_uuid=None, status=None, **unknown_fields): ++ ''' ++ is_consumer_proxy : bool ++ life : str ++ macaroon : Macaroon ++ model_uuid : str ++ name : str ++ offer_uuid : str ++ status : str ++ ''' ++ self.is_consumer_proxy = is_consumer_proxy ++ self.life = life ++ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None ++ self.model_uuid = model_uuid ++ self.name = name ++ self.offer_uuid = offer_uuid ++ self.status = status ++ ++ ++ +class RemoteApplicationChange(Type): + _toSchema = {'application_tag': 'application-tag', 'life': 'life', 'relations': 'relations'} + _toPy = {'application-tag': 'application_tag', 'life': 'life', 'relations': 'relations'} + def __init__(self, application_tag=None, life=None, relations=None, **unknown_fields): + ''' + application_tag : str + life : str + relations : RemoteRelationsChange + ''' + self.application_tag = application_tag + self.life = life + self.relations = RemoteRelationsChange.from_json(relations) if relations else None + + + +class RemoteApplicationInfo(Type): + _toSchema = {'application_url': 'application-url', 'description': 'description', 'endpoints': 'endpoints', 'icon_url_path': 'icon-url-path', 'model_tag': 'model-tag', 'name': 'name', 'source_model_label': 'source-model-label'} + _toPy = {'application-url': 'application_url', 'description': 'description', 'endpoints': 'endpoints', 'icon-url-path': 'icon_url_path', 'model-tag': 'model_tag', 'name': 'name', 'source-model-label': 'source_model_label'} + def __init__(self, application_url=None, description=None, endpoints=None, icon_url_path=None, model_tag=None, name=None, source_model_label=None, **unknown_fields): + ''' + application_url : str + description : str - endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint> ++ endpoints : typing.Sequence[~RemoteEndpoint] + icon_url_path : str + model_tag : str + name : str + source_model_label : str + ''' + self.application_url = application_url + self.description = description + self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []] + self.icon_url_path = icon_url_path + self.model_tag = model_tag + self.name = name + self.source_model_label = source_model_label + + + +class RemoteApplicationInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : RemoteApplicationInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = RemoteApplicationInfo.from_json(result) if result else None + + + +class RemoteApplicationInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult> ++ results : typing.Sequence[~RemoteApplicationInfoResult] + ''' + self.results = [RemoteApplicationInfoResult.from_json(o) for o in results or []] + + + ++class RemoteApplicationResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : RemoteApplication ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = RemoteApplication.from_json(result) if result else None ++ ++ ++ ++class RemoteApplicationResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RemoteApplicationResult] ++ ''' ++ self.results = [RemoteApplicationResult.from_json(o) for o in results or []] ++ ++ ++ +class RemoteApplicationStatus(Type): + _toSchema = {'application_name': 'application-name', 'application_url': 'application-url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'} + _toPy = {'application-name': 'application_name', 'application-url': 'application_url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'} + def __init__(self, application_name=None, application_url=None, endpoints=None, err=None, life=None, relations=None, status=None, **unknown_fields): + ''' + application_name : str + application_url : str - endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint> - err : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ endpoints : typing.Sequence[~RemoteEndpoint] ++ err : typing.Mapping[str, typing.Any] + life : str - relations : typing.Sequence<+T_co>[str] ++ relations : typing.Sequence[str] + status : DetailedStatus + ''' + self.application_name = application_name + self.application_url = application_url + self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []] + self.err = err + self.life = life + self.relations = relations + self.status = DetailedStatus.from_json(status) if status else None + + + +class RemoteApplicationWatchResult(Type): + _toSchema = {'change': 'change', 'error': 'error', 'id_': 'id'} + _toPy = {'change': 'change', 'error': 'error', 'id': 'id_'} + def __init__(self, change=None, error=None, id_=None, **unknown_fields): + ''' + change : RemoteApplicationChange + error : Error + id_ : str + ''' + self.change = RemoteApplicationChange.from_json(change) if change else None + self.error = Error.from_json(error) if error else None + self.id_ = id_ + + + +class RemoteEndpoint(Type): + _toSchema = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'role': 'role', 'scope': 'scope'} + _toPy = {'interface': 'interface', 'limit': 'limit', 'name': 'name', 'role': 'role', 'scope': 'scope'} + def __init__(self, interface=None, limit=None, name=None, role=None, scope=None, **unknown_fields): + ''' + interface : str + limit : int + name : str + role : str + scope : str + ''' + self.interface = interface + self.limit = limit + self.name = name + self.role = role + self.scope = scope + + + ++class RemoteEntityArg(Type): ++ _toSchema = {'macaroons': 'macaroons', 'relation_token': 'relation-token'} ++ _toPy = {'macaroons': 'macaroons', 'relation-token': 'relation_token'} ++ def __init__(self, macaroons=None, relation_token=None, **unknown_fields): ++ ''' ++ macaroons : typing.Sequence[~Macaroon] ++ relation_token : str ++ ''' ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.relation_token = relation_token ++ ++ ++ ++class RemoteEntityArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~RemoteEntityArg] ++ ''' ++ self.args = [RemoteEntityArg.from_json(o) for o in args or []] ++ ++ ++ +class RemoteEntityId(Type): + _toSchema = {'model_uuid': 'model-uuid', 'token': 'token'} + _toPy = {'model-uuid': 'model_uuid', 'token': 'token'} + def __init__(self, model_uuid=None, token=None, **unknown_fields): + ''' + model_uuid : str + token : str + ''' + self.model_uuid = model_uuid + self.token = token + + + ++class RemoteEntityTokenArg(Type): ++ _toSchema = {'tag': 'tag', 'token': 'token'} ++ _toPy = {'tag': 'tag', 'token': 'token'} ++ def __init__(self, tag=None, token=None, **unknown_fields): ++ ''' ++ tag : str ++ token : str ++ ''' ++ self.tag = tag ++ self.token = token ++ ++ ++ ++class RemoteEntityTokenArgs(Type): ++ _toSchema = {'args': 'Args'} ++ _toPy = {'Args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~RemoteEntityTokenArg] ++ ''' ++ self.args = [RemoteEntityTokenArg.from_json(o) for o in args or []] ++ ++ ++ ++class RemoteRelation(Type): ++ _toSchema = {'application_name': 'application-name', 'endpoint': 'endpoint', 'id_': 'id', 'key': 'key', 'life': 'life', 'remote_application_name': 'remote-application-name', 'remote_endpoint_name': 'remote-endpoint-name', 'source_model_uuid': 'source-model-uuid', 'suspended': 'suspended'} ++ _toPy = {'application-name': 'application_name', 'endpoint': 'endpoint', 'id': 'id_', 'key': 'key', 'life': 'life', 'remote-application-name': 'remote_application_name', 'remote-endpoint-name': 'remote_endpoint_name', 'source-model-uuid': 'source_model_uuid', 'suspended': 'suspended'} ++ def __init__(self, application_name=None, endpoint=None, id_=None, key=None, life=None, remote_application_name=None, remote_endpoint_name=None, source_model_uuid=None, suspended=None, **unknown_fields): ++ ''' ++ application_name : str ++ endpoint : RemoteEndpoint ++ id_ : int ++ key : str ++ life : str ++ remote_application_name : str ++ remote_endpoint_name : str ++ source_model_uuid : str ++ suspended : bool ++ ''' ++ self.application_name = application_name ++ self.endpoint = RemoteEndpoint.from_json(endpoint) if endpoint else None ++ self.id_ = id_ ++ self.key = key ++ self.life = life ++ self.remote_application_name = remote_application_name ++ self.remote_endpoint_name = remote_endpoint_name ++ self.source_model_uuid = source_model_uuid ++ self.suspended = suspended ++ ++ ++ +class RemoteRelationChange(Type): + _toSchema = {'changed_units': 'changed-units', 'departed_units': 'departed-units', 'id_': 'id', 'life': 'life'} + _toPy = {'changed-units': 'changed_units', 'departed-units': 'departed_units', 'id': 'id_', 'life': 'life'} + def __init__(self, changed_units=None, departed_units=None, id_=None, life=None, **unknown_fields): + ''' - changed_units : typing.Mapping<~KT, +VT_co>[str, ~RemoteRelationUnitChange]<~RemoteRelationUnitChange> - departed_units : typing.Sequence<+T_co>[str] ++ changed_units : typing.Mapping[str, ~RemoteRelationUnitChange] ++ departed_units : typing.Sequence[str] + id_ : int + life : str + ''' + self.changed_units = changed_units + self.departed_units = departed_units + self.id_ = id_ + self.life = life + + + ++class RemoteRelationChangeEvent(Type): ++ _toSchema = {'application_token': 'application-token', 'changed_units': 'changed-units', 'departed_units': 'departed-units', 'force_cleanup': 'force-cleanup', 'life': 'life', 'macaroons': 'macaroons', 'relation_token': 'relation-token', 'suspended': 'suspended', 'suspended_reason': 'suspended-reason'} ++ _toPy = {'application-token': 'application_token', 'changed-units': 'changed_units', 'departed-units': 'departed_units', 'force-cleanup': 'force_cleanup', 'life': 'life', 'macaroons': 'macaroons', 'relation-token': 'relation_token', 'suspended': 'suspended', 'suspended-reason': 'suspended_reason'} ++ def __init__(self, application_token=None, changed_units=None, departed_units=None, force_cleanup=None, life=None, macaroons=None, relation_token=None, suspended=None, suspended_reason=None, **unknown_fields): ++ ''' ++ application_token : str ++ changed_units : typing.Sequence[~RemoteRelationUnitChange] ++ departed_units : typing.Sequence[int] ++ force_cleanup : bool ++ life : str ++ macaroons : typing.Sequence[~Macaroon] ++ relation_token : str ++ suspended : bool ++ suspended_reason : str ++ ''' ++ self.application_token = application_token ++ self.changed_units = [RemoteRelationUnitChange.from_json(o) for o in changed_units or []] ++ self.departed_units = departed_units ++ self.force_cleanup = force_cleanup ++ self.life = life ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.relation_token = relation_token ++ self.suspended = suspended ++ self.suspended_reason = suspended_reason ++ ++ ++ ++class RemoteRelationDetails(Type): ++ _toSchema = {'macaroon': 'macaroon', 'relation_token': 'relation-token'} ++ _toPy = {'macaroon': 'macaroon', 'relation-token': 'relation_token'} ++ def __init__(self, macaroon=None, relation_token=None, **unknown_fields): ++ ''' ++ macaroon : Macaroon ++ relation_token : str ++ ''' ++ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None ++ self.relation_token = relation_token ++ ++ ++ ++class RemoteRelationResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : RemoteRelation ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = RemoteRelation.from_json(result) if result else None ++ ++ ++ ++class RemoteRelationResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RemoteRelationResult] ++ ''' ++ self.results = [RemoteRelationResult.from_json(o) for o in results or []] ++ ++ ++ ++class RemoteRelationUnit(Type): ++ _toSchema = {'macaroons': 'macaroons', 'relation_token': 'relation-token', 'unit': 'unit'} ++ _toPy = {'macaroons': 'macaroons', 'relation-token': 'relation_token', 'unit': 'unit'} ++ def __init__(self, macaroons=None, relation_token=None, unit=None, **unknown_fields): ++ ''' ++ macaroons : typing.Sequence[~Macaroon] ++ relation_token : str ++ unit : str ++ ''' ++ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []] ++ self.relation_token = relation_token ++ self.unit = unit ++ ++ ++ +class RemoteRelationUnitChange(Type): + _toSchema = {'settings': 'settings', 'unit_id': 'unit-id'} + _toPy = {'settings': 'settings', 'unit-id': 'unit_id'} + def __init__(self, settings=None, unit_id=None, **unknown_fields): + ''' - settings : typing.Mapping<~KT, +VT_co>[str, typing.Any] - unit_id : RemoteEntityId ++ settings : typing.Mapping[str, typing.Any] ++ unit_id : RemoteEntityId ++ ''' ++ self.settings = settings ++ self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None ++ ++ ++ ++class RemoteRelationUnits(Type): ++ _toSchema = {'relation_units': 'relation-units'} ++ _toPy = {'relation-units': 'relation_units'} ++ def __init__(self, relation_units=None, **unknown_fields): ++ ''' ++ relation_units : typing.Sequence[~RemoteRelationUnit] + ''' - self.settings = settings - self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None ++ self.relation_units = [RemoteRelationUnit.from_json(o) for o in relation_units or []] + + + +class RemoteRelationsChange(Type): + _toSchema = {'changed': 'changed', 'initial': 'initial', 'removed': 'removed'} + _toPy = {'changed': 'changed', 'initial': 'initial', 'removed': 'removed'} + def __init__(self, changed=None, initial=None, removed=None, **unknown_fields): + ''' - changed : typing.Sequence<+T_co>[~RemoteRelationChange]<~RemoteRelationChange> ++ changed : typing.Sequence[~RemoteRelationChange] + initial : bool - removed : typing.Sequence<+T_co>[int] ++ removed : typing.Sequence[int] + ''' + self.changed = [RemoteRelationChange.from_json(o) for o in changed or []] + self.initial = initial + self.removed = removed + + + ++class RemoteRelationsChanges(Type): ++ _toSchema = {'changes': 'changes'} ++ _toPy = {'changes': 'changes'} ++ def __init__(self, changes=None, **unknown_fields): ++ ''' ++ changes : typing.Sequence[~RemoteRelationChangeEvent] ++ ''' ++ self.changes = [RemoteRelationChangeEvent.from_json(o) for o in changes or []] ++ ++ ++ +class RemoteRelationsWatchResult(Type): + _toSchema = {'change': 'change', 'error': 'error', 'remoterelationswatcherid': 'RemoteRelationsWatcherId'} + _toPy = {'RemoteRelationsWatcherId': 'remoterelationswatcherid', 'change': 'change', 'error': 'error'} + def __init__(self, remoterelationswatcherid=None, change=None, error=None, **unknown_fields): + ''' + remoterelationswatcherid : str + change : RemoteRelationsChange + error : Error + ''' + self.remoterelationswatcherid = remoterelationswatcherid + self.change = RemoteRelationsChange.from_json(change) if change else None + self.error = Error.from_json(error) if error else None + + + +class RemoteSpace(Type): + _toSchema = {'cloud_type': 'cloud-type', 'name': 'name', 'provider_attributes': 'provider-attributes', 'provider_id': 'provider-id', 'subnets': 'subnets'} + _toPy = {'cloud-type': 'cloud_type', 'name': 'name', 'provider-attributes': 'provider_attributes', 'provider-id': 'provider_id', 'subnets': 'subnets'} + def __init__(self, cloud_type=None, name=None, provider_attributes=None, provider_id=None, subnets=None, **unknown_fields): + ''' + cloud_type : str + name : str - provider_attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ provider_attributes : typing.Mapping[str, typing.Any] + provider_id : str - subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ subnets : typing.Sequence[~Subnet] + ''' + self.cloud_type = cloud_type + self.name = name + self.provider_attributes = provider_attributes + self.provider_id = provider_id + self.subnets = [Subnet.from_json(o) for o in subnets or []] + + + +class RemoveBlocksArgs(Type): + _toSchema = {'all_': 'all'} + _toPy = {'all': 'all_'} + def __init__(self, all_=None, **unknown_fields): + ''' + all_ : bool + ''' + self.all_ = all_ + + + ++class RemoveFilesystemParams(Type): ++ _toSchema = {'destroy': 'destroy', 'filesystem_id': 'filesystem-id', 'provider': 'provider'} ++ _toPy = {'destroy': 'destroy', 'filesystem-id': 'filesystem_id', 'provider': 'provider'} ++ def __init__(self, destroy=None, filesystem_id=None, provider=None, **unknown_fields): ++ ''' ++ destroy : bool ++ filesystem_id : str ++ provider : str ++ ''' ++ self.destroy = destroy ++ self.filesystem_id = filesystem_id ++ self.provider = provider ++ ++ ++ ++class RemoveFilesystemParamsResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : RemoveFilesystemParams ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = RemoveFilesystemParams.from_json(result) if result else None ++ ++ ++ ++class RemoveFilesystemParamsResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RemoveFilesystemParamsResult] ++ ''' ++ self.results = [RemoveFilesystemParamsResult.from_json(o) for o in results or []] ++ ++ ++ ++class RemoveStorage(Type): ++ _toSchema = {'storage': 'storage'} ++ _toPy = {'storage': 'storage'} ++ def __init__(self, storage=None, **unknown_fields): ++ ''' ++ storage : typing.Sequence[~RemoveStorageInstance] ++ ''' ++ self.storage = [RemoveStorageInstance.from_json(o) for o in storage or []] ++ ++ ++ ++class RemoveStorageInstance(Type): ++ _toSchema = {'destroy_attachments': 'destroy-attachments', 'destroy_storage': 'destroy-storage', 'tag': 'tag'} ++ _toPy = {'destroy-attachments': 'destroy_attachments', 'destroy-storage': 'destroy_storage', 'tag': 'tag'} ++ def __init__(self, destroy_attachments=None, destroy_storage=None, tag=None, **unknown_fields): ++ ''' ++ destroy_attachments : bool ++ destroy_storage : bool ++ tag : str ++ ''' ++ self.destroy_attachments = destroy_attachments ++ self.destroy_storage = destroy_storage ++ self.tag = tag ++ ++ ++ ++class RemoveVolumeParams(Type): ++ _toSchema = {'destroy': 'destroy', 'provider': 'provider', 'volume_id': 'volume-id'} ++ _toPy = {'destroy': 'destroy', 'provider': 'provider', 'volume-id': 'volume_id'} ++ def __init__(self, destroy=None, provider=None, volume_id=None, **unknown_fields): ++ ''' ++ destroy : bool ++ provider : str ++ volume_id : str ++ ''' ++ self.destroy = destroy ++ self.provider = provider ++ self.volume_id = volume_id ++ ++ ++ ++class RemoveVolumeParamsResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : RemoveVolumeParams ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = RemoveVolumeParams.from_json(result) if result else None ++ ++ ++ ++class RemoveVolumeParamsResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~RemoveVolumeParamsResult] ++ ''' ++ self.results = [RemoveVolumeParamsResult.from_json(o) for o in results or []] ++ ++ ++ +class ResolveCharmResult(Type): + _toSchema = {'error': 'error', 'url': 'url'} + _toPy = {'error': 'error', 'url': 'url'} + def __init__(self, error=None, url=None, **unknown_fields): + ''' + error : str + url : str + ''' + self.error = error + self.url = url + + + +class ResolveCharmResults(Type): + _toSchema = {'urls': 'urls'} + _toPy = {'urls': 'urls'} + def __init__(self, urls=None, **unknown_fields): + ''' - urls : typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult> ++ urls : typing.Sequence[~ResolveCharmResult] + ''' + self.urls = [ResolveCharmResult.from_json(o) for o in urls or []] + + + +class ResolveCharms(Type): + _toSchema = {'references': 'references'} + _toPy = {'references': 'references'} + def __init__(self, references=None, **unknown_fields): + ''' - references : typing.Sequence<+T_co>[str] ++ references : typing.Sequence[str] + ''' + self.references = references + + + +class Resolved(Type): + _toSchema = {'retry': 'retry', 'unit_name': 'unit-name'} + _toPy = {'retry': 'retry', 'unit-name': 'unit_name'} + def __init__(self, retry=None, unit_name=None, **unknown_fields): + ''' + retry : bool + unit_name : str + ''' + self.retry = retry + self.unit_name = unit_name + + + +class ResolvedModeResult(Type): + _toSchema = {'error': 'error', 'mode': 'mode'} + _toPy = {'error': 'error', 'mode': 'mode'} + def __init__(self, error=None, mode=None, **unknown_fields): + ''' + error : Error + mode : str + ''' + self.error = Error.from_json(error) if error else None + self.mode = mode + + + +class ResolvedModeResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult> ++ results : typing.Sequence[~ResolvedModeResult] + ''' + self.results = [ResolvedModeResult.from_json(o) for o in results or []] + + + +class Resource(Type): + _toSchema = {'application': 'application', 'charmresource': 'CharmResource', 'id_': 'id', 'pending_id': 'pending-id', 'timestamp': 'timestamp', 'username': 'username'} + _toPy = {'CharmResource': 'charmresource', 'application': 'application', 'id': 'id_', 'pending-id': 'pending_id', 'timestamp': 'timestamp', 'username': 'username'} + def __init__(self, charmresource=None, application=None, id_=None, pending_id=None, timestamp=None, username=None, **unknown_fields): + ''' + charmresource : CharmResource + application : str + id_ : str + pending_id : str + timestamp : str + username : str + ''' + self.charmresource = CharmResource.from_json(charmresource) if charmresource else None + self.application = application + self.id_ = id_ + self.pending_id = pending_id + self.timestamp = timestamp + self.username = username + + + +class ResourceResult(Type): + _toSchema = {'errorresult': 'ErrorResult', 'resource': 'resource'} + _toPy = {'ErrorResult': 'errorresult', 'resource': 'resource'} + def __init__(self, errorresult=None, resource=None, **unknown_fields): + ''' + errorresult : ErrorResult + resource : Resource + ''' + self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None + self.resource = Resource.from_json(resource) if resource else None + + + +class ResourcesResult(Type): + _toSchema = {'charm_store_resources': 'charm-store-resources', 'errorresult': 'ErrorResult', 'resources': 'resources', 'unit_resources': 'unit-resources'} + _toPy = {'ErrorResult': 'errorresult', 'charm-store-resources': 'charm_store_resources', 'resources': 'resources', 'unit-resources': 'unit_resources'} + def __init__(self, errorresult=None, charm_store_resources=None, resources=None, unit_resources=None, **unknown_fields): + ''' + errorresult : ErrorResult - charm_store_resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource> - resources : typing.Sequence<+T_co>[~Resource]<~Resource> - unit_resources : typing.Sequence<+T_co>[~UnitResources]<~UnitResources> ++ charm_store_resources : typing.Sequence[~CharmResource] ++ resources : typing.Sequence[~Resource] ++ unit_resources : typing.Sequence[~UnitResources] + ''' + self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None + self.charm_store_resources = [CharmResource.from_json(o) for o in charm_store_resources or []] + self.resources = [Resource.from_json(o) for o in resources or []] + self.unit_resources = [UnitResources.from_json(o) for o in unit_resources or []] + + + +class ResourcesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult> ++ results : typing.Sequence[~ResourcesResult] + ''' + self.results = [ResourcesResult.from_json(o) for o in results or []] + + + +class RestoreArgs(Type): + _toSchema = {'backup_id': 'backup-id'} + _toPy = {'backup-id': 'backup_id'} + def __init__(self, backup_id=None, **unknown_fields): + ''' + backup_id : str + ''' + self.backup_id = backup_id + + + +class ResumeReplicationParams(Type): + _toSchema = {'members': 'members'} + _toPy = {'members': 'members'} + def __init__(self, members=None, **unknown_fields): + ''' - members : typing.Sequence<+T_co>[~Member]<~Member> ++ members : typing.Sequence[~Member] + ''' + self.members = [Member.from_json(o) for o in members or []] + + + +class RetryStrategy(Type): + _toSchema = {'jitter_retry_time': 'jitter-retry-time', 'max_retry_time': 'max-retry-time', 'min_retry_time': 'min-retry-time', 'retry_time_factor': 'retry-time-factor', 'should_retry': 'should-retry'} + _toPy = {'jitter-retry-time': 'jitter_retry_time', 'max-retry-time': 'max_retry_time', 'min-retry-time': 'min_retry_time', 'retry-time-factor': 'retry_time_factor', 'should-retry': 'should_retry'} + def __init__(self, jitter_retry_time=None, max_retry_time=None, min_retry_time=None, retry_time_factor=None, should_retry=None, **unknown_fields): + ''' + jitter_retry_time : bool + max_retry_time : int + min_retry_time : int + retry_time_factor : int + should_retry : bool + ''' + self.jitter_retry_time = jitter_retry_time + self.max_retry_time = max_retry_time + self.min_retry_time = min_retry_time + self.retry_time_factor = retry_time_factor + self.should_retry = should_retry + + + +class RetryStrategyResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : RetryStrategy + ''' + self.error = Error.from_json(error) if error else None + self.result = RetryStrategy.from_json(result) if result else None + + + +class RetryStrategyResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult> ++ results : typing.Sequence[~RetryStrategyResult] + ''' + self.results = [RetryStrategyResult.from_json(o) for o in results or []] + + + ++class RevokeCredentialArg(Type): ++ _toSchema = {'force': 'force', 'tag': 'tag'} ++ _toPy = {'force': 'force', 'tag': 'tag'} ++ def __init__(self, force=None, tag=None, **unknown_fields): ++ ''' ++ force : bool ++ tag : str ++ ''' ++ self.force = force ++ self.tag = tag ++ ++ ++ ++class RevokeCredentialArgs(Type): ++ _toSchema = {'credentials': 'credentials'} ++ _toPy = {'credentials': 'credentials'} ++ def __init__(self, credentials=None, **unknown_fields): ++ ''' ++ credentials : typing.Sequence[~RevokeCredentialArg] ++ ''' ++ self.credentials = [RevokeCredentialArg.from_json(o) for o in credentials or []] ++ ++ ++ +class RunParams(Type): + _toSchema = {'applications': 'applications', 'commands': 'commands', 'machines': 'machines', 'timeout': 'timeout', 'units': 'units'} + _toPy = {'applications': 'applications', 'commands': 'commands', 'machines': 'machines', 'timeout': 'timeout', 'units': 'units'} + def __init__(self, applications=None, commands=None, machines=None, timeout=None, units=None, **unknown_fields): + ''' - applications : typing.Sequence<+T_co>[str] ++ applications : typing.Sequence[str] + commands : str - machines : typing.Sequence<+T_co>[str] ++ machines : typing.Sequence[str] + timeout : int - units : typing.Sequence<+T_co>[str] ++ units : typing.Sequence[str] + ''' + self.applications = applications + self.commands = commands + self.machines = machines + self.timeout = timeout + self.units = units + + + +class SSHAddressResult(Type): + _toSchema = {'address': 'address', 'error': 'error'} + _toPy = {'address': 'address', 'error': 'error'} + def __init__(self, address=None, error=None, **unknown_fields): + ''' + address : str + error : Error + ''' + self.address = address + self.error = Error.from_json(error) if error else None + + + +class SSHAddressResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult> ++ results : typing.Sequence[~SSHAddressResult] + ''' + self.results = [SSHAddressResult.from_json(o) for o in results or []] + + + +class SSHAddressesResult(Type): + _toSchema = {'addresses': 'addresses', 'error': 'error'} + _toPy = {'addresses': 'addresses', 'error': 'error'} + def __init__(self, addresses=None, error=None, **unknown_fields): + ''' - addresses : typing.Sequence<+T_co>[str] ++ addresses : typing.Sequence[str] + error : Error + ''' + self.addresses = addresses + self.error = Error.from_json(error) if error else None + + + +class SSHAddressesResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult> ++ results : typing.Sequence[~SSHAddressesResult] + ''' + self.results = [SSHAddressesResult.from_json(o) for o in results or []] + + + +class SSHHostKeySet(Type): + _toSchema = {'entity_keys': 'entity-keys'} + _toPy = {'entity-keys': 'entity_keys'} + def __init__(self, entity_keys=None, **unknown_fields): + ''' - entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys> ++ entity_keys : typing.Sequence[~SSHHostKeys] + ''' + self.entity_keys = [SSHHostKeys.from_json(o) for o in entity_keys or []] + + + +class SSHHostKeys(Type): + _toSchema = {'public_keys': 'public-keys', 'tag': 'tag'} + _toPy = {'public-keys': 'public_keys', 'tag': 'tag'} + def __init__(self, public_keys=None, tag=None, **unknown_fields): + ''' - public_keys : typing.Sequence<+T_co>[str] ++ public_keys : typing.Sequence[str] + tag : str + ''' + self.public_keys = public_keys + self.tag = tag + + + +class SSHProxyResult(Type): + _toSchema = {'use_proxy': 'use-proxy'} + _toPy = {'use-proxy': 'use_proxy'} + def __init__(self, use_proxy=None, **unknown_fields): + ''' + use_proxy : bool + ''' + self.use_proxy = use_proxy + + + +class SSHPublicKeysResult(Type): + _toSchema = {'error': 'error', 'public_keys': 'public-keys'} + _toPy = {'error': 'error', 'public-keys': 'public_keys'} + def __init__(self, error=None, public_keys=None, **unknown_fields): + ''' + error : Error - public_keys : typing.Sequence<+T_co>[str] ++ public_keys : typing.Sequence[str] + ''' + self.error = Error.from_json(error) if error else None + self.public_keys = public_keys + + + +class SSHPublicKeysResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult> ++ results : typing.Sequence[~SSHPublicKeysResult] + ''' + self.results = [SSHPublicKeysResult.from_json(o) for o in results or []] + + + ++class ScaleApplicationInfo(Type): ++ _toSchema = {'num_units': 'num-units'} ++ _toPy = {'num-units': 'num_units'} ++ def __init__(self, num_units=None, **unknown_fields): ++ ''' ++ num_units : int ++ ''' ++ self.num_units = num_units ++ ++ ++ ++class ScaleApplicationParams(Type): ++ _toSchema = {'application_tag': 'application-tag', 'scale': 'scale', 'scale_change': 'scale-change'} ++ _toPy = {'application-tag': 'application_tag', 'scale': 'scale', 'scale-change': 'scale_change'} ++ def __init__(self, application_tag=None, scale=None, scale_change=None, **unknown_fields): ++ ''' ++ application_tag : str ++ scale : int ++ scale_change : int ++ ''' ++ self.application_tag = application_tag ++ self.scale = scale ++ self.scale_change = scale_change ++ ++ ++ ++class ScaleApplicationResult(Type): ++ _toSchema = {'error': 'error', 'info': 'info'} ++ _toPy = {'error': 'error', 'info': 'info'} ++ def __init__(self, error=None, info=None, **unknown_fields): ++ ''' ++ error : Error ++ info : ScaleApplicationInfo ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.info = ScaleApplicationInfo.from_json(info) if info else None ++ ++ ++ ++class ScaleApplicationResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~ScaleApplicationResult] ++ ''' ++ self.results = [ScaleApplicationResult.from_json(o) for o in results or []] ++ ++ ++ ++class ScaleApplicationsParams(Type): ++ _toSchema = {'applications': 'applications'} ++ _toPy = {'applications': 'applications'} ++ def __init__(self, applications=None, **unknown_fields): ++ ''' ++ applications : typing.Sequence[~ScaleApplicationParams] ++ ''' ++ self.applications = [ScaleApplicationParams.from_json(o) for o in applications or []] ++ ++ ++ +class SerializedModel(Type): + _toSchema = {'bytes_': 'bytes', 'charms': 'charms', 'tools': 'tools'} + _toPy = {'bytes': 'bytes_', 'charms': 'charms', 'tools': 'tools'} + def __init__(self, bytes_=None, charms=None, tools=None, **unknown_fields): + ''' - bytes_ : typing.Sequence<+T_co>[int] - charms : typing.Sequence<+T_co>[str] - tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools> ++ bytes_ : typing.Sequence[int] ++ charms : typing.Sequence[str] ++ tools : typing.Sequence[~SerializedModelTools] + ''' + self.bytes_ = bytes_ + self.charms = charms + self.tools = [SerializedModelTools.from_json(o) for o in tools or []] + + + +class SerializedModelResource(Type): + _toSchema = {'application': 'application', 'application_revision': 'application-revision', 'charmstore_revision': 'charmstore-revision', 'name': 'name', 'unit_revisions': 'unit-revisions'} + _toPy = {'application': 'application', 'application-revision': 'application_revision', 'charmstore-revision': 'charmstore_revision', 'name': 'name', 'unit-revisions': 'unit_revisions'} + def __init__(self, application=None, application_revision=None, charmstore_revision=None, name=None, unit_revisions=None, **unknown_fields): + ''' + application : str + application_revision : SerializedModelResourceRevision + charmstore_revision : SerializedModelResourceRevision + name : str - unit_revisions : typing.Mapping<~KT, +VT_co>[str, ~SerializedModelResourceRevision]<~SerializedModelResourceRevision> ++ unit_revisions : typing.Mapping[str, ~SerializedModelResourceRevision] + ''' + self.application = application + self.application_revision = SerializedModelResourceRevision.from_json(application_revision) if application_revision else None + self.charmstore_revision = SerializedModelResourceRevision.from_json(charmstore_revision) if charmstore_revision else None + self.name = name + self.unit_revisions = unit_revisions + + + +class SerializedModelResourceRevision(Type): + _toSchema = {'description': 'description', 'fingerprint': 'fingerprint', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'timestamp': 'timestamp', 'type_': 'type', 'username': 'username'} + _toPy = {'description': 'description', 'fingerprint': 'fingerprint', 'origin': 'origin', 'path': 'path', 'revision': 'revision', 'size': 'size', 'timestamp': 'timestamp', 'type': 'type_', 'username': 'username'} + def __init__(self, description=None, fingerprint=None, origin=None, path=None, revision=None, size=None, timestamp=None, type_=None, username=None, **unknown_fields): + ''' + description : str + fingerprint : str + origin : str + path : str + revision : int + size : int + timestamp : str + type_ : str + username : str + ''' + self.description = description + self.fingerprint = fingerprint + self.origin = origin + self.path = path + self.revision = revision + self.size = size + self.timestamp = timestamp + self.type_ = type_ + self.username = username + + + +class SerializedModelTools(Type): + _toSchema = {'uri': 'uri', 'version': 'version'} + _toPy = {'uri': 'uri', 'version': 'version'} + def __init__(self, uri=None, version=None, **unknown_fields): + ''' + uri : str + version : str + ''' + self.uri = uri + self.version = version + + + +class SetConstraints(Type): + _toSchema = {'application': 'application', 'constraints': 'constraints'} + _toPy = {'application': 'application', 'constraints': 'constraints'} + def __init__(self, application=None, constraints=None, **unknown_fields): + ''' + application : str + constraints : Value + ''' + self.application = application + self.constraints = Value.from_json(constraints) if constraints else None + + + ++class SetExternalControllerInfoParams(Type): ++ _toSchema = {'info': 'info'} ++ _toPy = {'info': 'info'} ++ def __init__(self, info=None, **unknown_fields): ++ ''' ++ info : ExternalControllerInfo ++ ''' ++ self.info = ExternalControllerInfo.from_json(info) if info else None ++ ++ ++ ++class SetExternalControllersInfoParams(Type): ++ _toSchema = {'controllers': 'controllers'} ++ _toPy = {'controllers': 'controllers'} ++ def __init__(self, controllers=None, **unknown_fields): ++ ''' ++ controllers : typing.Sequence[~SetExternalControllerInfoParams] ++ ''' ++ self.controllers = [SetExternalControllerInfoParams.from_json(o) for o in controllers or []] ++ ++ ++ +class SetMachineBlockDevices(Type): + _toSchema = {'machine_block_devices': 'machine-block-devices'} + _toPy = {'machine-block-devices': 'machine_block_devices'} + def __init__(self, machine_block_devices=None, **unknown_fields): + ''' - machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices> ++ machine_block_devices : typing.Sequence[~MachineBlockDevices] + ''' + self.machine_block_devices = [MachineBlockDevices.from_json(o) for o in machine_block_devices or []] + + + +class SetMachineNetworkConfig(Type): + _toSchema = {'config': 'config', 'tag': 'tag'} + _toPy = {'config': 'config', 'tag': 'tag'} + def __init__(self, config=None, tag=None, **unknown_fields): + ''' - config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ config : typing.Sequence[~NetworkConfig] + tag : str + ''' + self.config = [NetworkConfig.from_json(o) for o in config or []] + self.tag = tag + + + +class SetMachinesAddresses(Type): + _toSchema = {'machine_addresses': 'machine-addresses'} + _toPy = {'machine-addresses': 'machine_addresses'} + def __init__(self, machine_addresses=None, **unknown_fields): + ''' - machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses> ++ machine_addresses : typing.Sequence[~MachineAddresses] + ''' + self.machine_addresses = [MachineAddresses.from_json(o) for o in machine_addresses or []] + + + +class SetMigrationPhaseArgs(Type): + _toSchema = {'phase': 'phase'} + _toPy = {'phase': 'phase'} + def __init__(self, phase=None, **unknown_fields): + ''' + phase : str + ''' + self.phase = phase + + + +class SetMigrationStatusMessageArgs(Type): + _toSchema = {'message': 'message'} + _toPy = {'message': 'message'} + def __init__(self, message=None, **unknown_fields): + ''' + message : str + ''' + self.message = message + + + +class SetModelAgentVersion(Type): + _toSchema = {'version': 'version'} + _toPy = {'version': 'version'} + def __init__(self, version=None, **unknown_fields): + ''' + version : Number + ''' + self.version = Number.from_json(version) if version else None + + + +class SetModelDefaults(Type): + _toSchema = {'config': 'config'} + _toPy = {'config': 'config'} + def __init__(self, config=None, **unknown_fields): + ''' - config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues> ++ config : typing.Sequence[~ModelDefaultValues] + ''' + self.config = [ModelDefaultValues.from_json(o) for o in config or []] + + + ++class SetModelEnvironVersion(Type): ++ _toSchema = {'model_tag': 'model-tag', 'version': 'version'} ++ _toPy = {'model-tag': 'model_tag', 'version': 'version'} ++ def __init__(self, model_tag=None, version=None, **unknown_fields): ++ ''' ++ model_tag : str ++ version : int ++ ''' ++ self.model_tag = model_tag ++ self.version = version ++ ++ ++ ++class SetModelEnvironVersions(Type): ++ _toSchema = {'models': 'models'} ++ _toPy = {'models': 'models'} ++ def __init__(self, models=None, **unknown_fields): ++ ''' ++ models : typing.Sequence[~SetModelEnvironVersion] ++ ''' ++ self.models = [SetModelEnvironVersion.from_json(o) for o in models or []] ++ ++ ++ +class SetPayloadStatusArg(Type): + _toSchema = {'entity': 'Entity', 'status': 'status'} + _toPy = {'Entity': 'entity', 'status': 'status'} + def __init__(self, entity=None, status=None, **unknown_fields): + ''' + entity : Entity + status : str + ''' + self.entity = Entity.from_json(entity) if entity else None + self.status = status + + + +class SetPayloadStatusArgs(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg> ++ args : typing.Sequence[~SetPayloadStatusArg] + ''' + self.args = [SetPayloadStatusArg.from_json(o) for o in args or []] + + + ++class SetPodSpecParams(Type): ++ _toSchema = {'specs': 'specs'} ++ _toPy = {'specs': 'specs'} ++ def __init__(self, specs=None, **unknown_fields): ++ ''' ++ specs : typing.Sequence[~EntityString] ++ ''' ++ self.specs = [EntityString.from_json(o) for o in specs or []] ++ ++ ++ ++class SetProfileArg(Type): ++ _toSchema = {'entity': 'entity', 'profiles': 'profiles'} ++ _toPy = {'entity': 'entity', 'profiles': 'profiles'} ++ def __init__(self, entity=None, profiles=None, **unknown_fields): ++ ''' ++ entity : Entity ++ profiles : typing.Sequence[str] ++ ''' ++ self.entity = Entity.from_json(entity) if entity else None ++ self.profiles = profiles ++ ++ ++ ++class SetProfileArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~SetProfileArg] ++ ''' ++ self.args = [SetProfileArg.from_json(o) for o in args or []] ++ ++ ++ ++class SetProfileUpgradeCompleteArg(Type): ++ _toSchema = {'entity': 'entity', 'message': 'message'} ++ _toPy = {'entity': 'entity', 'message': 'message'} ++ def __init__(self, entity=None, message=None, **unknown_fields): ++ ''' ++ entity : Entity ++ message : str ++ ''' ++ self.entity = Entity.from_json(entity) if entity else None ++ self.message = message ++ ++ ++ ++class SetProfileUpgradeCompleteArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~SetProfileUpgradeCompleteArg] ++ ''' ++ self.args = [SetProfileUpgradeCompleteArg.from_json(o) for o in args or []] ++ ++ ++ +class SetStatus(Type): + _toSchema = {'entities': 'entities'} + _toPy = {'entities': 'entities'} + def __init__(self, entities=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs> ++ entities : typing.Sequence[~EntityStatusArgs] + ''' + self.entities = [EntityStatusArgs.from_json(o) for o in entities or []] + + + +class SetStatusArg(Type): + _toSchema = {'entity': 'Entity', 'status': 'status'} + _toPy = {'Entity': 'entity', 'status': 'status'} + def __init__(self, entity=None, status=None, **unknown_fields): + ''' + entity : Entity + status : str + ''' + self.entity = Entity.from_json(entity) if entity else None + self.status = status + + + +class SetStatusArgs(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~SetStatusArg]<~SetStatusArg> ++ args : typing.Sequence[~SetStatusArg] + ''' + self.args = [SetStatusArg.from_json(o) for o in args or []] + + + +class Settings(Type): + _toSchema = {'ftp': 'Ftp', 'http': 'Http', 'https': 'Https', 'noproxy': 'NoProxy'} + _toPy = {'Ftp': 'ftp', 'Http': 'http', 'Https': 'https', 'NoProxy': 'noproxy'} + def __init__(self, ftp=None, http=None, https=None, noproxy=None, **unknown_fields): + ''' + ftp : str + http : str + https : str + noproxy : str + ''' + self.ftp = ftp + self.http = http + self.https = https + self.noproxy = noproxy + + + +class SettingsResult(Type): + _toSchema = {'error': 'error', 'settings': 'settings'} + _toPy = {'error': 'error', 'settings': 'settings'} + def __init__(self, error=None, settings=None, **unknown_fields): + ''' + error : Error - settings : typing.Mapping<~KT, +VT_co>[str, str] ++ settings : typing.Mapping[str, str] + ''' + self.error = Error.from_json(error) if error else None + self.settings = settings + + + +class SettingsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult> ++ results : typing.Sequence[~SettingsResult] + ''' + self.results = [SettingsResult.from_json(o) for o in results or []] + + + +class SingularClaim(Type): + _toSchema = {'controller_tag': 'controller-tag', 'duration': 'duration', 'model_tag': 'model-tag'} + _toPy = {'controller-tag': 'controller_tag', 'duration': 'duration', 'model-tag': 'model_tag'} + def __init__(self, controller_tag=None, duration=None, model_tag=None, **unknown_fields): + ''' + controller_tag : str + duration : int + model_tag : str + ''' + self.controller_tag = controller_tag + self.duration = duration + self.model_tag = model_tag + + + +class SingularClaims(Type): + _toSchema = {'claims': 'claims'} + _toPy = {'claims': 'claims'} + def __init__(self, claims=None, **unknown_fields): + ''' - claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim> ++ claims : typing.Sequence[~SingularClaim] + ''' + self.claims = [SingularClaim.from_json(o) for o in claims or []] + + + +class Space(Type): + _toSchema = {'error': 'error', 'name': 'name', 'subnets': 'subnets'} + _toPy = {'error': 'error', 'name': 'name', 'subnets': 'subnets'} + def __init__(self, error=None, name=None, subnets=None, **unknown_fields): + ''' + error : Error + name : str - subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet> ++ subnets : typing.Sequence[~Subnet] + ''' + self.error = Error.from_json(error) if error else None + self.name = name + self.subnets = [Subnet.from_json(o) for o in subnets or []] + + + +class SpaceResult(Type): + _toSchema = {'error': 'error', 'tag': 'tag'} + _toPy = {'error': 'error', 'tag': 'tag'} + def __init__(self, error=None, tag=None, **unknown_fields): + ''' + error : Error + tag : str + ''' + self.error = Error.from_json(error) if error else None + self.tag = tag + + + +class SpaceResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult> ++ results : typing.Sequence[~SpaceResult] + ''' + self.results = [SpaceResult.from_json(o) for o in results or []] + + + +class StateServingInfo(Type): + _toSchema = {'api_port': 'api-port', 'ca_private_key': 'ca-private-key', 'cert': 'cert', 'private_key': 'private-key', 'shared_secret': 'shared-secret', 'state_port': 'state-port', 'system_identity': 'system-identity'} + _toPy = {'api-port': 'api_port', 'ca-private-key': 'ca_private_key', 'cert': 'cert', 'private-key': 'private_key', 'shared-secret': 'shared_secret', 'state-port': 'state_port', 'system-identity': 'system_identity'} + def __init__(self, api_port=None, ca_private_key=None, cert=None, private_key=None, shared_secret=None, state_port=None, system_identity=None, **unknown_fields): + ''' + api_port : int + ca_private_key : str + cert : str + private_key : str + shared_secret : str + state_port : int + system_identity : str + ''' + self.api_port = api_port + self.ca_private_key = ca_private_key + self.cert = cert + self.private_key = private_key + self.shared_secret = shared_secret + self.state_port = state_port + self.system_identity = system_identity + + + +class StatusHistoryFilter(Type): + _toSchema = {'date': 'date', 'delta': 'delta', 'size': 'size'} + _toPy = {'date': 'date', 'delta': 'delta', 'size': 'size'} + def __init__(self, date=None, delta=None, size=None, **unknown_fields): + ''' + date : str + delta : int + size : int + ''' + self.date = date + self.delta = delta + self.size = size + + + +class StatusHistoryPruneArgs(Type): + _toSchema = {'max_history_mb': 'max-history-mb', 'max_history_time': 'max-history-time'} + _toPy = {'max-history-mb': 'max_history_mb', 'max-history-time': 'max_history_time'} + def __init__(self, max_history_mb=None, max_history_time=None, **unknown_fields): + ''' + max_history_mb : int + max_history_time : int + ''' + self.max_history_mb = max_history_mb + self.max_history_time = max_history_time + + + +class StatusHistoryRequest(Type): + _toSchema = {'filter_': 'filter', 'historykind': 'historyKind', 'size': 'size', 'tag': 'tag'} + _toPy = {'filter': 'filter_', 'historyKind': 'historykind', 'size': 'size', 'tag': 'tag'} + def __init__(self, filter_=None, historykind=None, size=None, tag=None, **unknown_fields): + ''' + filter_ : StatusHistoryFilter + historykind : str + size : int + tag : str + ''' + self.filter_ = StatusHistoryFilter.from_json(filter_) if filter_ else None + self.historykind = historykind + self.size = size + self.tag = tag + + + +class StatusHistoryRequests(Type): + _toSchema = {'requests': 'requests'} + _toPy = {'requests': 'requests'} + def __init__(self, requests=None, **unknown_fields): + ''' - requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest> ++ requests : typing.Sequence[~StatusHistoryRequest] + ''' + self.requests = [StatusHistoryRequest.from_json(o) for o in requests or []] + + + +class StatusHistoryResult(Type): + _toSchema = {'error': 'error', 'history': 'history'} + _toPy = {'error': 'error', 'history': 'history'} + def __init__(self, error=None, history=None, **unknown_fields): + ''' + error : Error + history : History + ''' + self.error = Error.from_json(error) if error else None + self.history = History.from_json(history) if history else None + + + +class StatusHistoryResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult> ++ results : typing.Sequence[~StatusHistoryResult] + ''' + self.results = [StatusHistoryResult.from_json(o) for o in results or []] + + + +class StatusParams(Type): + _toSchema = {'patterns': 'patterns'} + _toPy = {'patterns': 'patterns'} + def __init__(self, patterns=None, **unknown_fields): + ''' - patterns : typing.Sequence<+T_co>[str] ++ patterns : typing.Sequence[str] + ''' + self.patterns = patterns + + + +class StatusResult(Type): + _toSchema = {'data': 'data', 'error': 'error', 'id_': 'id', 'info': 'info', 'life': 'life', 'since': 'since', 'status': 'status'} + _toPy = {'data': 'data', 'error': 'error', 'id': 'id_', 'info': 'info', 'life': 'life', 'since': 'since', 'status': 'status'} + def __init__(self, data=None, error=None, id_=None, info=None, life=None, since=None, status=None, **unknown_fields): + ''' - data : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ data : typing.Mapping[str, typing.Any] + error : Error + id_ : str + info : str + life : str + since : str + status : str + ''' + self.data = data + self.error = Error.from_json(error) if error else None + self.id_ = id_ + self.info = info + self.life = life + self.since = since + self.status = status + + + +class StatusResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StatusResult]<~StatusResult> ++ results : typing.Sequence[~StatusResult] + ''' + self.results = [StatusResult.from_json(o) for o in results or []] + + + +class StorageAddParams(Type): + _toSchema = {'name': 'name', 'storage': 'storage', 'unit': 'unit'} + _toPy = {'name': 'name', 'storage': 'storage', 'unit': 'unit'} + def __init__(self, name=None, storage=None, unit=None, **unknown_fields): + ''' + name : str + storage : StorageConstraints + unit : str + ''' + self.name = name + self.storage = StorageConstraints.from_json(storage) if storage else None + self.unit = unit + + + +class StorageAttachment(Type): + _toSchema = {'kind': 'kind', 'life': 'life', 'location': 'location', 'owner_tag': 'owner-tag', 'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'} + _toPy = {'kind': 'kind', 'life': 'life', 'location': 'location', 'owner-tag': 'owner_tag', 'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'} + def __init__(self, kind=None, life=None, location=None, owner_tag=None, storage_tag=None, unit_tag=None, **unknown_fields): + ''' + kind : int + life : str + location : str + owner_tag : str + storage_tag : str + unit_tag : str + ''' + self.kind = kind + self.life = life + self.location = location + self.owner_tag = owner_tag + self.storage_tag = storage_tag + self.unit_tag = unit_tag + + + +class StorageAttachmentDetails(Type): + _toSchema = {'location': 'location', 'machine_tag': 'machine-tag', 'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'} + _toPy = {'location': 'location', 'machine-tag': 'machine_tag', 'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'} + def __init__(self, location=None, machine_tag=None, storage_tag=None, unit_tag=None, **unknown_fields): + ''' + location : str + machine_tag : str + storage_tag : str + unit_tag : str + ''' + self.location = location + self.machine_tag = machine_tag + self.storage_tag = storage_tag + self.unit_tag = unit_tag + + + +class StorageAttachmentId(Type): + _toSchema = {'storage_tag': 'storage-tag', 'unit_tag': 'unit-tag'} + _toPy = {'storage-tag': 'storage_tag', 'unit-tag': 'unit_tag'} + def __init__(self, storage_tag=None, unit_tag=None, **unknown_fields): + ''' + storage_tag : str + unit_tag : str + ''' + self.storage_tag = storage_tag + self.unit_tag = unit_tag + + + +class StorageAttachmentIds(Type): + _toSchema = {'ids': 'ids'} + _toPy = {'ids': 'ids'} + def __init__(self, ids=None, **unknown_fields): + ''' - ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId> ++ ids : typing.Sequence[~StorageAttachmentId] + ''' + self.ids = [StorageAttachmentId.from_json(o) for o in ids or []] + + + +class StorageAttachmentIdsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : StorageAttachmentIds + ''' + self.error = Error.from_json(error) if error else None + self.result = StorageAttachmentIds.from_json(result) if result else None + + + +class StorageAttachmentIdsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult> ++ results : typing.Sequence[~StorageAttachmentIdsResult] + ''' + self.results = [StorageAttachmentIdsResult.from_json(o) for o in results or []] + + + +class StorageAttachmentResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : StorageAttachment + ''' + self.error = Error.from_json(error) if error else None + self.result = StorageAttachment.from_json(result) if result else None + + + +class StorageAttachmentResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult> ++ results : typing.Sequence[~StorageAttachmentResult] + ''' + self.results = [StorageAttachmentResult.from_json(o) for o in results or []] + + + +class StorageConstraints(Type): + _toSchema = {'count': 'count', 'pool': 'pool', 'size': 'size'} + _toPy = {'count': 'count', 'pool': 'pool', 'size': 'size'} + def __init__(self, count=None, pool=None, size=None, **unknown_fields): + ''' + count : int + pool : str + size : int + ''' + self.count = count + self.pool = pool + self.size = size + + + +class StorageDetails(Type): + _toSchema = {'attachments': 'attachments', 'kind': 'kind', 'owner_tag': 'owner-tag', 'persistent': 'persistent', 'status': 'status', 'storage_tag': 'storage-tag'} + _toPy = {'attachments': 'attachments', 'kind': 'kind', 'owner-tag': 'owner_tag', 'persistent': 'persistent', 'status': 'status', 'storage-tag': 'storage_tag'} + def __init__(self, attachments=None, kind=None, owner_tag=None, persistent=None, status=None, storage_tag=None, **unknown_fields): + ''' - attachments : typing.Mapping<~KT, +VT_co>[str, ~StorageAttachmentDetails]<~StorageAttachmentDetails> ++ attachments : typing.Mapping[str, ~StorageAttachmentDetails] + kind : int + owner_tag : str + persistent : bool + status : EntityStatus + storage_tag : str + ''' + self.attachments = attachments + self.kind = kind + self.owner_tag = owner_tag + self.persistent = persistent + self.status = EntityStatus.from_json(status) if status else None + self.storage_tag = storage_tag + + + +class StorageDetailsListResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Sequence<+T_co>[~StorageDetails]<~StorageDetails> ++ result : typing.Sequence[~StorageDetails] + ''' + self.error = Error.from_json(error) if error else None + self.result = [StorageDetails.from_json(o) for o in result or []] + + + +class StorageDetailsListResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult> ++ results : typing.Sequence[~StorageDetailsListResult] + ''' + self.results = [StorageDetailsListResult.from_json(o) for o in results or []] + + + +class StorageDetailsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : StorageDetails + ''' + self.error = Error.from_json(error) if error else None + self.result = StorageDetails.from_json(result) if result else None + + + +class StorageDetailsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult> ++ results : typing.Sequence[~StorageDetailsResult] + ''' + self.results = [StorageDetailsResult.from_json(o) for o in results or []] + + + +class StorageFilter(Type): + _toSchema = {} + _toPy = {} + def __init__(self, **unknown_fields): + ''' + + ''' + pass + + + +class StorageFilters(Type): + _toSchema = {'filters': 'filters'} + _toPy = {'filters': 'filters'} + def __init__(self, filters=None, **unknown_fields): + ''' - filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter> ++ filters : typing.Sequence[~StorageFilter] + ''' + self.filters = [StorageFilter.from_json(o) for o in filters or []] + + + +class StoragePool(Type): + _toSchema = {'attrs': 'attrs', 'name': 'name', 'provider': 'provider'} + _toPy = {'attrs': 'attrs', 'name': 'name', 'provider': 'provider'} + def __init__(self, attrs=None, name=None, provider=None, **unknown_fields): + ''' - attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ attrs : typing.Mapping[str, typing.Any] + name : str + provider : str + ''' + self.attrs = attrs + self.name = name + self.provider = provider + + + +class StoragePoolFilter(Type): + _toSchema = {'names': 'names', 'providers': 'providers'} + _toPy = {'names': 'names', 'providers': 'providers'} + def __init__(self, names=None, providers=None, **unknown_fields): + ''' - names : typing.Sequence<+T_co>[str] - providers : typing.Sequence<+T_co>[str] ++ names : typing.Sequence[str] ++ providers : typing.Sequence[str] + ''' + self.names = names + self.providers = providers + + + +class StoragePoolFilters(Type): + _toSchema = {'filters': 'filters'} + _toPy = {'filters': 'filters'} + def __init__(self, filters=None, **unknown_fields): + ''' - filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter> ++ filters : typing.Sequence[~StoragePoolFilter] + ''' + self.filters = [StoragePoolFilter.from_json(o) for o in filters or []] + + + +class StoragePoolsResult(Type): + _toSchema = {'error': 'error', 'storage_pools': 'storage-pools'} + _toPy = {'error': 'error', 'storage-pools': 'storage_pools'} + def __init__(self, error=None, storage_pools=None, **unknown_fields): + ''' + error : Error - storage_pools : typing.Sequence<+T_co>[~StoragePool]<~StoragePool> ++ storage_pools : typing.Sequence[~StoragePool] + ''' + self.error = Error.from_json(error) if error else None + self.storage_pools = [StoragePool.from_json(o) for o in storage_pools or []] + + + +class StoragePoolsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult> ++ results : typing.Sequence[~StoragePoolsResult] + ''' + self.results = [StoragePoolsResult.from_json(o) for o in results or []] + + + +class StoragesAddParams(Type): + _toSchema = {'storages': 'storages'} + _toPy = {'storages': 'storages'} + def __init__(self, storages=None, **unknown_fields): + ''' - storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams> ++ storages : typing.Sequence[~StorageAddParams] + ''' + self.storages = [StorageAddParams.from_json(o) for o in storages or []] + + + +class StringBoolResult(Type): + _toSchema = {'error': 'error', 'ok': 'ok', 'result': 'result'} + _toPy = {'error': 'error', 'ok': 'ok', 'result': 'result'} + def __init__(self, error=None, ok=None, result=None, **unknown_fields): + ''' + error : Error + ok : bool + result : str + ''' + self.error = Error.from_json(error) if error else None + self.ok = ok + self.result = result + + + +class StringBoolResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult> ++ results : typing.Sequence[~StringBoolResult] + ''' + self.results = [StringBoolResult.from_json(o) for o in results or []] + + + +class StringResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : str + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class StringResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StringResult]<~StringResult> ++ results : typing.Sequence[~StringResult] + ''' + self.results = [StringResult.from_json(o) for o in results or []] + + + +class StringsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Sequence<+T_co>[str] ++ result : typing.Sequence[str] + ''' + self.error = Error.from_json(error) if error else None + self.result = result + + + +class StringsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StringsResult]<~StringsResult> ++ results : typing.Sequence[~StringsResult] + ''' + self.results = [StringsResult.from_json(o) for o in results or []] + + + +class StringsWatchResult(Type): + _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'} + _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'} + def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields): + ''' - changes : typing.Sequence<+T_co>[str] ++ changes : typing.Sequence[str] + error : Error + watcher_id : str + ''' + self.changes = changes + self.error = Error.from_json(error) if error else None + self.watcher_id = watcher_id + + + +class StringsWatchResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult> ++ results : typing.Sequence[~StringsWatchResult] ++ ''' ++ self.results = [StringsWatchResult.from_json(o) for o in results or []] ++ ++ ++ ++class Subnet(Type): ++ _toSchema = {'cidr': 'cidr', 'life': 'life', 'provider_id': 'provider-id', 'space_tag': 'space-tag', 'status': 'status', 'vlan_tag': 'vlan-tag', 'zones': 'zones'} ++ _toPy = {'cidr': 'cidr', 'life': 'life', 'provider-id': 'provider_id', 'space-tag': 'space_tag', 'status': 'status', 'vlan-tag': 'vlan_tag', 'zones': 'zones'} ++ def __init__(self, cidr=None, life=None, provider_id=None, space_tag=None, status=None, vlan_tag=None, zones=None, **unknown_fields): ++ ''' ++ cidr : str ++ life : str ++ provider_id : str ++ space_tag : str ++ status : str ++ vlan_tag : int ++ zones : typing.Sequence[str] ++ ''' ++ self.cidr = cidr ++ self.life = life ++ self.provider_id = provider_id ++ self.space_tag = space_tag ++ self.status = status ++ self.vlan_tag = vlan_tag ++ self.zones = zones ++ ++ ++ ++class SubnetsFilters(Type): ++ _toSchema = {'space_tag': 'space-tag', 'zone': 'zone'} ++ _toPy = {'space-tag': 'space_tag', 'zone': 'zone'} ++ def __init__(self, space_tag=None, zone=None, **unknown_fields): ++ ''' ++ space_tag : str ++ zone : str ++ ''' ++ self.space_tag = space_tag ++ self.zone = zone ++ ++ ++ ++class TaggedCredential(Type): ++ _toSchema = {'credential': 'credential', 'tag': 'tag'} ++ _toPy = {'credential': 'credential', 'tag': 'tag'} ++ def __init__(self, credential=None, tag=None, **unknown_fields): ++ ''' ++ credential : CloudCredential ++ tag : str ++ ''' ++ self.credential = CloudCredential.from_json(credential) if credential else None ++ self.tag = tag ++ ++ ++ ++class TaggedCredentials(Type): ++ _toSchema = {'credentials': 'credentials'} ++ _toPy = {'credentials': 'credentials'} ++ def __init__(self, credentials=None, **unknown_fields): ++ ''' ++ credentials : typing.Sequence[~TaggedCredential] + ''' - self.results = [StringsWatchResult.from_json(o) for o in results or []] ++ self.credentials = [TaggedCredential.from_json(o) for o in credentials or []] + + + - class Subnet(Type): - _toSchema = {'cidr': 'cidr', 'life': 'life', 'provider_id': 'provider-id', 'space_tag': 'space-tag', 'status': 'status', 'vlan_tag': 'vlan-tag', 'zones': 'zones'} - _toPy = {'cidr': 'cidr', 'life': 'life', 'provider-id': 'provider_id', 'space-tag': 'space_tag', 'status': 'status', 'vlan-tag': 'vlan_tag', 'zones': 'zones'} - def __init__(self, cidr=None, life=None, provider_id=None, space_tag=None, status=None, vlan_tag=None, zones=None, **unknown_fields): ++class TokenResult(Type): ++ _toSchema = {'error': 'error', 'token': 'token'} ++ _toPy = {'error': 'error', 'token': 'token'} ++ def __init__(self, error=None, token=None, **unknown_fields): + ''' - cidr : str - life : str - provider_id : str - space_tag : str - status : str - vlan_tag : int - zones : typing.Sequence<+T_co>[str] ++ error : Error ++ token : str + ''' - self.cidr = cidr - self.life = life - self.provider_id = provider_id - self.space_tag = space_tag - self.status = status - self.vlan_tag = vlan_tag - self.zones = zones ++ self.error = Error.from_json(error) if error else None ++ self.token = token + + + - class SubnetsFilters(Type): - _toSchema = {'space_tag': 'space-tag', 'zone': 'zone'} - _toPy = {'space-tag': 'space_tag', 'zone': 'zone'} - def __init__(self, space_tag=None, zone=None, **unknown_fields): ++class TokenResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): + ''' - space_tag : str - zone : str ++ results : typing.Sequence[~TokenResult] + ''' - self.space_tag = space_tag - self.zone = zone ++ self.results = [TokenResult.from_json(o) for o in results or []] + + + +class Tools(Type): + _toSchema = {'sha256': 'sha256', 'size': 'size', 'url': 'url', 'version': 'version'} + _toPy = {'sha256': 'sha256', 'size': 'size', 'url': 'url', 'version': 'version'} + def __init__(self, sha256=None, size=None, url=None, version=None, **unknown_fields): + ''' + sha256 : str + size : int + url : str + version : Binary + ''' + self.sha256 = sha256 + self.size = size + self.url = url + self.version = Binary.from_json(version) if version else None + + + +class ToolsResult(Type): + _toSchema = {'disable_ssl_hostname_verification': 'disable-ssl-hostname-verification', 'error': 'error', 'tools': 'tools'} + _toPy = {'disable-ssl-hostname-verification': 'disable_ssl_hostname_verification', 'error': 'error', 'tools': 'tools'} + def __init__(self, disable_ssl_hostname_verification=None, error=None, tools=None, **unknown_fields): + ''' + disable_ssl_hostname_verification : bool + error : Error - tools : typing.Sequence<+T_co>[~Tools]<~Tools> ++ tools : typing.Sequence[~Tools] + ''' + self.disable_ssl_hostname_verification = disable_ssl_hostname_verification + self.error = Error.from_json(error) if error else None + self.tools = [Tools.from_json(o) for o in tools or []] + + + +class ToolsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult> ++ results : typing.Sequence[~ToolsResult] + ''' + self.results = [ToolsResult.from_json(o) for o in results or []] + + + +class TrackArgs(Type): + _toSchema = {'payloads': 'payloads'} + _toPy = {'payloads': 'payloads'} + def __init__(self, payloads=None, **unknown_fields): + ''' - payloads : typing.Sequence<+T_co>[~Payload]<~Payload> ++ payloads : typing.Sequence[~Payload] + ''' + self.payloads = [Payload.from_json(o) for o in payloads or []] + + + +class TrackPayloadArgs(Type): + _toSchema = {'payloads': 'payloads'} + _toPy = {'payloads': 'payloads'} + def __init__(self, payloads=None, **unknown_fields): + ''' - payloads : typing.Sequence<+T_co>[~Payload]<~Payload> ++ payloads : typing.Sequence[~Payload] + ''' + self.payloads = [Payload.from_json(o) for o in payloads or []] + + + +class UndertakerModelInfo(Type): + _toSchema = {'global_name': 'global-name', 'is_system': 'is-system', 'life': 'life', 'name': 'name', 'uuid': 'uuid'} + _toPy = {'global-name': 'global_name', 'is-system': 'is_system', 'life': 'life', 'name': 'name', 'uuid': 'uuid'} + def __init__(self, global_name=None, is_system=None, life=None, name=None, uuid=None, **unknown_fields): + ''' + global_name : str + is_system : bool + life : str + name : str + uuid : str + ''' + self.global_name = global_name + self.is_system = is_system + self.life = life + self.name = name + self.uuid = uuid + + + +class UndertakerModelInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : UndertakerModelInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = UndertakerModelInfo.from_json(result) if result else None + + + +class UnitNetworkConfig(Type): + _toSchema = {'binding_name': 'binding-name', 'unit_tag': 'unit-tag'} + _toPy = {'binding-name': 'binding_name', 'unit-tag': 'unit_tag'} + def __init__(self, binding_name=None, unit_tag=None, **unknown_fields): + ''' + binding_name : str + unit_tag : str + ''' + self.binding_name = binding_name + self.unit_tag = unit_tag + + + +class UnitNetworkConfigResult(Type): + _toSchema = {'error': 'error', 'info': 'info'} + _toPy = {'error': 'error', 'info': 'info'} + def __init__(self, error=None, info=None, **unknown_fields): + ''' + error : Error - info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig> ++ info : typing.Sequence[~NetworkConfig] + ''' + self.error = Error.from_json(error) if error else None + self.info = [NetworkConfig.from_json(o) for o in info or []] + + + +class UnitNetworkConfigResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult> ++ results : typing.Sequence[~UnitNetworkConfigResult] + ''' + self.results = [UnitNetworkConfigResult.from_json(o) for o in results or []] + + + ++class UnitRefreshResult(Type): ++ _toSchema = {'error': 'Error', 'life': 'Life', 'resolved': 'Resolved'} ++ _toPy = {'Error': 'error', 'Life': 'life', 'Resolved': 'resolved'} ++ def __init__(self, error=None, life=None, resolved=None, **unknown_fields): ++ ''' ++ error : Error ++ life : str ++ resolved : str ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.life = life ++ self.resolved = resolved ++ ++ ++ ++class UnitRefreshResults(Type): ++ _toSchema = {'results': 'Results'} ++ _toPy = {'Results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~UnitRefreshResult] ++ ''' ++ self.results = [UnitRefreshResult.from_json(o) for o in results or []] ++ ++ ++ +class UnitResourceResult(Type): + _toSchema = {'errorresult': 'ErrorResult', 'resource': 'resource'} + _toPy = {'ErrorResult': 'errorresult', 'resource': 'resource'} + def __init__(self, errorresult=None, resource=None, **unknown_fields): + ''' + errorresult : ErrorResult + resource : Resource + ''' + self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None + self.resource = Resource.from_json(resource) if resource else None + + + +class UnitResources(Type): + _toSchema = {'download_progress': 'download-progress', 'entity': 'Entity', 'resources': 'resources'} + _toPy = {'Entity': 'entity', 'download-progress': 'download_progress', 'resources': 'resources'} + def __init__(self, entity=None, download_progress=None, resources=None, **unknown_fields): + ''' + entity : Entity - download_progress : typing.Mapping<~KT, +VT_co>[str, int] - resources : typing.Sequence<+T_co>[~Resource]<~Resource> ++ download_progress : typing.Mapping[str, int] ++ resources : typing.Sequence[~Resource] + ''' + self.entity = Entity.from_json(entity) if entity else None + self.download_progress = download_progress + self.resources = [Resource.from_json(o) for o in resources or []] + + + +class UnitResourcesResult(Type): + _toSchema = {'errorresult': 'ErrorResult', 'resources': 'resources'} + _toPy = {'ErrorResult': 'errorresult', 'resources': 'resources'} + def __init__(self, errorresult=None, resources=None, **unknown_fields): + ''' + errorresult : ErrorResult - resources : typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult> ++ resources : typing.Sequence[~UnitResourceResult] + ''' + self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None + self.resources = [UnitResourceResult.from_json(o) for o in resources or []] + + + +class UnitSettings(Type): + _toSchema = {'version': 'version'} + _toPy = {'version': 'version'} + def __init__(self, version=None, **unknown_fields): + ''' + version : int + ''' + self.version = version + + + +class UnitStatus(Type): + _toSchema = {'agent_status': 'agent-status', 'charm': 'charm', 'leader': 'leader', 'machine': 'machine', 'opened_ports': 'opened-ports', 'public_address': 'public-address', 'subordinates': 'subordinates', 'workload_status': 'workload-status', 'workload_version': 'workload-version'} + _toPy = {'agent-status': 'agent_status', 'charm': 'charm', 'leader': 'leader', 'machine': 'machine', 'opened-ports': 'opened_ports', 'public-address': 'public_address', 'subordinates': 'subordinates', 'workload-status': 'workload_status', 'workload-version': 'workload_version'} + def __init__(self, agent_status=None, charm=None, leader=None, machine=None, opened_ports=None, public_address=None, subordinates=None, workload_status=None, workload_version=None, **unknown_fields): + ''' + agent_status : DetailedStatus + charm : str + leader : bool + machine : str - opened_ports : typing.Sequence<+T_co>[str] ++ opened_ports : typing.Sequence[str] + public_address : str - subordinates : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus> ++ subordinates : typing.Mapping[str, ~UnitStatus] + workload_status : DetailedStatus + workload_version : str + ''' + self.agent_status = DetailedStatus.from_json(agent_status) if agent_status else None + self.charm = charm + self.leader = leader + self.machine = machine + self.opened_ports = opened_ports + self.public_address = public_address + self.subordinates = subordinates + self.workload_status = DetailedStatus.from_json(workload_status) if workload_status else None + self.workload_version = workload_version + + + +class UnitsNetworkConfig(Type): + _toSchema = {'args': 'args'} + _toPy = {'args': 'args'} + def __init__(self, args=None, **unknown_fields): + ''' - args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig> ++ args : typing.Sequence[~UnitNetworkConfig] + ''' + self.args = [UnitNetworkConfig.from_json(o) for o in args or []] + + + ++class UnitsResolved(Type): ++ _toSchema = {'all_': 'all', 'retry': 'retry', 'tags': 'tags'} ++ _toPy = {'all': 'all_', 'retry': 'retry', 'tags': 'tags'} ++ def __init__(self, all_=None, retry=None, tags=None, **unknown_fields): ++ ''' ++ all_ : bool ++ retry : bool ++ tags : Entities ++ ''' ++ self.all_ = all_ ++ self.retry = retry ++ self.tags = Entities.from_json(tags) if tags else None ++ ++ ++ +class UnsetModelDefaults(Type): + _toSchema = {'keys': 'keys'} + _toPy = {'keys': 'keys'} + def __init__(self, keys=None, **unknown_fields): + ''' - keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys> ++ keys : typing.Sequence[~ModelUnsetKeys] + ''' + self.keys = [ModelUnsetKeys.from_json(o) for o in keys or []] + + + ++class UpdateApplicationServiceArg(Type): ++ _toSchema = {'addresses': 'addresses', 'application_tag': 'application-tag', 'provider_id': 'provider-id'} ++ _toPy = {'addresses': 'addresses', 'application-tag': 'application_tag', 'provider-id': 'provider_id'} ++ def __init__(self, addresses=None, application_tag=None, provider_id=None, **unknown_fields): ++ ''' ++ addresses : typing.Sequence[~Address] ++ application_tag : str ++ provider_id : str ++ ''' ++ self.addresses = [Address.from_json(o) for o in addresses or []] ++ self.application_tag = application_tag ++ self.provider_id = provider_id ++ ++ ++ ++class UpdateApplicationServiceArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~UpdateApplicationServiceArg] ++ ''' ++ self.args = [UpdateApplicationServiceArg.from_json(o) for o in args or []] ++ ++ ++ ++class UpdateApplicationUnitArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~UpdateApplicationUnits] ++ ''' ++ self.args = [UpdateApplicationUnits.from_json(o) for o in args or []] ++ ++ ++ ++class UpdateApplicationUnits(Type): ++ _toSchema = {'application_tag': 'application-tag', 'units': 'units'} ++ _toPy = {'application-tag': 'application_tag', 'units': 'units'} ++ def __init__(self, application_tag=None, units=None, **unknown_fields): ++ ''' ++ application_tag : str ++ units : typing.Sequence[~ApplicationUnitParams] ++ ''' ++ self.application_tag = application_tag ++ self.units = [ApplicationUnitParams.from_json(o) for o in units or []] ++ ++ ++ +class UpdateBehavior(Type): + _toSchema = {'enable_os_refresh_update': 'enable-os-refresh-update', 'enable_os_upgrade': 'enable-os-upgrade'} + _toPy = {'enable-os-refresh-update': 'enable_os_refresh_update', 'enable-os-upgrade': 'enable_os_upgrade'} + def __init__(self, enable_os_refresh_update=None, enable_os_upgrade=None, **unknown_fields): + ''' + enable_os_refresh_update : bool + enable_os_upgrade : bool + ''' + self.enable_os_refresh_update = enable_os_refresh_update + self.enable_os_upgrade = enable_os_upgrade + + + +class UpdateCloudCredential(Type): + _toSchema = {'credential': 'credential', 'tag': 'tag'} + _toPy = {'credential': 'credential', 'tag': 'tag'} + def __init__(self, credential=None, tag=None, **unknown_fields): + ''' + credential : CloudCredential + tag : str + ''' + self.credential = CloudCredential.from_json(credential) if credential else None + self.tag = tag + + + +class UpdateCloudCredentials(Type): + _toSchema = {'credentials': 'credentials'} + _toPy = {'credentials': 'credentials'} + def __init__(self, credentials=None, **unknown_fields): + ''' - credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential> ++ credentials : typing.Sequence[~UpdateCloudCredential] + ''' + self.credentials = [UpdateCloudCredential.from_json(o) for o in credentials or []] + + + ++class UpdateCredentialArgs(Type): ++ _toSchema = {'credentials': 'credentials', 'force': 'force'} ++ _toPy = {'credentials': 'credentials', 'force': 'force'} ++ def __init__(self, credentials=None, force=None, **unknown_fields): ++ ''' ++ credentials : typing.Sequence[~TaggedCredential] ++ force : bool ++ ''' ++ self.credentials = [TaggedCredential.from_json(o) for o in credentials or []] ++ self.force = force ++ ++ ++ ++class UpdateCredentialModelResult(Type): ++ _toSchema = {'errors': 'errors', 'name': 'name', 'uuid': 'uuid'} ++ _toPy = {'errors': 'errors', 'name': 'name', 'uuid': 'uuid'} ++ def __init__(self, errors=None, name=None, uuid=None, **unknown_fields): ++ ''' ++ errors : typing.Sequence[~ErrorResult] ++ name : str ++ uuid : str ++ ''' ++ self.errors = [ErrorResult.from_json(o) for o in errors or []] ++ self.name = name ++ self.uuid = uuid ++ ++ ++ ++class UpdateCredentialResult(Type): ++ _toSchema = {'error': 'error', 'models': 'models', 'tag': 'tag'} ++ _toPy = {'error': 'error', 'models': 'models', 'tag': 'tag'} ++ def __init__(self, error=None, models=None, tag=None, **unknown_fields): ++ ''' ++ error : Error ++ models : typing.Sequence[~UpdateCredentialModelResult] ++ tag : str ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.models = [UpdateCredentialModelResult.from_json(o) for o in models or []] ++ self.tag = tag ++ ++ ++ ++class UpdateCredentialResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~UpdateCredentialResult] ++ ''' ++ self.results = [UpdateCredentialResult.from_json(o) for o in results or []] ++ ++ ++ ++class UpdateSeriesArg(Type): ++ _toSchema = {'force': 'force', 'series': 'series', 'tag': 'tag'} ++ _toPy = {'force': 'force', 'series': 'series', 'tag': 'tag'} ++ def __init__(self, force=None, series=None, tag=None, **unknown_fields): ++ ''' ++ force : bool ++ series : str ++ tag : Entity ++ ''' ++ self.force = force ++ self.series = series ++ self.tag = Entity.from_json(tag) if tag else None ++ ++ ++ ++class UpdateSeriesArgs(Type): ++ _toSchema = {'args': 'args'} ++ _toPy = {'args': 'args'} ++ def __init__(self, args=None, **unknown_fields): ++ ''' ++ args : typing.Sequence[~UpdateSeriesArg] ++ ''' ++ self.args = [UpdateSeriesArg.from_json(o) for o in args or []] ++ ++ ++ +class UpgradeMongoParams(Type): + _toSchema = {'target': 'target'} + _toPy = {'target': 'target'} + def __init__(self, target=None, **unknown_fields): + ''' + target : MongoVersion + ''' + self.target = MongoVersion.from_json(target) if target else None + + + ++class UpgradeSeriesNotificationParam(Type): ++ _toSchema = {'entity': 'entity', 'watcher_id': 'watcher-id'} ++ _toPy = {'entity': 'entity', 'watcher-id': 'watcher_id'} ++ def __init__(self, entity=None, watcher_id=None, **unknown_fields): ++ ''' ++ entity : Entity ++ watcher_id : str ++ ''' ++ self.entity = Entity.from_json(entity) if entity else None ++ self.watcher_id = watcher_id ++ ++ ++ ++class UpgradeSeriesNotificationParams(Type): ++ _toSchema = {'params': 'params'} ++ _toPy = {'params': 'params'} ++ def __init__(self, params=None, **unknown_fields): ++ ''' ++ params : typing.Sequence[~UpgradeSeriesNotificationParam] ++ ''' ++ self.params = [UpgradeSeriesNotificationParam.from_json(o) for o in params or []] ++ ++ ++ ++class UpgradeSeriesStartUnitCompletionParam(Type): ++ _toSchema = {'entities': 'entities', 'message': 'message'} ++ _toPy = {'entities': 'entities', 'message': 'message'} ++ def __init__(self, entities=None, message=None, **unknown_fields): ++ ''' ++ entities : typing.Sequence[~Entity] ++ message : str ++ ''' ++ self.entities = [Entity.from_json(o) for o in entities or []] ++ self.message = message ++ ++ ++ ++class UpgradeSeriesStatusParam(Type): ++ _toSchema = {'entity': 'entity', 'message': 'message', 'status': 'status'} ++ _toPy = {'entity': 'entity', 'message': 'message', 'status': 'status'} ++ def __init__(self, entity=None, message=None, status=None, **unknown_fields): ++ ''' ++ entity : Entity ++ message : str ++ status : str ++ ''' ++ self.entity = Entity.from_json(entity) if entity else None ++ self.message = message ++ self.status = status ++ ++ ++ ++class UpgradeSeriesStatusParams(Type): ++ _toSchema = {'params': 'params'} ++ _toPy = {'params': 'params'} ++ def __init__(self, params=None, **unknown_fields): ++ ''' ++ params : typing.Sequence[~UpgradeSeriesStatusParam] ++ ''' ++ self.params = [UpgradeSeriesStatusParam.from_json(o) for o in params or []] ++ ++ ++ ++class UpgradeSeriesStatusResult(Type): ++ _toSchema = {'error': 'error', 'status': 'status'} ++ _toPy = {'error': 'error', 'status': 'status'} ++ def __init__(self, error=None, status=None, **unknown_fields): ++ ''' ++ error : Error ++ status : str ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.status = status ++ ++ ++ ++class UpgradeSeriesStatusResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~UpgradeSeriesStatusResult] ++ ''' ++ self.results = [UpgradeSeriesStatusResult.from_json(o) for o in results or []] ++ ++ ++ ++class UpgradeSeriesUnitsResult(Type): ++ _toSchema = {'error': 'error', 'unit_names': 'unit-names'} ++ _toPy = {'error': 'error', 'unit-names': 'unit_names'} ++ def __init__(self, error=None, unit_names=None, **unknown_fields): ++ ''' ++ error : Error ++ unit_names : typing.Sequence[str] ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.unit_names = unit_names ++ ++ ++ ++class UpgradeSeriesUnitsResults(Type): ++ _toSchema = {'results': 'Results'} ++ _toPy = {'Results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~UpgradeSeriesUnitsResult] ++ ''' ++ self.results = [UpgradeSeriesUnitsResult.from_json(o) for o in results or []] ++ ++ ++ +class UserAccess(Type): + _toSchema = {'access': 'access', 'user_tag': 'user-tag'} + _toPy = {'access': 'access', 'user-tag': 'user_tag'} + def __init__(self, access=None, user_tag=None, **unknown_fields): + ''' + access : str + user_tag : str + ''' + self.access = access + self.user_tag = user_tag + + + +class UserAccessResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : UserAccess + ''' + self.error = Error.from_json(error) if error else None + self.result = UserAccess.from_json(result) if result else None + + + +class UserAccessResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult> ++ results : typing.Sequence[~UserAccessResult] + ''' + self.results = [UserAccessResult.from_json(o) for o in results or []] + + + +class UserCloud(Type): + _toSchema = {'cloud_tag': 'cloud-tag', 'user_tag': 'user-tag'} + _toPy = {'cloud-tag': 'cloud_tag', 'user-tag': 'user_tag'} + def __init__(self, cloud_tag=None, user_tag=None, **unknown_fields): + ''' + cloud_tag : str + user_tag : str + ''' + self.cloud_tag = cloud_tag + self.user_tag = user_tag + + + +class UserClouds(Type): + _toSchema = {'user_clouds': 'user-clouds'} + _toPy = {'user-clouds': 'user_clouds'} + def __init__(self, user_clouds=None, **unknown_fields): + ''' - user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud> ++ user_clouds : typing.Sequence[~UserCloud] + ''' + self.user_clouds = [UserCloud.from_json(o) for o in user_clouds or []] + + + +class UserInfo(Type): + _toSchema = {'access': 'access', 'created_by': 'created-by', 'date_created': 'date-created', 'disabled': 'disabled', 'display_name': 'display-name', 'last_connection': 'last-connection', 'username': 'username'} + _toPy = {'access': 'access', 'created-by': 'created_by', 'date-created': 'date_created', 'disabled': 'disabled', 'display-name': 'display_name', 'last-connection': 'last_connection', 'username': 'username'} + def __init__(self, access=None, created_by=None, date_created=None, disabled=None, display_name=None, last_connection=None, username=None, **unknown_fields): + ''' + access : str + created_by : str + date_created : str + disabled : bool + display_name : str + last_connection : str + username : str + ''' + self.access = access + self.created_by = created_by + self.date_created = date_created + self.disabled = disabled + self.display_name = display_name + self.last_connection = last_connection + self.username = username + + + +class UserInfoRequest(Type): + _toSchema = {'entities': 'entities', 'include_disabled': 'include-disabled'} + _toPy = {'entities': 'entities', 'include-disabled': 'include_disabled'} + def __init__(self, entities=None, include_disabled=None, **unknown_fields): + ''' - entities : typing.Sequence<+T_co>[~Entity]<~Entity> ++ entities : typing.Sequence[~Entity] + include_disabled : bool + ''' + self.entities = [Entity.from_json(o) for o in entities or []] + self.include_disabled = include_disabled + + + +class UserInfoResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : UserInfo + ''' + self.error = Error.from_json(error) if error else None + self.result = UserInfo.from_json(result) if result else None + + + +class UserInfoResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult> ++ results : typing.Sequence[~UserInfoResult] + ''' + self.results = [UserInfoResult.from_json(o) for o in results or []] + + + +class UserModel(Type): + _toSchema = {'last_connection': 'last-connection', 'model': 'model'} + _toPy = {'last-connection': 'last_connection', 'model': 'model'} + def __init__(self, last_connection=None, model=None, **unknown_fields): + ''' + last_connection : str + model : Model + ''' + self.last_connection = last_connection + self.model = Model.from_json(model) if model else None + + + +class UserModelList(Type): + _toSchema = {'user_models': 'user-models'} + _toPy = {'user-models': 'user_models'} + def __init__(self, user_models=None, **unknown_fields): + ''' - user_models : typing.Sequence<+T_co>[~UserModel]<~UserModel> ++ user_models : typing.Sequence[~UserModel] + ''' + self.user_models = [UserModel.from_json(o) for o in user_models or []] + + + +class Value(Type): + _toSchema = {'arch': 'arch', 'container': 'container', 'cores': 'cores', 'cpu_power': 'cpu-power', 'instance_type': 'instance-type', 'mem': 'mem', 'root_disk': 'root-disk', 'spaces': 'spaces', 'tags': 'tags', 'virt_type': 'virt-type'} + _toPy = {'arch': 'arch', 'container': 'container', 'cores': 'cores', 'cpu-power': 'cpu_power', 'instance-type': 'instance_type', 'mem': 'mem', 'root-disk': 'root_disk', 'spaces': 'spaces', 'tags': 'tags', 'virt-type': 'virt_type'} + def __init__(self, arch=None, container=None, cores=None, cpu_power=None, instance_type=None, mem=None, root_disk=None, spaces=None, tags=None, virt_type=None, **unknown_fields): + ''' + arch : str + container : str + cores : int + cpu_power : int + instance_type : str + mem : int + root_disk : int - spaces : typing.Sequence<+T_co>[str] - tags : typing.Sequence<+T_co>[str] ++ spaces : typing.Sequence[str] ++ tags : typing.Sequence[str] + virt_type : str + ''' + self.arch = arch + self.container = container + self.cores = cores + self.cpu_power = cpu_power + self.instance_type = instance_type + self.mem = mem + self.root_disk = root_disk + self.spaces = spaces + self.tags = tags + self.virt_type = virt_type + + + +class Version(Type): + _toSchema = {'version': 'version'} + _toPy = {'version': 'version'} + def __init__(self, version=None, **unknown_fields): + ''' + version : Binary + ''' + self.version = Binary.from_json(version) if version else None + + + +class VersionResult(Type): + _toSchema = {'error': 'error', 'version': 'version'} + _toPy = {'error': 'error', 'version': 'version'} + def __init__(self, error=None, version=None, **unknown_fields): + ''' + error : Error + version : Number + ''' + self.error = Error.from_json(error) if error else None + self.version = Number.from_json(version) if version else None + + + +class VersionResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VersionResult]<~VersionResult> ++ results : typing.Sequence[~VersionResult] + ''' + self.results = [VersionResult.from_json(o) for o in results or []] + + + +class Volume(Type): + _toSchema = {'info': 'info', 'volume_tag': 'volume-tag'} + _toPy = {'info': 'info', 'volume-tag': 'volume_tag'} + def __init__(self, info=None, volume_tag=None, **unknown_fields): + ''' + info : VolumeInfo + volume_tag : str + ''' + self.info = VolumeInfo.from_json(info) if info else None + self.volume_tag = volume_tag + + + +class VolumeAttachment(Type): + _toSchema = {'info': 'info', 'machine_tag': 'machine-tag', 'volume_tag': 'volume-tag'} + _toPy = {'info': 'info', 'machine-tag': 'machine_tag', 'volume-tag': 'volume_tag'} + def __init__(self, info=None, machine_tag=None, volume_tag=None, **unknown_fields): + ''' + info : VolumeAttachmentInfo + machine_tag : str + volume_tag : str + ''' + self.info = VolumeAttachmentInfo.from_json(info) if info else None + self.machine_tag = machine_tag + self.volume_tag = volume_tag + + + +class VolumeAttachmentDetails(Type): + _toSchema = {'life': 'life', 'volumeattachmentinfo': 'VolumeAttachmentInfo'} + _toPy = {'VolumeAttachmentInfo': 'volumeattachmentinfo', 'life': 'life'} + def __init__(self, volumeattachmentinfo=None, life=None, **unknown_fields): + ''' + volumeattachmentinfo : VolumeAttachmentInfo + life : str + ''' + self.volumeattachmentinfo = VolumeAttachmentInfo.from_json(volumeattachmentinfo) if volumeattachmentinfo else None + self.life = life + + + +class VolumeAttachmentInfo(Type): + _toSchema = {'bus_address': 'bus-address', 'device_link': 'device-link', 'device_name': 'device-name', 'read_only': 'read-only'} + _toPy = {'bus-address': 'bus_address', 'device-link': 'device_link', 'device-name': 'device_name', 'read-only': 'read_only'} + def __init__(self, bus_address=None, device_link=None, device_name=None, read_only=None, **unknown_fields): + ''' + bus_address : str + device_link : str + device_name : str + read_only : bool + ''' + self.bus_address = bus_address + self.device_link = device_link + self.device_name = device_name + self.read_only = read_only + + + +class VolumeAttachmentParams(Type): + _toSchema = {'instance_id': 'instance-id', 'machine_tag': 'machine-tag', 'provider': 'provider', 'read_only': 'read-only', 'volume_id': 'volume-id', 'volume_tag': 'volume-tag'} + _toPy = {'instance-id': 'instance_id', 'machine-tag': 'machine_tag', 'provider': 'provider', 'read-only': 'read_only', 'volume-id': 'volume_id', 'volume-tag': 'volume_tag'} + def __init__(self, instance_id=None, machine_tag=None, provider=None, read_only=None, volume_id=None, volume_tag=None, **unknown_fields): + ''' + instance_id : str + machine_tag : str + provider : str + read_only : bool + volume_id : str + volume_tag : str + ''' + self.instance_id = instance_id + self.machine_tag = machine_tag + self.provider = provider + self.read_only = read_only + self.volume_id = volume_id + self.volume_tag = volume_tag + + + +class VolumeAttachmentParamsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : VolumeAttachmentParams + ''' + self.error = Error.from_json(error) if error else None + self.result = VolumeAttachmentParams.from_json(result) if result else None + + + +class VolumeAttachmentParamsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult> ++ results : typing.Sequence[~VolumeAttachmentParamsResult] + ''' + self.results = [VolumeAttachmentParamsResult.from_json(o) for o in results or []] + + + ++class VolumeAttachmentPlan(Type): ++ _toSchema = {'block_device': 'block-device', 'life': 'life', 'machine_tag': 'machine-tag', 'plan_info': 'plan-info', 'volume_tag': 'volume-tag'} ++ _toPy = {'block-device': 'block_device', 'life': 'life', 'machine-tag': 'machine_tag', 'plan-info': 'plan_info', 'volume-tag': 'volume_tag'} ++ def __init__(self, block_device=None, life=None, machine_tag=None, plan_info=None, volume_tag=None, **unknown_fields): ++ ''' ++ block_device : BlockDevice ++ life : str ++ machine_tag : str ++ plan_info : VolumeAttachmentPlanInfo ++ volume_tag : str ++ ''' ++ self.block_device = BlockDevice.from_json(block_device) if block_device else None ++ self.life = life ++ self.machine_tag = machine_tag ++ self.plan_info = VolumeAttachmentPlanInfo.from_json(plan_info) if plan_info else None ++ self.volume_tag = volume_tag ++ ++ ++ ++class VolumeAttachmentPlanInfo(Type): ++ _toSchema = {'device_attributes': 'device-attributes', 'device_type': 'device-type'} ++ _toPy = {'device-attributes': 'device_attributes', 'device-type': 'device_type'} ++ def __init__(self, device_attributes=None, device_type=None, **unknown_fields): ++ ''' ++ device_attributes : typing.Mapping[str, str] ++ device_type : str ++ ''' ++ self.device_attributes = device_attributes ++ self.device_type = device_type ++ ++ ++ ++class VolumeAttachmentPlanResult(Type): ++ _toSchema = {'error': 'error', 'result': 'result'} ++ _toPy = {'error': 'error', 'result': 'result'} ++ def __init__(self, error=None, result=None, **unknown_fields): ++ ''' ++ error : Error ++ result : VolumeAttachmentPlan ++ ''' ++ self.error = Error.from_json(error) if error else None ++ self.result = VolumeAttachmentPlan.from_json(result) if result else None ++ ++ ++ ++class VolumeAttachmentPlanResults(Type): ++ _toSchema = {'results': 'results'} ++ _toPy = {'results': 'results'} ++ def __init__(self, results=None, **unknown_fields): ++ ''' ++ results : typing.Sequence[~VolumeAttachmentPlanResult] ++ ''' ++ self.results = [VolumeAttachmentPlanResult.from_json(o) for o in results or []] ++ ++ ++ ++class VolumeAttachmentPlans(Type): ++ _toSchema = {'volume_plans': 'volume-plans'} ++ _toPy = {'volume-plans': 'volume_plans'} ++ def __init__(self, volume_plans=None, **unknown_fields): ++ ''' ++ volume_plans : typing.Sequence[~VolumeAttachmentPlan] ++ ''' ++ self.volume_plans = [VolumeAttachmentPlan.from_json(o) for o in volume_plans or []] ++ ++ ++ +class VolumeAttachmentResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : VolumeAttachment + ''' + self.error = Error.from_json(error) if error else None + self.result = VolumeAttachment.from_json(result) if result else None + + + +class VolumeAttachmentResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult> ++ results : typing.Sequence[~VolumeAttachmentResult] + ''' + self.results = [VolumeAttachmentResult.from_json(o) for o in results or []] + + + +class VolumeAttachments(Type): + _toSchema = {'volume_attachments': 'volume-attachments'} + _toPy = {'volume-attachments': 'volume_attachments'} + def __init__(self, volume_attachments=None, **unknown_fields): + ''' - volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment> ++ volume_attachments : typing.Sequence[~VolumeAttachment] + ''' + self.volume_attachments = [VolumeAttachment.from_json(o) for o in volume_attachments or []] + + + +class VolumeDetails(Type): + _toSchema = {'info': 'info', 'machine_attachments': 'machine-attachments', 'status': 'status', 'storage': 'storage', 'volume_tag': 'volume-tag'} + _toPy = {'info': 'info', 'machine-attachments': 'machine_attachments', 'status': 'status', 'storage': 'storage', 'volume-tag': 'volume_tag'} + def __init__(self, info=None, machine_attachments=None, status=None, storage=None, volume_tag=None, **unknown_fields): + ''' + info : VolumeInfo - machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo> ++ machine_attachments : typing.Mapping[str, ~VolumeAttachmentInfo] + status : EntityStatus + storage : StorageDetails + volume_tag : str + ''' + self.info = VolumeInfo.from_json(info) if info else None + self.machine_attachments = machine_attachments + self.status = EntityStatus.from_json(status) if status else None + self.storage = StorageDetails.from_json(storage) if storage else None + self.volume_tag = volume_tag + + + +class VolumeDetailsListResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error - result : typing.Sequence<+T_co>[~VolumeDetails]<~VolumeDetails> ++ result : typing.Sequence[~VolumeDetails] + ''' + self.error = Error.from_json(error) if error else None + self.result = [VolumeDetails.from_json(o) for o in result or []] + + + +class VolumeDetailsListResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult> ++ results : typing.Sequence[~VolumeDetailsListResult] + ''' + self.results = [VolumeDetailsListResult.from_json(o) for o in results or []] + + + +class VolumeFilter(Type): + _toSchema = {'machines': 'machines'} + _toPy = {'machines': 'machines'} + def __init__(self, machines=None, **unknown_fields): + ''' - machines : typing.Sequence<+T_co>[str] ++ machines : typing.Sequence[str] + ''' + self.machines = machines + + + +class VolumeFilters(Type): + _toSchema = {'filters': 'filters'} + _toPy = {'filters': 'filters'} + def __init__(self, filters=None, **unknown_fields): + ''' - filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter> ++ filters : typing.Sequence[~VolumeFilter] + ''' + self.filters = [VolumeFilter.from_json(o) for o in filters or []] + + + +class VolumeInfo(Type): + _toSchema = {'hardware_id': 'hardware-id', 'persistent': 'persistent', 'size': 'size', 'volume_id': 'volume-id'} + _toPy = {'hardware-id': 'hardware_id', 'persistent': 'persistent', 'size': 'size', 'volume-id': 'volume_id'} + def __init__(self, hardware_id=None, persistent=None, size=None, volume_id=None, **unknown_fields): + ''' + hardware_id : str + persistent : bool + size : int + volume_id : str + ''' + self.hardware_id = hardware_id + self.persistent = persistent + self.size = size + self.volume_id = volume_id + + + +class VolumeParams(Type): + _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume_tag': 'volume-tag'} + _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'tags': 'tags', 'volume-tag': 'volume_tag'} + def __init__(self, attachment=None, attributes=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields): + ''' + attachment : VolumeAttachmentParams - attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any] ++ attributes : typing.Mapping[str, typing.Any] + provider : str + size : int - tags : typing.Mapping<~KT, +VT_co>[str, str] ++ tags : typing.Mapping[str, str] + volume_tag : str + ''' + self.attachment = VolumeAttachmentParams.from_json(attachment) if attachment else None + self.attributes = attributes + self.provider = provider + self.size = size + self.tags = tags + self.volume_tag = volume_tag + + + +class VolumeParamsResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : VolumeParams + ''' + self.error = Error.from_json(error) if error else None + self.result = VolumeParams.from_json(result) if result else None + + + +class VolumeParamsResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult> ++ results : typing.Sequence[~VolumeParamsResult] + ''' + self.results = [VolumeParamsResult.from_json(o) for o in results or []] + + + +class VolumeResult(Type): + _toSchema = {'error': 'error', 'result': 'result'} + _toPy = {'error': 'error', 'result': 'result'} + def __init__(self, error=None, result=None, **unknown_fields): + ''' + error : Error + result : Volume + ''' + self.error = Error.from_json(error) if error else None + self.result = Volume.from_json(result) if result else None + + + +class VolumeResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult> ++ results : typing.Sequence[~VolumeResult] + ''' + self.results = [VolumeResult.from_json(o) for o in results or []] + + + +class Volumes(Type): + _toSchema = {'volumes': 'volumes'} + _toPy = {'volumes': 'volumes'} + def __init__(self, volumes=None, **unknown_fields): + ''' - volumes : typing.Sequence<+T_co>[~Volume]<~Volume> ++ volumes : typing.Sequence[~Volume] + ''' + self.volumes = [Volume.from_json(o) for o in volumes or []] + + + +class WatchContainer(Type): + _toSchema = {'container_type': 'container-type', 'machine_tag': 'machine-tag'} + _toPy = {'container-type': 'container_type', 'machine-tag': 'machine_tag'} + def __init__(self, container_type=None, machine_tag=None, **unknown_fields): + ''' + container_type : str + machine_tag : str + ''' + self.container_type = container_type + self.machine_tag = machine_tag + + + +class WatchContainers(Type): + _toSchema = {'params': 'params'} + _toPy = {'params': 'params'} + def __init__(self, params=None, **unknown_fields): + ''' - params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer> ++ params : typing.Sequence[~WatchContainer] + ''' + self.params = [WatchContainer.from_json(o) for o in params or []] + + + +class ZoneResult(Type): + _toSchema = {'available': 'available', 'error': 'error', 'name': 'name'} + _toPy = {'available': 'available', 'error': 'error', 'name': 'name'} + def __init__(self, available=None, error=None, name=None, **unknown_fields): + ''' + available : bool + error : Error + name : str + ''' + self.available = available + self.error = Error.from_json(error) if error else None + self.name = name + + + +class ZoneResults(Type): + _toSchema = {'results': 'results'} + _toPy = {'results': 'results'} + def __init__(self, results=None, **unknown_fields): + ''' - results : typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult> ++ results : typing.Sequence[~ZoneResult] + ''' + self.results = [ZoneResult.from_json(o) for o in results or []] diff --cc modules/libjuju/juju/client/connection.py index 13770a5,0000000..f2150b7 mode 100644,000000..100644 --- a/modules/libjuju/juju/client/connection.py +++ b/modules/libjuju/juju/client/connection.py @@@ -1,577 -1,0 +1,601 @@@ +import asyncio +import base64 +import json +import logging +import ssl +import urllib.request +import weakref +from concurrent.futures import CancelledError +from http.client import HTTPSConnection + +import macaroonbakery.httpbakery as httpbakery +import macaroonbakery.bakery as bakery +import websockets +from juju import errors, tag, utils +from juju.client import client +from juju.utils import IdQueue + +log = logging.getLogger('juju.client.connection') + + +class Monitor: + """ + Monitor helper class for our Connection class. + + Contains a reference to an instantiated Connection, along with a + reference to the Connection.receiver Future. Upon inspection of + these objects, this class determines whether the connection is in + an 'error', 'connected' or 'disconnected' state. + + Use this class to stay up to date on the health of a connection, + and take appropriate action if the connection errors out due to + network issues or other unexpected circumstances. + + """ + ERROR = 'error' + CONNECTED = 'connected' + DISCONNECTING = 'disconnecting' + DISCONNECTED = 'disconnected' + + def __init__(self, connection): + self.connection = weakref.ref(connection) + self.reconnecting = asyncio.Lock(loop=connection.loop) + self.close_called = asyncio.Event(loop=connection.loop) + + @property + def status(self): + """ + Determine the status of the connection and receiver, and return + ERROR, CONNECTED, or DISCONNECTED as appropriate. + + For simplicity, we only consider ourselves to be connected + after the Connection class has setup a receiver task. This + only happens after the websocket is open, and the connection + isn't usable until that receiver has been started. + + """ + connection = self.connection() + + # the connection instance was destroyed but someone kept + # a separate reference to the monitor for some reason + if not connection: + return self.DISCONNECTED + + # connection cleanly disconnected or not yet opened + if not connection.ws: + return self.DISCONNECTED + + # close called but not yet complete + if self.close_called.is_set(): + return self.DISCONNECTING + + # connection closed uncleanly (we didn't call connection.close) + stopped = connection._receiver_task.stopped.is_set() + if stopped or not connection.ws.open: + return self.ERROR + + # everything is fine! + return self.CONNECTED + + +class Connection: + """ + Usage:: + + # Connect to an arbitrary api server + client = await Connection.connect( + api_endpoint, model_uuid, username, password, cacert) + + Note: Any connection method or constructor can accept an optional `loop` + argument to override the default event loop from `asyncio.get_event_loop`. + """ + + MAX_FRAME_SIZE = 2**22 + "Maximum size for a single frame. Defaults to 4MB." + + @classmethod + async def connect( + cls, + endpoint=None, + uuid=None, + username=None, + password=None, + cacert=None, + bakery_client=None, + loop=None, + max_frame_size=None, ++ retries=3, ++ retry_backoff=10, + ): + """Connect to the websocket. + + If uuid is None, the connection will be to the controller. Otherwise it + will be to the model. + + :param str endpoint: The hostname:port of the controller to connect to. + :param str uuid: The model UUID to connect to (None for a + controller-only connection). + :param str username: The username for controller-local users (or None + to use macaroon-based login.) + :param str password: The password for controller-local users. + :param str cacert: The CA certificate of the controller + (PEM formatted). + :param httpbakery.Client bakery_client: The macaroon bakery client to + to use when performing macaroon-based login. Macaroon tokens + acquired when logging will be saved to bakery_client.cookies. + If this is None, a default bakery_client will be used. + :param asyncio.BaseEventLoop loop: The event loop to use for async + operations. + :param int max_frame_size: The maximum websocket frame size to allow. ++ :param int retries: When connecting or reconnecting, and all endpoints ++ fail, how many times to retry the connection before giving up. ++ :param int retry_backoff: Number of seconds to increase the wait ++ between connection retry attempts (a backoff of 10 with 3 retries ++ would wait 10s, 20s, and 30s). + """ + self = cls() + if endpoint is None: + raise ValueError('no endpoint provided') + self.uuid = uuid + if bakery_client is None: + bakery_client = httpbakery.Client() + self.bakery_client = bakery_client + if username and '@' in username and not username.endswith('@local'): + # We're trying to log in as an external user - we need to use + # macaroon authentication with no username or password. + if password is not None: + raise errors.JujuAuthError('cannot log in as external ' + 'user with a password') + username = None + self.usertag = tag.user(username) + self.password = password + self.loop = loop or asyncio.get_event_loop() + + self.__request_id__ = 0 + + # The following instance variables are initialized by the + # _connect_with_redirect method, but create them here + # as a reminder that they will exist. + self.addr = None + self.ws = None + self.endpoint = None + self.cacert = None + self.info = None + + # Create that _Task objects but don't start the tasks yet. + self._pinger_task = _Task(self._pinger, self.loop) + self._receiver_task = _Task(self._receiver, self.loop) + ++ self._retries = retries ++ self._retry_backoff = retry_backoff ++ + self.facades = {} + self.messages = IdQueue(loop=self.loop) + self.monitor = Monitor(connection=self) + if max_frame_size is None: + max_frame_size = self.MAX_FRAME_SIZE + self.max_frame_size = max_frame_size + await self._connect_with_redirect([(endpoint, cacert)]) + return self + + @property + def username(self): + if not self.usertag: + return None + return self.usertag[len('user-'):] + + @property + def is_open(self): + return self.monitor.status == Monitor.CONNECTED + + def _get_ssl(self, cert=None): + return ssl.create_default_context( + purpose=ssl.Purpose.CLIENT_AUTH, cadata=cert) + + async def _open(self, endpoint, cacert): + if self.uuid: + url = "wss://{}/model/{}/api".format(endpoint, self.uuid) + else: + url = "wss://{}/api".format(endpoint) + + return (await websockets.connect( + url, + ssl=self._get_ssl(cacert), + loop=self.loop, + max_size=self.max_frame_size, + ), url, endpoint, cacert) + + async def close(self): + if not self.ws: + return + self.monitor.close_called.set() + await self._pinger_task.stopped.wait() + await self._receiver_task.stopped.wait() + await self.ws.close() + self.ws = None + + async def _recv(self, request_id): + if not self.is_open: + raise websockets.exceptions.ConnectionClosed(0, 'websocket closed') + return await self.messages.get(request_id) + + async def _receiver(self): + try: + while self.is_open: + result = await utils.run_with_interrupt( + self.ws.recv(), + self.monitor.close_called, + loop=self.loop) + if self.monitor.close_called.is_set(): + break + if result is not None: + result = json.loads(result) + await self.messages.put(result['request-id'], result) + except CancelledError: + pass + except websockets.ConnectionClosed as e: + log.warning('Receiver: Connection closed, reconnecting') + await self.messages.put_all(e) + # the reconnect has to be done as a task because the receiver will + # be cancelled by the reconnect and we don't want the reconnect + # to be aborted half-way through + self.loop.create_task(self.reconnect()) + return + except Exception as e: + log.exception("Error in receiver") + # make pending listeners aware of the error + await self.messages.put_all(e) + raise + + async def _pinger(self): + ''' + A Controller can time us out if we are silent for too long. This + is especially true in JaaS, which has a fairly strict timeout. + + To prevent timing out, we send a ping every ten seconds. + + ''' + async def _do_ping(): + try: + await pinger_facade.Ping() + await asyncio.sleep(10, loop=self.loop) + except CancelledError: + pass + + pinger_facade = client.PingerFacade.from_connection(self) + try: + while True: + await utils.run_with_interrupt( + _do_ping(), + self.monitor.close_called, + loop=self.loop) + if self.monitor.close_called.is_set(): + break + except websockets.exceptions.ConnectionClosed: + # The connection has closed - we can't do anything + # more until the connection is restarted. + log.debug('ping failed because of closed connection') + pass + + async def rpc(self, msg, encoder=None): + '''Make an RPC to the API. The message is encoded as JSON + using the given encoder if any. + :param msg: Parameters for the call (will be encoded as JSON). + :param encoder: Encoder to be used when encoding the message. + :return: The result of the call. + :raises JujuAPIError: When there's an error returned. + :raises JujuError: + ''' + self.__request_id__ += 1 + msg['request-id'] = self.__request_id__ + if'params' not in msg: + msg['params'] = {} + if "version" not in msg: + msg['version'] = self.facades[msg['type']] + outgoing = json.dumps(msg, indent=2, cls=encoder) + log.debug('connection {} -> {}'.format(id(self), outgoing)) + for attempt in range(3): + if self.monitor.status == Monitor.DISCONNECTED: + # closed cleanly; shouldn't try to reconnect + raise websockets.exceptions.ConnectionClosed( + 0, 'websocket closed') + try: + await self.ws.send(outgoing) + break + except websockets.ConnectionClosed: + if attempt == 2: + raise + log.warning('RPC: Connection closed, reconnecting') + # the reconnect has to be done in a separate task because, + # if it is triggered by the pinger, then this RPC call will + # be cancelled when the pinger is cancelled by the reconnect, + # and we don't want the reconnect to be aborted halfway through + await asyncio.wait([self.reconnect()], loop=self.loop) + if self.monitor.status != Monitor.CONNECTED: + # reconnect failed; abort and shutdown + log.error('RPC: Automatic reconnect failed') + raise + result = await self._recv(msg['request-id']) + log.debug('connection {} <- {}'.format(id(self), result)) + + if not result: + return result + + if 'error' in result: + # API Error Response + raise errors.JujuAPIError(result) + + if 'response' not in result: + # This may never happen + return result + + if 'results' in result['response']: + # Check for errors in a result list. + # TODO This loses the results that might have succeeded. + # Perhaps JujuError should return all the results including + # errors, or perhaps a keyword parameter to the rpc method + # could be added to trigger this behaviour. + err_results = [] + for res in result['response']['results']: + if res.get('error', {}).get('message'): + err_results.append(res['error']['message']) + if err_results: + raise errors.JujuError(err_results) + + elif result['response'].get('error', {}).get('message'): + raise errors.JujuError(result['response']['error']['message']) + + return result + + def _http_headers(self): + """Return dictionary of http headers necessary for making an http + connection to the endpoint of this Connection. + + :return: Dictionary of headers + + """ + if not self.usertag: + return {} + + creds = u'{}:{}'.format( + self.usertag, + self.password or '' + ) + token = base64.b64encode(creds.encode()) + return { + 'Authorization': 'Basic {}'.format(token.decode()) + } + + def https_connection(self): + """Return an https connection to this Connection's endpoint. + + Returns a 3-tuple containing:: + + 1. The :class:`HTTPSConnection` instance + 2. Dictionary of auth headers to be used with the connection + 3. The root url path (str) to be used for requests. + + """ + endpoint = self.endpoint + host, remainder = endpoint.split(':', 1) + port = remainder + if '/' in remainder: + port, _ = remainder.split('/', 1) + + conn = HTTPSConnection( + host, int(port), + context=self._get_ssl(self.cacert), + ) + + path = ( + "/model/{}".format(self.uuid) + if self.uuid else "" + ) + return conn, self._http_headers(), path + + async def clone(self): + """Return a new Connection, connected to the same websocket endpoint + as this one. + + """ + return await Connection.connect(**self.connect_params()) + + def connect_params(self): + """Return a tuple of parameters suitable for passing to + Connection.connect that can be used to make a new connection + to the same controller (and model if specified. The first + element in the returned tuple holds the endpoint argument; + the other holds a dict of the keyword args. + """ + return { + 'endpoint': self.endpoint, + 'uuid': self.uuid, + 'username': self.username, + 'password': self.password, + 'cacert': self.cacert, + 'bakery_client': self.bakery_client, + 'loop': self.loop, + 'max_frame_size': self.max_frame_size, + } + + async def controller(self): + """Return a Connection to the controller at self.endpoint + """ + return await Connection.connect( + self.endpoint, + username=self.username, + password=self.password, + cacert=self.cacert, + bakery_client=self.bakery_client, + loop=self.loop, + max_frame_size=self.max_frame_size, + ) + + async def reconnect(self): + """ Force a reconnection. + """ + monitor = self.monitor + if monitor.reconnecting.locked() or monitor.close_called.is_set(): + return + async with monitor.reconnecting: + await self.close() + await self._connect_with_login([(self.endpoint, self.cacert)]) + + async def _connect(self, endpoints): + if len(endpoints) == 0: + raise errors.JujuConnectionError('no endpoints to connect to') + + async def _try_endpoint(endpoint, cacert, delay): + if delay: + await asyncio.sleep(delay) + return await self._open(endpoint, cacert) + + # Try all endpoints in parallel, with slight increasing delay (+100ms + # for each subsequent endpoint); the delay allows us to prefer the + # earlier endpoints over the latter. Use first successful connection. + tasks = [self.loop.create_task(_try_endpoint(endpoint, cacert, + 0.1 * i)) + for i, (endpoint, cacert) in enumerate(endpoints)] - for task in asyncio.as_completed(tasks, loop=self.loop): - try: - result = await task - break - except ConnectionError: - continue # ignore; try another endpoint - else: - raise errors.JujuConnectionError( - 'Unable to connect to any endpoint: {}'.format(', '.join([ - endpoint for endpoint, cacert in endpoints]))) ++ for attempt in range(self._retries + 1): ++ for task in asyncio.as_completed(tasks, loop=self.loop): ++ try: ++ result = await task ++ break ++ except ConnectionError: ++ continue # ignore; try another endpoint ++ else: ++ _endpoints_str = ', '.join([endpoint ++ for endpoint, cacert in endpoints]) ++ if attempt < self._retries: ++ log.debug('Retrying connection to endpoints: {}; ' ++ 'attempt {} of {}'.format(_endpoints_str, ++ attempt + 1, ++ self._retries + 1)) ++ await asyncio.sleep((attempt + 1) * self._retry_backoff) ++ continue ++ else: ++ raise errors.JujuConnectionError( ++ 'Unable to connect to any endpoint: ' ++ '{}'.format(_endpoints_str)) ++ # only executed if inner loop's else did not continue ++ # (i.e., inner loop did break due to successful connection) ++ break + for task in tasks: + task.cancel() + self.ws = result[0] + self.addr = result[1] + self.endpoint = result[2] + self.cacert = result[3] + self._receiver_task.start() - log.info("Driver connected to juju %s", self.addr) ++ log.debug("Driver connected to juju %s", self.addr) + self.monitor.close_called.clear() + + async def _connect_with_login(self, endpoints): + """Connect to the websocket. + + If uuid is None, the connection will be to the controller. Otherwise it + will be to the model. + :return: The response field of login response JSON object. + """ + success = False + try: + await self._connect(endpoints) + # It's possible that we may get several discharge-required errors, + # corresponding to different levels of authentication, so retry + # a few times. + for i in range(0, 2): + result = (await self.login())['response'] + macaroonJSON = result.get('discharge-required') + if macaroonJSON is None: + self.info = result + success = True + return result + macaroon = bakery.Macaroon.from_dict(macaroonJSON) + self.bakery_client.handle_error( + httpbakery.Error( + code=httpbakery.ERR_DISCHARGE_REQUIRED, + message=result.get('discharge-required-error'), + version=macaroon.version, + info=httpbakery.ErrorInfo( + macaroon=macaroon, + macaroon_path=result.get('macaroon-path'), + ), + ), + # note: remove the port number. + 'https://' + self.endpoint + '/', + ) + raise errors.JujuAuthError('failed to authenticate ' + 'after several attempts') + finally: + if not success: + await self.close() + + async def _connect_with_redirect(self, endpoints): + try: + login_result = await self._connect_with_login(endpoints) + except errors.JujuRedirectException as e: + login_result = await self._connect_with_login(e.endpoints) + self._build_facades(login_result.get('facades', {})) + self._pinger_task.start() + + def _build_facades(self, facades): + self.facades.clear() + for facade in facades: + self.facades[facade['name']] = facade['versions'][-1] + + async def login(self): + params = {} + params['auth-tag'] = self.usertag + if self.password: + params['credentials'] = self.password + else: + macaroons = _macaroons_for_domain(self.bakery_client.cookies, + self.endpoint) + params['macaroons'] = [[bakery.macaroon_to_dict(m) for m in ms] + for ms in macaroons] + + try: + return await self.rpc({ + "type": "Admin", + "request": "Login", + "version": 3, + "params": params, + }) + except errors.JujuAPIError as e: + if e.error_code != 'redirection required': + raise + log.info('Controller requested redirect') + # Fetch additional redirection information now so that + # we can safely close the connection after login + # fails. + redirect_info = (await self.rpc({ + "type": "Admin", + "request": "RedirectInfo", + "version": 3, + }))['response'] + raise errors.JujuRedirectException(redirect_info) from e + + +class _Task: + def __init__(self, task, loop): + self.stopped = asyncio.Event(loop=loop) + self.stopped.set() + self.task = task + self.loop = loop + + def start(self): + async def run(): + try: - return await(self.task()) ++ return await self.task() + finally: + self.stopped.set() + self.stopped.clear() + self.loop.create_task(run()) + + +def _macaroons_for_domain(cookies, domain): + '''Return any macaroons from the given cookie jar that + apply to the given domain name.''' + req = urllib.request.Request('https://' + domain + '/') + cookies.add_cookie_header(req) + return httpbakery.extract_macaroons(req) diff --cc modules/libjuju/juju/client/facade.py index 9e2aabf,0000000..ec20c38 mode 100644,000000..100644 --- a/modules/libjuju/juju/client/facade.py +++ b/modules/libjuju/juju/client/facade.py @@@ -1,810 -1,0 +1,818 @@@ +import argparse +import builtins +import functools +import json +import keyword +import pprint +import re +import textwrap +import typing +from collections import defaultdict +from glob import glob +from pathlib import Path +from typing import Any, Mapping, Sequence, TypeVar, Union + +from . import codegen + +_marker = object() + - JUJU_VERSION = re.compile('[0-9]+\.[0-9-]+[\.\-][0-9a-z]+(\.[0-9]+)?') ++JUJU_VERSION = re.compile(r'[0-9]+\.[0-9-]+[\.\-][0-9a-z]+(\.[0-9]+)?') +# Workaround for https://bugs.launchpad.net/juju/+bug/1683906 +NAUGHTY_CLASSES = ['ClientFacade', 'Client', 'FullStatus', 'ModelStatusInfo', - 'ModelInfo'] ++ 'ModelInfo', 'ApplicationDeploy'] + + +# Map basic types to Python's typing with a callable +SCHEMA_TO_PYTHON = { + 'string': str, + 'integer': int, + 'float': float, + 'number': float, + 'boolean': bool, + 'object': Any, +} + + +# Friendly warning message to stick at the top of generated files. +HEADER = """\ +# DO NOT CHANGE THIS FILE! This file is auto-generated by facade.py. +# Changes will be overwritten/lost when the file is regenerated. + +""" + + +# Classes and helper functions that we'll write to _client.py +LOOKUP_FACADE = ''' +def lookup_facade(name, version): + """ + Given a facade name and version, attempt to pull that facade out + of the correct client.py file. + + """ - try: - facade = getattr(CLIENTS[str(version)], name) - except KeyError: - raise ImportError("No facades found for version {}".format(version)) - except AttributeError: - raise ImportError( - "No facade with name '{}' in version {}".format(name, version)) - return facade ++ for _version in range(int(version), 0, -1): ++ try: ++ facade = getattr(CLIENTS[str(_version)], name) ++ return facade ++ except (KeyError, AttributeError): ++ continue ++ else: ++ raise ImportError("No supported version for facade: " ++ "{}".format(name)) + + +''' + +TYPE_FACTORY = ''' +class TypeFactory: + @classmethod + def from_connection(cls, connection): + """ + Given a connected Connection object, return an initialized and + connected instance of an API Interface matching the name of + this class. + + @param connection: initialized Connection object. + + """ - version = connection.facades[cls.__name__[:-6]] ++ facade_name = cls.__name__ ++ if not facade_name.endswith('Facade'): ++ raise TypeError('Unexpected class name: {}'.format(facade_name)) ++ facade_name = facade_name[:-len('Facade')] ++ version = connection.facades.get(facade_name) ++ if version is None: ++ raise Exception('No facade {} in facades {}'.format(facade_name, ++ connection.facades)) + + c = lookup_facade(cls.__name__, version) + c = c() + c.connect(connection) + + return c + + +''' + +CLIENT_TABLE = ''' +CLIENTS = {{ + {clients} +}} + + +''' + + +class KindRegistry(dict): + def register(self, name, version, obj): + self[name] = {version: { + "object": obj, + }} + + def lookup(self, name, version=None): + """If version is omitted, max version is used""" + versions = self.get(name) + if not versions: + return None + if version: + return versions[version] + return versions[max(versions)] + + def getObj(self, name, version=None): + result = self.lookup(name, version) + if result: + obj = result["object"] + return obj + return None + + +class TypeRegistry(dict): + def get(self, name): + # Two way mapping + refname = Schema.referenceName(name) + if refname not in self: + result = TypeVar(refname) + self[refname] = result + self[result] = refname + + return self[refname] + + +_types = TypeRegistry() +_registry = KindRegistry() +CLASSES = {} +factories = codegen.Capture() + + +def booler(v): + if isinstance(v, str): + if v == "false": + return False + return bool(v) + + +def getRefType(ref): + return _types.get(ref) + + +def refType(obj): + return getRefType(obj["$ref"]) + + +def objType(obj): + kind = obj.get('type') + if not kind: + raise ValueError("%s has no type" % obj) + result = SCHEMA_TO_PYTHON.get(kind) + if not result: + raise ValueError("%s has type %s" % (obj, kind)) + return result + + +basic_types = [str, bool, int, float] + + +def name_to_py(name): + result = name.replace("-", "_") + result = result.lower() + if keyword.iskeyword(result) or result in dir(builtins): + result += "_" + return result + + +def strcast(kind, keep_builtins=False): + if (kind in basic_types or + type(kind) in basic_types) and keep_builtins is False: + return kind.__name__ + if str(kind).startswith('~'): + return str(kind)[1:] + if issubclass(kind, typing.GenericMeta): + return str(kind)[1:] + return kind + + +class Args(list): + def __init__(self, defs): + self.defs = defs + if defs: + rtypes = _registry.getObj(_types[defs]) + if len(rtypes) == 1: + if not self.do_explode(rtypes[0][1]): + for name, rtype in rtypes: + self.append((name, rtype)) + else: + for name, rtype in rtypes: + self.append((name, rtype)) + + def do_explode(self, kind): + if kind in basic_types or type(kind) is typing.TypeVar: + return False + if not issubclass(kind, (typing.Sequence, + typing.Mapping)): + self.clear() + self.extend(Args(kind)) + return True + return False + + def PyToSchemaMapping(self): + m = {} + for n, rt in self: + m[name_to_py(n)] = n + return m + + def SchemaToPyMapping(self): + m = {} + for n, tr in self: + m[n] = name_to_py(n) + return m + + def _format(self, name, rtype, typed=True): + if typed: + return "{} : {}".format( + name_to_py(name), + strcast(rtype) + ) + else: + return name_to_py(name) + + def _get_arg_str(self, typed=False, joined=", "): + if self: + parts = [] + for item in self: + parts.append(self._format(item[0], item[1], typed)) + if joined: + return joined.join(parts) + return parts + return '' + + def as_kwargs(self): + if self: + parts = [] + for item in self: + parts.append('{}=None'.format(name_to_py(item[0]))) + return ', '.join(parts) + return '' + + def typed(self): + return self._get_arg_str(True) + + def __str__(self): + return self._get_arg_str(False) + + def get_doc(self): + return self._get_arg_str(True, "\n") + + +def buildTypes(schema, capture): + INDENT = " " + for kind in sorted((k for k in _types if not isinstance(k, str)), + key=lambda x: str(x)): + name = _types[kind] + if name in capture and name not in NAUGHTY_CLASSES: + continue + args = Args(kind) + # Write Factory class for _client.py + make_factory(name) + # Write actual class + source = [""" +class {}(Type): + _toSchema = {} + _toPy = {} + def __init__(self{}{}, **unknown_fields): + ''' +{} + '''""".format( + name, + # pprint these to get stable ordering across regens + pprint.pformat(args.PyToSchemaMapping(), width=999), + pprint.pformat(args.SchemaToPyMapping(), width=999), + ", " if args else "", + args.as_kwargs(), + textwrap.indent(args.get_doc(), INDENT * 2))] + + if not args: + source.append("{}pass".format(INDENT * 2)) + else: + for arg in args: + arg_name = name_to_py(arg[0]) + arg_type = arg[1] + arg_type_name = strcast(arg_type) + if arg_type in basic_types: + source.append("{}self.{} = {}".format(INDENT * 2, + arg_name, + arg_name)) + elif type(arg_type) is typing.TypeVar: + source.append("{}self.{} = {}.from_json({}) " + "if {} else None".format(INDENT * 2, + arg_name, + arg_type_name, + arg_name, + arg_name)) + elif issubclass(arg_type, typing.Sequence): + value_type = ( + arg_type_name.__parameters__[0] + if len(arg_type_name.__parameters__) + else None + ) + if type(value_type) is typing.TypeVar: + source.append( + "{}self.{} = [{}.from_json(o) " + "for o in {} or []]".format(INDENT * 2, + arg_name, + strcast(value_type), + arg_name)) + else: + source.append("{}self.{} = {}".format(INDENT * 2, + arg_name, + arg_name)) + elif issubclass(arg_type, typing.Mapping): + value_type = ( + arg_type_name.__parameters__[1] + if len(arg_type_name.__parameters__) > 1 + else None + ) + if type(value_type) is typing.TypeVar: + source.append( + "{}self.{} = {{k: {}.from_json(v) " + "for k, v in ({} or dict()).items()}}".format( + INDENT * 2, + arg_name, + strcast(value_type), + arg_name)) + else: + source.append("{}self.{} = {}".format(INDENT * 2, + arg_name, + arg_name)) + else: + source.append("{}self.{} = {}".format(INDENT * 2, + arg_name, + arg_name)) + + source = "\n".join(source) + capture.clear(name) + capture[name].write(source) + capture[name].write("\n\n") + co = compile(source, __name__, "exec") + ns = _getns() + exec(co, ns) + cls = ns[name] + CLASSES[name] = cls + + +def retspec(defs): + # return specs + # only return 1, so if there is more than one type + # we need to include a union + # In truth there is only 1 return + # Error or the expected Type + if not defs: + return None + if defs in basic_types: + return strcast(defs, False) + rtypes = _registry.getObj(_types[defs]) + if not rtypes: + return None + if len(rtypes) > 1: + return Union[tuple([strcast(r[1], True) for r in rtypes])] + return strcast(rtypes[0][1], False) + + +def return_type(defs): + if not defs: + return None + rtypes = _registry.getObj(_types[defs]) + if not rtypes: + return None + if len(rtypes) > 1: + for n, t in rtypes: + if n == "Error": + continue + return t + return rtypes[0][1] + + +def type_anno_func(func, defs, is_result=False): + annos = {} + if not defs: + return func + rtypes = _registry.getObj(_types[defs]) + if is_result: + kn = "return" + if not rtypes: + annos[kn] = None + elif len(rtypes) > 1: + annos[kn] = Union[tuple([r[1] for r in rtypes])] + else: + annos[kn] = rtypes[0][1] + else: + for name, rtype in rtypes: + name = name_to_py(name) + annos[name] = rtype + func.__annotations__.update(annos) + return func + + +def ReturnMapping(cls): + # Annotate the method with a return Type + # so the value can be cast + def decorator(f): + @functools.wraps(f) + async def wrapper(*args, **kwargs): + nonlocal cls + reply = await f(*args, **kwargs) + if cls is None: + return reply + if 'error' in reply: + cls = CLASSES['Error'] + if issubclass(cls, typing.Sequence): + result = [] + item_cls = cls.__parameters__[0] + for item in reply: + result.append(item_cls.from_json(item)) + """ + if 'error' in item: + cls = CLASSES['Error'] + else: + cls = item_cls + result.append(cls.from_json(item)) + """ + else: + result = cls.from_json(reply['response']) + + return result + return wrapper + return decorator + + +def makeFunc(cls, name, params, result, _async=True): + INDENT = " " + args = Args(params) + assignments = [] + toschema = args.PyToSchemaMapping() + for arg in args._get_arg_str(False, False): + assignments.append("{}_params[\'{}\'] = {}".format(INDENT, + toschema[arg], + arg)) + assignments = "\n".join(assignments) + res = retspec(result) + source = """ + +@ReturnMapping({rettype}) +{_async}def {name}(self{argsep}{args}): + ''' +{docstring} + Returns -> {res} + ''' + # map input types to rpc msg + _params = dict() + msg = dict(type='{cls.name}', + request='{name}', + version={cls.version}, + params=_params) +{assignments} + reply = {_await}self.rpc(msg) + return reply + +""" + + fsource = source.format(_async="async " if _async else "", + name=name, + argsep=", " if args else "", + args=args, + res=res, + rettype=result.__name__ if result else None, + docstring=textwrap.indent(args.get_doc(), INDENT), + cls=cls, + assignments=assignments, + _await="await " if _async else "") + ns = _getns() + exec(fsource, ns) + func = ns[name] + return func, fsource + + +def buildMethods(cls, capture): + properties = cls.schema['properties'] + for methodname in sorted(properties): + method, source = _buildMethod(cls, methodname) + setattr(cls, methodname, method) + capture["{}Facade".format(cls.__name__)].write(source, depth=1) + + +def _buildMethod(cls, name): + params = None + result = None + method = cls.schema['properties'][name] + if 'properties' in method: + prop = method['properties'] + spec = prop.get('Params') + if spec: + params = _types.get(spec['$ref']) + spec = prop.get('Result') + if spec: + if '$ref' in spec: + result = _types.get(spec['$ref']) + else: + result = SCHEMA_TO_PYTHON[spec['type']] + return makeFunc(cls, name, params, result) + + +def buildFacade(schema): + cls = type(schema.name, (Type,), dict(name=schema.name, + version=schema.version, + schema=schema)) + source = """ +class {name}Facade(Type): + name = '{name}' + version = {version} + schema = {schema} + """.format(name=schema.name, + version=schema.version, + schema=textwrap.indent(pprint.pformat(schema), " ")) + return cls, source + + +class TypeEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, Type): + return obj.serialize() + return json.JSONEncoder.default(self, obj) + + +class Type: + def connect(self, connection): + self.connection = connection + + async def rpc(self, msg): + result = await self.connection.rpc(msg, encoder=TypeEncoder) + return result + + @classmethod + def from_json(cls, data): + if isinstance(data, cls): + return data + if isinstance(data, str): + try: + data = json.loads(data) + except json.JSONDecodeError: + raise + d = {} + for k, v in (data or {}).items(): + d[cls._toPy.get(k, k)] = v + + try: + return cls(**d) + except TypeError: + raise + + def serialize(self): + d = {} + for attr, tgt in self._toSchema.items(): + d[tgt] = getattr(self, attr) + return d + + def to_json(self): + return json.dumps(self.serialize(), cls=TypeEncoder, sort_keys=True) + + +class Schema(dict): + def __init__(self, schema): + self.name = schema['Name'] + self.version = schema['Version'] + self.update(schema['Schema']) + + @classmethod + def referenceName(cls, ref): + if ref.startswith("#/definitions/"): + ref = ref.rsplit("/", 1)[-1] + return ref + + def resolveDefinition(self, ref): + return self['definitions'][self.referenceName(ref)] + + def deref(self, prop, name): + if not isinstance(prop, dict): + raise TypeError(prop) + if "$ref" not in prop: + return prop + + target = self.resolveDefinition(prop["$ref"]) + return target + + def buildDefinitions(self): + # here we are building the types out + # anything in definitions is a type + # but these may contain references themselves + # so we dfs to the bottom and build upwards + # when a types is already in the registry + defs = self.get('definitions') + if not defs: + return + for d, data in defs.items(): + if d in _registry and d not in NAUGHTY_CLASSES: + continue + node = self.deref(data, d) + kind = node.get("type") + if kind == "object": + result = self.buildObject(node, d) + elif kind == "array": + pass + _registry.register(d, self.version, result) + # XXX: This makes sure that the type gets added to the global + # _types dict even if no other type in the schema has a ref + # to it. + getRefType(d) + + def buildObject(self, node, name=None, d=0): + # we don't need to build types recursively here + # they are all in definitions already + # we only want to include the type reference + # which we can derive from the name + struct = [] + add = struct.append + props = node.get("properties") + pprops = node.get("patternProperties") + if props: + # Sort these so the __init__ arg list for each Type remains + # consistently ordered across regens of client.py + for p in sorted(props): + prop = props[p] + if "$ref" in prop: + add((p, refType(prop))) + else: + kind = prop['type'] + if kind == "array": + add((p, self.buildArray(prop, d + 1))) + elif kind == "object": + struct.extend(self.buildObject(prop, p, d + 1)) + else: + add((p, objType(prop))) + if pprops: + if ".*" not in pprops: + raise ValueError( + "Cannot handle actual pattern in patternProperties %s" % + pprops) + pprop = pprops[".*"] + if "$ref" in pprop: + add((name, Mapping[str, refType(pprop)])) + return struct + ppkind = pprop["type"] + if ppkind == "array": + add((name, self.buildArray(pprop, d + 1))) + else: + add((name, Mapping[str, SCHEMA_TO_PYTHON[ppkind]])) + + if not struct and node.get('additionalProperties', False): + add((name, Mapping[str, SCHEMA_TO_PYTHON['object']])) + + return struct + + def buildArray(self, obj, d=0): + # return a sequence from an array in the schema + if "$ref" in obj: + return Sequence[refType(obj)] + else: + kind = obj.get("type") + if kind and kind == "array": + items = obj['items'] + return self.buildArray(items, d + 1) + else: + return Sequence[objType(obj)] + + +def _getns(): + ns = {'Type': Type, + 'typing': typing, + 'ReturnMapping': ReturnMapping + } + # Copy our types into the globals of the method + for facade in _registry: + ns[facade] = _registry.getObj(facade) + return ns + + +def make_factory(name): + if name in factories: + del factories[name] + factories[name].write("class {}(TypeFactory):\n pass\n\n".format(name)) + + +def write_facades(captures, options): + """ + Write the Facades to the appropriate _client.py + + """ + for version in sorted(captures.keys()): + filename = "{}/_client{}.py".format(options.output_dir, version) + with open(filename, "w") as f: + f.write(HEADER) + f.write("from juju.client.facade import Type, ReturnMapping\n") + f.write("from juju.client._definitions import *\n\n") + for key in sorted( + [k for k in captures[version].keys() if "Facade" in k]): + print(captures[version][key], file=f) + + # Return the last (most recent) version for use in other routines. + return version + + +def write_definitions(captures, options, version): + """ + Write auxillary (non versioned) classes to + _definitions.py The auxillary classes currently get + written redudantly into each capture object, so we can look in + one of them -- we just use the last one from the loop above. + + """ + with open("{}/_definitions.py".format(options.output_dir), "w") as f: + f.write(HEADER) + f.write("from juju.client.facade import Type, ReturnMapping\n\n") + for key in sorted( + [k for k in captures[version].keys() if "Facade" not in k]): + print(captures[version][key], file=f) + + +def write_client(captures, options): + """ + Write the TypeFactory classes to _client.py, along with some + imports and tables so that we can look up versioned Facades. + + """ + with open("{}/_client.py".format(options.output_dir), "w") as f: + f.write(HEADER) + f.write("from juju.client._definitions import *\n\n") + clients = ", ".join("_client{}".format(v) for v in captures) + f.write("from juju.client import " + clients + "\n\n") + f.write(CLIENT_TABLE.format(clients=",\n ".join( + ['"{}": _client{}'.format(v, v) for v in captures]))) + f.write(LOOKUP_FACADE) + f.write(TYPE_FACTORY) + for key in sorted([k for k in factories.keys() if "Facade" in k]): + print(factories[key], file=f) + + +def generate_facades(options): + captures = defaultdict(codegen.Capture) + schemas = {} + for p in sorted(glob(options.schema)): + if 'latest' in p: + juju_version = 'latest' + else: + try: + juju_version = re.search(JUJU_VERSION, p).group() + except AttributeError: + print("Cannot extract a juju version from {}".format(p)) + print("Schemas must include a juju version in the filename") + raise SystemExit(1) + + new_schemas = json.loads(Path(p).read_text("utf-8")) + schemas[juju_version] = [Schema(s) for s in new_schemas] + + # Build all of the auxillary (unversioned) classes + # TODO: get rid of some of the excess trips through loops in the + # called functions. + for juju_version in sorted(schemas.keys()): + for schema in schemas[juju_version]: + schema.buildDefinitions() + buildTypes(schema, captures[schema.version]) + + # Build the Facade classes + for juju_version in sorted(schemas.keys()): + for schema in schemas[juju_version]: + cls, source = buildFacade(schema) + cls_name = "{}Facade".format(schema.name) + + captures[schema.version].clear(cls_name) + # Make the factory class for _client.py + make_factory(cls_name) + # Make the actual class + captures[schema.version][cls_name].write(source) + # Build the methods for each Facade class. + buildMethods(cls, captures[schema.version]) + # Mark this Facade class as being done for this version -- + # helps mitigate some excessive looping. + CLASSES[schema.name] = cls + + return captures + + +def setup(): + parser = argparse.ArgumentParser() + parser.add_argument("-s", "--schema", default="juju/client/schemas*") + parser.add_argument("-o", "--output_dir", default="juju/client") + options = parser.parse_args() + return options + + +def main(): + options = setup() + + # Generate some text blobs + captures = generate_facades(options) + + # ... and write them out + last_version = write_facades(captures, options) + write_definitions(captures, options, last_version) + write_client(captures, options) + + +if __name__ == '__main__': + main() diff --cc modules/libjuju/juju/client/schemas-juju-2.5-rc1.json index 0000000,0000000..b53dd0b new file mode 100644 --- /dev/null +++ b/modules/libjuju/juju/client/schemas-juju-2.5-rc1.json @@@ -1,0 -1,0 +1,37036 @@@ ++[ ++ { ++ "Name": "Action", ++ "Version": 3, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Actions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "ApplicationsCharmsActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationsCharmActionsResults" ++ } ++ } ++ }, ++ "Cancel": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "Enqueue": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Actions" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "FindActionTagsByPrefix": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FindTags" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FindTagsResults" ++ } ++ } ++ }, ++ "FindActionsByNames": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FindActionsByNames" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByNames" ++ } ++ } ++ }, ++ "ListAll": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByReceivers" ++ } ++ } ++ }, ++ "ListCompleted": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByReceivers" ++ } ++ } ++ }, ++ "ListPending": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByReceivers" ++ } ++ } ++ }, ++ "ListRunning": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByReceivers" ++ } ++ } ++ }, ++ "Run": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RunParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "RunOnAllMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RunParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Action": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "parameters": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "receiver": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "receiver", ++ "name" ++ ] ++ }, ++ "ActionResult": { ++ "type": "object", ++ "properties": { ++ "action": { ++ "$ref": "#/definitions/Action" ++ }, ++ "completed": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "enqueued": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "output": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "started": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionSpec": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "params": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "description", ++ "params" ++ ] ++ }, ++ "Actions": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Action" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByName": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByNames": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionsByName" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByReceiver": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "receiver": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByReceivers": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionsByReceiver" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ApplicationCharmActionsResult": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ActionSpec" ++ } ++ } ++ }, ++ "application-tag": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ApplicationsCharmActionsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationCharmActionsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FindActionsByNames": { ++ "type": "object", ++ "properties": { ++ "names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FindTags": { ++ "type": "object", ++ "properties": { ++ "prefixes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "prefixes" ++ ] ++ }, ++ "FindTagsResults": { ++ "type": "object", ++ "properties": { ++ "matches": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "matches" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "RunParams": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "commands": { ++ "type": "string" ++ }, ++ "machines": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "timeout": { ++ "type": "integer" ++ }, ++ "units": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "commands", ++ "timeout" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ActionPruner", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "Prune": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ActionPruneArgs" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ActionPruneArgs": { ++ "type": "object", ++ "properties": { ++ "max-history-mb": { ++ "type": "integer" ++ }, ++ "max-history-time": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "max-history-time", ++ "max-history-mb" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Agent", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ClearReboot": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResults" ++ } ++ } ++ }, ++ "ControllerAPIInfoForModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "ControllerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerConfigResult" ++ } ++ } ++ }, ++ "GetCloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelTag" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "GetEntities": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AgentGetEntitiesResults" ++ } ++ } ++ }, ++ "IsMaster": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/IsMasterResult" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "SetPasswords": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityPasswords" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "StateServingInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StateServingInfo" ++ } ++ } ++ }, ++ "WatchCredentials": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AgentGetEntitiesResult": { ++ "type": "object", ++ "properties": { ++ "container-type": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life", ++ "jobs", ++ "container-type" ++ ] ++ }, ++ "AgentGetEntitiesResults": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AgentGetEntitiesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "cacertificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "name" ++ ] ++ }, ++ "CloudSpecResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudSpec" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudSpecResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityPassword": { ++ "type": "object", ++ "properties": { ++ "password": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "password" ++ ] ++ }, ++ "EntityPasswords": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPassword" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "IsMasterResult": { ++ "type": "object", ++ "properties": { ++ "master": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "master" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelTag": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StateServingInfo": { ++ "type": "object", ++ "properties": { ++ "api-port": { ++ "type": "integer" ++ }, ++ "ca-private-key": { ++ "type": "string" ++ }, ++ "cert": { ++ "type": "string" ++ }, ++ "controller-api-port": { ++ "type": "integer" ++ }, ++ "private-key": { ++ "type": "string" ++ }, ++ "shared-secret": { ++ "type": "string" ++ }, ++ "state-port": { ++ "type": "integer" ++ }, ++ "system-identity": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "api-port", ++ "state-port", ++ "cert", ++ "private-key", ++ "ca-private-key", ++ "shared-secret", ++ "system-identity" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "AgentTools", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "UpdateToolsAvailable": { ++ "type": "object" ++ } ++ } ++ } ++ }, ++ { ++ "Name": "AllModelWatcher", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/AllWatcherNextResults" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "AllWatcherNextResults": { ++ "type": "object", ++ "properties": { ++ "deltas": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Delta" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "deltas" ++ ] ++ }, ++ "Delta": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "removed": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "removed", ++ "entity" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "AllWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/AllWatcherNextResults" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "AllWatcherNextResults": { ++ "type": "object", ++ "properties": { ++ "deltas": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Delta" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "deltas" ++ ] ++ }, ++ "Delta": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "removed": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "removed", ++ "entity" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Annotations", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Get": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AnnotationsGetResults" ++ } ++ } ++ }, ++ "Set": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AnnotationsSet" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AnnotationsGetResult": { ++ "type": "object", ++ "properties": { ++ "annotations": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "entity": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "annotations" ++ ] ++ }, ++ "AnnotationsGetResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AnnotationsGetResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "AnnotationsSet": { ++ "type": "object", ++ "properties": { ++ "annotations": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityAnnotations" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "annotations" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityAnnotations": { ++ "type": "object", ++ "properties": { ++ "annotations": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "entity": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "annotations" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Application", ++ "Version": 8, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddRelation": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddRelation" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddRelationResults" ++ } ++ } ++ }, ++ "AddUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddApplicationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddApplicationUnitsResults" ++ } ++ } ++ }, ++ "CharmConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetConfigResults" ++ } ++ } ++ }, ++ "CharmRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationCharmRelations" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationCharmRelationsResults" ++ } ++ } ++ }, ++ "Consume": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ConsumeApplicationArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Deploy": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationsDeploy" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Destroy": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationDestroy" ++ } ++ } ++ }, ++ "DestroyApplication": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyApplicationsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DestroyApplicationResults" ++ } ++ } ++ }, ++ "DestroyConsumedApplications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyConsumedApplicationsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "DestroyRelation": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyRelation" ++ } ++ } ++ }, ++ "DestroyUnit": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyUnitsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DestroyUnitResults" ++ } ++ } ++ }, ++ "DestroyUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyApplicationUnits" ++ } ++ } ++ }, ++ "Expose": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationExpose" ++ } ++ } ++ }, ++ "Get": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationGet" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetResults" ++ } ++ } ++ }, ++ "GetCharmURL": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationGet" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "GetConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetConfigResults" ++ } ++ } ++ }, ++ "GetConstraints": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetConstraintsResults" ++ } ++ } ++ }, ++ "GetLXDProfileUpgradeMessages": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/LXDProfileUpgradeMessages" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LXDProfileUpgradeMessagesResults" ++ } ++ } ++ }, ++ "ResolveUnitErrors": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UnitsResolved" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ScaleApplications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ScaleApplicationsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ScaleApplicationResults" ++ } ++ } ++ }, ++ "Set": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationSet" ++ } ++ } ++ }, ++ "SetApplicationsConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationConfigSetArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetCharm": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationSetCharm" ++ } ++ } ++ }, ++ "SetCharmProfile": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationSetCharmProfile" ++ } ++ } ++ }, ++ "SetConstraints": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetConstraints" ++ } ++ } ++ }, ++ "SetMetricCredentials": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationMetricCredentials" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetRelationsSuspended": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationSuspendedArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Unexpose": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationUnexpose" ++ } ++ } ++ }, ++ "Unset": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationUnset" ++ } ++ } ++ }, ++ "UnsetApplicationsConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationConfigUnsetArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Update": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationUpdate" ++ } ++ } ++ }, ++ "UpdateApplicationSeries": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateSeriesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchLXDProfileUpgradeNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddApplicationUnits": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "attach-storage": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "num-units": { ++ "type": "integer" ++ }, ++ "placement": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Placement" ++ } ++ }, ++ "policy": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "num-units", ++ "placement" ++ ] ++ }, ++ "AddApplicationUnitsResults": { ++ "type": "object", ++ "properties": { ++ "units": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "units" ++ ] ++ }, ++ "AddRelation": { ++ "type": "object", ++ "properties": { ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "via-cidrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "endpoints" ++ ] ++ }, ++ "AddRelationResults": { ++ "type": "object", ++ "properties": { ++ "endpoints": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmRelation" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "endpoints" ++ ] ++ }, ++ "ApplicationCharmRelations": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application" ++ ] ++ }, ++ "ApplicationCharmRelationsResults": { ++ "type": "object", ++ "properties": { ++ "charm-relations": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "charm-relations" ++ ] ++ }, ++ "ApplicationConfigSet": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "config" ++ ] ++ }, ++ "ApplicationConfigSetArgs": { ++ "type": "object", ++ "properties": { ++ "Args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationConfigSet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Args" ++ ] ++ }, ++ "ApplicationConfigUnsetArgs": { ++ "type": "object", ++ "properties": { ++ "Args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationUnset" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Args" ++ ] ++ }, ++ "ApplicationConstraint": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints" ++ ] ++ }, ++ "ApplicationDeploy": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "attach-storage": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "channel": { ++ "type": "string" ++ }, ++ "charm-url": { ++ "type": "string" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "config-yaml": { ++ "type": "string" ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "devices": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/Constraints" ++ } ++ } ++ }, ++ "endpoint-bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "num-units": { ++ "type": "integer" ++ }, ++ "placement": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Placement" ++ } ++ }, ++ "policy": { ++ "type": "string" ++ }, ++ "resources": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "storage": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/Constraints" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "series", ++ "charm-url", ++ "channel", ++ "num-units", ++ "config-yaml", ++ "constraints" ++ ] ++ }, ++ "ApplicationDestroy": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application" ++ ] ++ }, ++ "ApplicationExpose": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application" ++ ] ++ }, ++ "ApplicationGet": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application" ++ ] ++ }, ++ "ApplicationGetConfigResults": { ++ "type": "object", ++ "properties": { ++ "Results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConfigResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Results" ++ ] ++ }, ++ "ApplicationGetConstraintsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationConstraint" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ApplicationGetResults": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "application-config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "charm": { ++ "type": "string" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "charm", ++ "config", ++ "constraints", ++ "series" ++ ] ++ }, ++ "ApplicationMetricCredential": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "metrics-credentials": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "metrics-credentials" ++ ] ++ }, ++ "ApplicationMetricCredentials": { ++ "type": "object", ++ "properties": { ++ "creds": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationMetricCredential" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "creds" ++ ] ++ }, ++ "ApplicationOfferDetails": { ++ "type": "object", ++ "properties": { ++ "application-description": { ++ "type": "string" ++ }, ++ "bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ } ++ }, ++ "offer-name": { ++ "type": "string" ++ }, ++ "offer-url": { ++ "type": "string" ++ }, ++ "offer-uuid": { ++ "type": "string" ++ }, ++ "source-model-tag": { ++ "type": "string" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteSpace" ++ } ++ }, ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferUserDetails" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "source-model-tag", ++ "offer-uuid", ++ "offer-url", ++ "offer-name", ++ "application-description" ++ ] ++ }, ++ "ApplicationSet": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "options": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "options" ++ ] ++ }, ++ "ApplicationSetCharm": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "channel": { ++ "type": "string" ++ }, ++ "charm-url": { ++ "type": "string" ++ }, ++ "config-settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "config-settings-yaml": { ++ "type": "string" ++ }, ++ "force": { ++ "type": "boolean" ++ }, ++ "force-series": { ++ "type": "boolean" ++ }, ++ "force-units": { ++ "type": "boolean" ++ }, ++ "resource-ids": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "storage-constraints": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/StorageConstraints" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "charm-url", ++ "channel", ++ "force", ++ "force-units", ++ "force-series" ++ ] ++ }, ++ "ApplicationSetCharmProfile": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "charm-url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "charm-url" ++ ] ++ }, ++ "ApplicationUnexpose": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application" ++ ] ++ }, ++ "ApplicationUnset": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "options": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "options" ++ ] ++ }, ++ "ApplicationUpdate": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "charm-url": { ++ "type": "string" ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "force": { ++ "type": "boolean" ++ }, ++ "force-charm-url": { ++ "type": "boolean" ++ }, ++ "force-series": { ++ "type": "boolean" ++ }, ++ "min-units": { ++ "type": "integer" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "settings-yaml": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "charm-url", ++ "force-charm-url", ++ "force-series", ++ "force", ++ "settings-yaml" ++ ] ++ }, ++ "ApplicationsDeploy": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationDeploy" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "applications" ++ ] ++ }, ++ "CharmRelation": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "optional": { ++ "type": "boolean" ++ }, ++ "role": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "optional", ++ "limit", ++ "scope" ++ ] ++ }, ++ "ConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Constraints": { ++ "type": "object", ++ "properties": { ++ "Count": { ++ "type": "integer" ++ }, ++ "Pool": { ++ "type": "string" ++ }, ++ "Size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Pool", ++ "Size", ++ "Count" ++ ] ++ }, ++ "ConsumeApplicationArg": { ++ "type": "object", ++ "properties": { ++ "ApplicationOfferDetails": { ++ "$ref": "#/definitions/ApplicationOfferDetails" ++ }, ++ "application-alias": { ++ "type": "string" ++ }, ++ "external-controller": { ++ "$ref": "#/definitions/ExternalControllerInfo" ++ }, ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ApplicationOfferDetails" ++ ] ++ }, ++ "ConsumeApplicationArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConsumeApplicationArg" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyApplicationInfo": { ++ "type": "object", ++ "properties": { ++ "destroyed-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "destroyed-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "detached-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyApplicationParams": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ }, ++ "destroy-storage": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag" ++ ] ++ }, ++ "DestroyApplicationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "$ref": "#/definitions/DestroyApplicationInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyApplicationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyApplicationResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyApplicationUnits": { ++ "type": "object", ++ "properties": { ++ "unit-names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-names" ++ ] ++ }, ++ "DestroyApplicationsParams": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyApplicationParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "applications" ++ ] ++ }, ++ "DestroyConsumedApplicationParams": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag" ++ ] ++ }, ++ "DestroyConsumedApplicationsParams": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyConsumedApplicationParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "applications" ++ ] ++ }, ++ "DestroyRelation": { ++ "type": "object", ++ "properties": { ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "relation-id": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-id" ++ ] ++ }, ++ "DestroyUnitInfo": { ++ "type": "object", ++ "properties": { ++ "destroyed-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "detached-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyUnitParams": { ++ "type": "object", ++ "properties": { ++ "destroy-storage": { ++ "type": "boolean" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-tag" ++ ] ++ }, ++ "DestroyUnitResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "$ref": "#/definitions/DestroyUnitInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyUnitResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyUnitResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyUnitsParams": { ++ "type": "object", ++ "properties": { ++ "units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyUnitParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "units" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ExternalControllerInfo": { ++ "type": "object", ++ "properties": { ++ "addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "ca-cert": { ++ "type": "string" ++ }, ++ "controller-alias": { ++ "type": "string" ++ }, ++ "controller-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controller-tag", ++ "controller-alias", ++ "addrs", ++ "ca-cert" ++ ] ++ }, ++ "LXDProfileUpgradeMessages": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "watcher-id" ++ ] ++ }, ++ "LXDProfileUpgradeMessagesResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "unit-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-name", ++ "message" ++ ] ++ }, ++ "LXDProfileUpgradeMessagesResults": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LXDProfileUpgradeMessagesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "OfferUserDetails": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "display-name", ++ "access" ++ ] ++ }, ++ "Placement": { ++ "type": "object", ++ "properties": { ++ "directive": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "scope", ++ "directive" ++ ] ++ }, ++ "RelationSuspendedArg": { ++ "type": "object", ++ "properties": { ++ "message": { ++ "type": "string" ++ }, ++ "relation-id": { ++ "type": "integer" ++ }, ++ "suspended": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-id", ++ "message", ++ "suspended" ++ ] ++ }, ++ "RelationSuspendedArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationSuspendedArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "RemoteEndpoint": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "limit" ++ ] ++ }, ++ "RemoteSpace": { ++ "type": "object", ++ "properties": { ++ "cloud-type": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "provider-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "subnets": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Subnet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud-type", ++ "name", ++ "provider-id", ++ "provider-attributes", ++ "subnets" ++ ] ++ }, ++ "ScaleApplicationInfo": { ++ "type": "object", ++ "properties": { ++ "num-units": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "num-units" ++ ] ++ }, ++ "ScaleApplicationParams": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ }, ++ "scale": { ++ "type": "integer" ++ }, ++ "scale-change": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag", ++ "scale" ++ ] ++ }, ++ "ScaleApplicationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "$ref": "#/definitions/ScaleApplicationInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ScaleApplicationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ScaleApplicationResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ScaleApplicationsParams": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ScaleApplicationParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "applications" ++ ] ++ }, ++ "SetConstraints": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "constraints" ++ ] ++ }, ++ "StorageConstraints": { ++ "type": "object", ++ "properties": { ++ "count": { ++ "type": "integer" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "Subnet": { ++ "type": "object", ++ "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": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cidr", ++ "vlan-tag", ++ "life", ++ "space-tag", ++ "zones" ++ ] ++ }, ++ "UnitsResolved": { ++ "type": "object", ++ "properties": { ++ "all": { ++ "type": "boolean" ++ }, ++ "retry": { ++ "type": "boolean" ++ }, ++ "tags": { ++ "$ref": "#/definitions/Entities" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UpdateSeriesArg": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "tag": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "force", ++ "series" ++ ] ++ }, ++ "UpdateSeriesArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateSeriesArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ApplicationOffers", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ApplicationOffers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferURLs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationOffersResults" ++ } ++ } ++ }, ++ "DestroyOffers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyApplicationOffers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "FindApplicationOffers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/QueryApplicationOffersResults" ++ } ++ } ++ }, ++ "GetConsumeDetails": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferURLs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ConsumeOfferDetailsResults" ++ } ++ } ++ }, ++ "ListApplicationOffers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/QueryApplicationOffersResults" ++ } ++ } ++ }, ++ "ModifyOfferAccess": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyOfferAccessRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Offer": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddApplicationOffers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoteApplicationInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferURLs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RemoteApplicationInfoResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddApplicationOffer": { ++ "type": "object", ++ "properties": { ++ "application-description": { ++ "type": "string" ++ }, ++ "application-name": { ++ "type": "string" ++ }, ++ "endpoints": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "offer-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "offer-name", ++ "application-name", ++ "application-description", ++ "endpoints" ++ ] ++ }, ++ "AddApplicationOffers": { ++ "type": "object", ++ "properties": { ++ "Offers": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddApplicationOffer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Offers" ++ ] ++ }, ++ "ApplicationOfferAdminDetails": { ++ "type": "object", ++ "properties": { ++ "ApplicationOfferDetails": { ++ "$ref": "#/definitions/ApplicationOfferDetails" ++ }, ++ "application-name": { ++ "type": "string" ++ }, ++ "charm-url": { ++ "type": "string" ++ }, ++ "connections": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferConnection" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ApplicationOfferDetails", ++ "application-name", ++ "charm-url" ++ ] ++ }, ++ "ApplicationOfferDetails": { ++ "type": "object", ++ "properties": { ++ "application-description": { ++ "type": "string" ++ }, ++ "bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ } ++ }, ++ "offer-name": { ++ "type": "string" ++ }, ++ "offer-url": { ++ "type": "string" ++ }, ++ "offer-uuid": { ++ "type": "string" ++ }, ++ "source-model-tag": { ++ "type": "string" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteSpace" ++ } ++ }, ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferUserDetails" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "source-model-tag", ++ "offer-uuid", ++ "offer-url", ++ "offer-name", ++ "application-description" ++ ] ++ }, ++ "ApplicationOfferResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ApplicationOfferAdminDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ApplicationOffersResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationOfferResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ConsumeOfferDetails": { ++ "type": "object", ++ "properties": { ++ "external-controller": { ++ "$ref": "#/definitions/ExternalControllerInfo" ++ }, ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "offer": { ++ "$ref": "#/definitions/ApplicationOfferDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ConsumeOfferDetailsResult": { ++ "type": "object", ++ "properties": { ++ "ConsumeOfferDetails": { ++ "$ref": "#/definitions/ConsumeOfferDetails" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ConsumeOfferDetails" ++ ] ++ }, ++ "ConsumeOfferDetailsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConsumeOfferDetailsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyApplicationOffers": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "offer-urls": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-urls" ++ ] ++ }, ++ "EndpointFilterAttributes": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "role", ++ "interface", ++ "name" ++ ] ++ }, ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ExternalControllerInfo": { ++ "type": "object", ++ "properties": { ++ "addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "ca-cert": { ++ "type": "string" ++ }, ++ "controller-alias": { ++ "type": "string" ++ }, ++ "controller-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controller-tag", ++ "controller-alias", ++ "addrs", ++ "ca-cert" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModifyOfferAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "action": { ++ "type": "string" ++ }, ++ "offer-url": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "action", ++ "access", ++ "offer-url" ++ ] ++ }, ++ "ModifyOfferAccessRequest": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModifyOfferAccess" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "OfferConnection": { ++ "type": "object", ++ "properties": { ++ "endpoint": { ++ "type": "string" ++ }, ++ "ingress-subnets": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "relation-id": { ++ "type": "integer" ++ }, ++ "source-model-tag": { ++ "type": "string" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "source-model-tag", ++ "relation-id", ++ "username", ++ "endpoint", ++ "status", ++ "ingress-subnets" ++ ] ++ }, ++ "OfferFilter": { ++ "type": "object", ++ "properties": { ++ "allowed-users": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "application-description": { ++ "type": "string" ++ }, ++ "application-name": { ++ "type": "string" ++ }, ++ "application-user": { ++ "type": "string" ++ }, ++ "connected-users": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EndpointFilterAttributes" ++ } ++ }, ++ "model-name": { ++ "type": "string" ++ }, ++ "offer-name": { ++ "type": "string" ++ }, ++ "owner-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "owner-name", ++ "model-name", ++ "offer-name", ++ "application-name", ++ "application-description", ++ "application-user", ++ "endpoints", ++ "connected-users", ++ "allowed-users" ++ ] ++ }, ++ "OfferFilters": { ++ "type": "object", ++ "properties": { ++ "Filters": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferFilter" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Filters" ++ ] ++ }, ++ "OfferURLs": { ++ "type": "object", ++ "properties": { ++ "offer-urls": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "OfferUserDetails": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "display-name", ++ "access" ++ ] ++ }, ++ "QueryApplicationOffersResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationOfferAdminDetails" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoteApplicationInfo": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ } ++ }, ++ "icon-url-path": { ++ "type": "string" ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "offer-url": { ++ "type": "string" ++ }, ++ "source-model-label": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "name", ++ "description", ++ "offer-url", ++ "endpoints", ++ "icon-url-path" ++ ] ++ }, ++ "RemoteApplicationInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoteApplicationInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoteApplicationInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteApplicationInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoteEndpoint": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "limit" ++ ] ++ }, ++ "RemoteSpace": { ++ "type": "object", ++ "properties": { ++ "cloud-type": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "provider-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "subnets": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Subnet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud-type", ++ "name", ++ "provider-id", ++ "provider-attributes", ++ "subnets" ++ ] ++ }, ++ "Subnet": { ++ "type": "object", ++ "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": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cidr", ++ "vlan-tag", ++ "life", ++ "space-tag", ++ "zones" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ApplicationScaler", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Rescale": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Backups", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Create": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BackupsCreateArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BackupsMetadataResult" ++ } ++ } ++ }, ++ "FinishRestore": { ++ "type": "object" ++ }, ++ "Info": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BackupsInfoArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BackupsMetadataResult" ++ } ++ } ++ }, ++ "List": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BackupsListArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BackupsListResult" ++ } ++ } ++ }, ++ "PrepareRestore": { ++ "type": "object" ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BackupsRemoveArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Restore": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RestoreArgs" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "BackupsCreateArgs": { ++ "type": "object", ++ "properties": { ++ "keep-copy": { ++ "type": "boolean" ++ }, ++ "no-download": { ++ "type": "boolean" ++ }, ++ "notes": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "notes", ++ "keep-copy", ++ "no-download" ++ ] ++ }, ++ "BackupsInfoArgs": { ++ "type": "object", ++ "properties": { ++ "id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "BackupsListArgs": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "BackupsListResult": { ++ "type": "object", ++ "properties": { ++ "list": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BackupsMetadataResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "list" ++ ] ++ }, ++ "BackupsMetadataResult": { ++ "type": "object", ++ "properties": { ++ "ca-cert": { ++ "type": "string" ++ }, ++ "ca-private-key": { ++ "type": "string" ++ }, ++ "checksum": { ++ "type": "string" ++ }, ++ "checksum-format": { ++ "type": "string" ++ }, ++ "filename": { ++ "type": "string" ++ }, ++ "finished": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "hostname": { ++ "type": "string" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "machine": { ++ "type": "string" ++ }, ++ "model": { ++ "type": "string" ++ }, ++ "notes": { ++ "type": "string" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "started": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "stored": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "checksum", ++ "checksum-format", ++ "size", ++ "stored", ++ "started", ++ "finished", ++ "notes", ++ "model", ++ "machine", ++ "hostname", ++ "version", ++ "series", ++ "ca-cert", ++ "ca-private-key", ++ "filename" ++ ] ++ }, ++ "BackupsRemoveArgs": { ++ "type": "object", ++ "properties": { ++ "ids": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ids" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "RestoreArgs": { ++ "type": "object", ++ "properties": { ++ "backup-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "backup-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Block", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "List": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/BlockResults" ++ } ++ } ++ }, ++ "SwitchBlockOff": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BlockSwitchParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "SwitchBlockOn": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BlockSwitchParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Block": { ++ "type": "object", ++ "properties": { ++ "id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "tag", ++ "type" ++ ] ++ }, ++ "BlockResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/Block" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BlockResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BlockResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "BlockSwitchParams": { ++ "type": "object", ++ "properties": { ++ "message": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Bundle", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ExportBundle": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "GetChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BundleChangesParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BundleChangesResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "BundleChange": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "method": { ++ "type": "string" ++ }, ++ "requires": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "method", ++ "args", ++ "requires" ++ ] ++ }, ++ "BundleChangesParams": { ++ "type": "object", ++ "properties": { ++ "bundleURL": { ++ "type": "string" ++ }, ++ "yaml": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "yaml", ++ "bundleURL" ++ ] ++ }, ++ "BundleChangesResults": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BundleChange" ++ } ++ }, ++ "errors": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CAASAgent", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResults" ++ } ++ } ++ }, ++ "GetCloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelTag" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "cacertificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "name" ++ ] ++ }, ++ "CloudSpecResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudSpec" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudSpecResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelTag": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CAASFirewaller", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ApplicationsConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetConfigResults" ++ } ++ } ++ }, ++ "IsExposed": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ApplicationGetConfigResults": { ++ "type": "object", ++ "properties": { ++ "Results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConfigResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Results" ++ ] ++ }, ++ "BoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CAASOperator", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "Charm": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationCharmResults" ++ } ++ } ++ }, ++ "CurrentModel": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelResult" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetPodSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetPodSpecParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetTools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntitiesVersion" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "ApplicationCharm": { ++ "type": "object", ++ "properties": { ++ "charm-modified-version": { ++ "type": "integer" ++ }, ++ "force-upgrade": { ++ "type": "boolean" ++ }, ++ "sha256": { ++ "type": "string" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url", ++ "sha256", ++ "charm-modified-version" ++ ] ++ }, ++ "ApplicationCharmResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ApplicationCharm" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ApplicationCharmResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationCharmResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Binary": { ++ "type": "object", ++ "properties": { ++ "Arch": { ++ "type": "string" ++ }, ++ "Number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "Series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Number", ++ "Series", ++ "Arch" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesVersion": { ++ "type": "object", ++ "properties": { ++ "agent-tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityVersion" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "agent-tools" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "EntityString": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "value" ++ ] ++ }, ++ "EntityVersion": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "tools": { ++ "$ref": "#/definitions/Version" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "tools" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "uuid", ++ "type" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "SetPodSpecParams": { ++ "type": "object", ++ "properties": { ++ "specs": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityString" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "specs" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Version": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "$ref": "#/definitions/Binary" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CAASOperatorProvisioner", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "OperatorProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/OperatorProvisioningInfo" ++ } ++ } ++ }, ++ "SetPasswords": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityPasswords" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityPassword": { ++ "type": "object", ++ "properties": { ++ "password": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "password" ++ ] ++ }, ++ "EntityPasswords": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPassword" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "KubernetesFilesystemAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "mount-point": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider" ++ ] ++ }, ++ "KubernetesFilesystemParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/KubernetesFilesystemAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "storagename": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storagename", ++ "size", ++ "provider" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "OperatorProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "api-addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "charm-storage": { ++ "$ref": "#/definitions/KubernetesFilesystemParams" ++ }, ++ "image-path": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "image-path", ++ "version", ++ "api-addresses", ++ "charm-storage" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CAASUnitProvisioner", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ApplicationsConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationGetConfigResults" ++ } ++ } ++ }, ++ "ApplicationsScale": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/IntResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/KubernetesProvisioningInfoResults" ++ } ++ } ++ }, ++ "SetOperatorStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateApplicationsService": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateApplicationServiceArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateApplicationsUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateApplicationUnitArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "WatchApplicationsScale": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchPodSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "ApplicationGetConfigResults": { ++ "type": "object", ++ "properties": { ++ "Results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConfigResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Results" ++ ] ++ }, ++ "ApplicationUnitParams": { ++ "type": "object", ++ "properties": { ++ "address": { ++ "type": "string" ++ }, ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "filesystem-info": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/KubernetesFilesystemInfo" ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "ports": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider-id", ++ "unit-tag", ++ "address", ++ "ports", ++ "status", ++ "info" ++ ] ++ }, ++ "ConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "IntResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "IntResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/IntResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "KubernetesDeviceParams": { ++ "type": "object", ++ "properties": { ++ "Attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "Count": { ++ "type": "integer" ++ }, ++ "Type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Type", ++ "Count", ++ "Attributes" ++ ] ++ }, ++ "KubernetesFilesystemAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "mount-point": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider" ++ ] ++ }, ++ "KubernetesFilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "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" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storagename", ++ "pool", ++ "size", ++ "filesystem-id", ++ "status", ++ "info", ++ "volume" ++ ] ++ }, ++ "KubernetesFilesystemParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/KubernetesFilesystemAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "storagename": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storagename", ++ "size", ++ "provider" ++ ] ++ }, ++ "KubernetesProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "devices": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/KubernetesDeviceParams" ++ } ++ }, ++ "filesystems": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/KubernetesFilesystemParams" ++ } ++ }, ++ "placement": { ++ "type": "string" ++ }, ++ "pod-spec": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/KubernetesVolumeParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "pod-spec", ++ "constraints" ++ ] ++ }, ++ "KubernetesProvisioningInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/KubernetesProvisioningInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "KubernetesProvisioningInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/KubernetesProvisioningInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "KubernetesVolumeAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider" ++ ] ++ }, ++ "KubernetesVolumeInfo": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "persistent": { ++ "type": "boolean" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "volume-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-id", ++ "size", ++ "persistent", ++ "status", ++ "info" ++ ] ++ }, ++ "KubernetesVolumeParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/KubernetesVolumeAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "storagename": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storagename", ++ "size", ++ "provider" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "UpdateApplicationServiceArg": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "application-tag": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag", ++ "provider-id", ++ "addresses" ++ ] ++ }, ++ "UpdateApplicationServiceArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateApplicationServiceArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "UpdateApplicationUnitArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateApplicationUnits" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "UpdateApplicationUnits": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ }, ++ "units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationUnitParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag", ++ "units" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CharmRevisionUpdater", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "UpdateLatestRevisions": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Charms", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "CharmInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CharmURL" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CharmInfo" ++ } ++ } ++ }, ++ "IsMetered": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CharmURL" ++ }, ++ "Result": { ++ "$ref": "#/definitions/IsMeteredResult" ++ } ++ } ++ }, ++ "List": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CharmsList" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CharmsListResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "CharmActionSpec": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "params": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "description", ++ "params" ++ ] ++ }, ++ "CharmActions": { ++ "type": "object", ++ "properties": { ++ "specs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmActionSpec" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CharmDevice": { ++ "type": "object", ++ "properties": { ++ "CountMax": { ++ "type": "integer" ++ }, ++ "CountMin": { ++ "type": "integer" ++ }, ++ "Description": { ++ "type": "string" ++ }, ++ "Name": { ++ "type": "string" ++ }, ++ "Type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Name", ++ "Description", ++ "Type", ++ "CountMin", ++ "CountMax" ++ ] ++ }, ++ "CharmInfo": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "$ref": "#/definitions/CharmActions" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmOption" ++ } ++ } ++ }, ++ "lxd-profile": { ++ "$ref": "#/definitions/CharmLXDProfile" ++ }, ++ "meta": { ++ "$ref": "#/definitions/CharmMeta" ++ }, ++ "metrics": { ++ "$ref": "#/definitions/CharmMetrics" ++ }, ++ "revision": { ++ "type": "integer" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "revision", ++ "url", ++ "config" ++ ] ++ }, ++ "CharmLXDProfile": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "devices": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config", ++ "description", ++ "devices" ++ ] ++ }, ++ "CharmMeta": { ++ "type": "object", ++ "properties": { ++ "categories": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "devices": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmDevice" ++ } ++ } ++ }, ++ "extra-bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "min-juju-version": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "payload-classes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmPayloadClass" ++ } ++ } ++ }, ++ "peers": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmRelation" ++ } ++ } ++ }, ++ "provides": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmRelation" ++ } ++ } ++ }, ++ "requires": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmRelation" ++ } ++ } ++ }, ++ "resources": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmResourceMeta" ++ } ++ } ++ }, ++ "series": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "storage": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmStorage" ++ } ++ } ++ }, ++ "subordinate": { ++ "type": "boolean" ++ }, ++ "summary": { ++ "type": "string" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "terms": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "summary", ++ "description", ++ "subordinate" ++ ] ++ }, ++ "CharmMetric": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "description" ++ ] ++ }, ++ "CharmMetrics": { ++ "type": "object", ++ "properties": { ++ "metrics": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/CharmMetric" ++ } ++ } ++ }, ++ "plan": { ++ "$ref": "#/definitions/CharmPlan" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "metrics", ++ "plan" ++ ] ++ }, ++ "CharmOption": { ++ "type": "object", ++ "properties": { ++ "default": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type" ++ ] ++ }, ++ "CharmPayloadClass": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type" ++ ] ++ }, ++ "CharmPlan": { ++ "type": "object", ++ "properties": { ++ "required": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "required" ++ ] ++ }, ++ "CharmRelation": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "optional": { ++ "type": "boolean" ++ }, ++ "role": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "optional", ++ "limit", ++ "scope" ++ ] ++ }, ++ "CharmResourceMeta": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "path": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "path", ++ "description" ++ ] ++ }, ++ "CharmStorage": { ++ "type": "object", ++ "properties": { ++ "count-max": { ++ "type": "integer" ++ }, ++ "count-min": { ++ "type": "integer" ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "location": { ++ "type": "string" ++ }, ++ "minimum-size": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "properties": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "read-only": { ++ "type": "boolean" ++ }, ++ "shared": { ++ "type": "boolean" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "description", ++ "type", ++ "shared", ++ "read-only", ++ "count-min", ++ "count-max", ++ "minimum-size" ++ ] ++ }, ++ "CharmURL": { ++ "type": "object", ++ "properties": { ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url" ++ ] ++ }, ++ "CharmsList": { ++ "type": "object", ++ "properties": { ++ "names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "names" ++ ] ++ }, ++ "CharmsListResult": { ++ "type": "object", ++ "properties": { ++ "charm-urls": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "charm-urls" ++ ] ++ }, ++ "IsMeteredResult": { ++ "type": "object", ++ "properties": { ++ "metered": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "metered" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Cleaner", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Cleanup": { ++ "type": "object" ++ }, ++ "WatchCleanups": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Client", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "AbortCurrentUpgrade": { ++ "type": "object" ++ }, ++ "AddCharm": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddCharm" ++ } ++ } ++ }, ++ "AddCharmWithAuthorization": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddCharmWithAuthorization" ++ } ++ } ++ }, ++ "AddMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddMachines" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddMachinesResults" ++ } ++ } ++ }, ++ "AddMachinesV2": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddMachines" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddMachinesResults" ++ } ++ } ++ }, ++ "AgentVersion": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/AgentVersionResult" ++ } ++ } ++ }, ++ "CACert": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/BytesResult" ++ } ++ } ++ }, ++ "DestroyMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyMachines" ++ } ++ } ++ }, ++ "FindTools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FindToolsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FindToolsResult" ++ } ++ } ++ }, ++ "FullStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StatusParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FullStatus" ++ } ++ } ++ }, ++ "GetBundleChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BundleChangesParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BundleChangesResults" ++ } ++ } ++ }, ++ "GetModelConstraints": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/GetConstraintsResults" ++ } ++ } ++ }, ++ "InjectMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddMachines" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddMachinesResults" ++ } ++ } ++ }, ++ "ModelGet": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResults" ++ } ++ } ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelInfo" ++ } ++ } ++ }, ++ "ModelSet": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelSet" ++ } ++ } ++ }, ++ "ModelUnset": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelUnset" ++ } ++ } ++ }, ++ "ModelUserInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelUserInfoResults" ++ } ++ } ++ }, ++ "PrivateAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/PrivateAddress" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PrivateAddressResults" ++ } ++ } ++ }, ++ "ProvisioningScript": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ProvisioningScriptParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ProvisioningScriptResult" ++ } ++ } ++ }, ++ "PublicAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/PublicAddress" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PublicAddressResults" ++ } ++ } ++ }, ++ "ResolveCharms": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ResolveCharms" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ResolveCharmResults" ++ } ++ } ++ }, ++ "Resolved": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Resolved" ++ } ++ } ++ }, ++ "RetryProvisioning": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SLALevel": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "SetModelAgentVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetModelAgentVersion" ++ } ++ } ++ }, ++ "SetModelConstraints": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetConstraints" ++ } ++ } ++ }, ++ "SetSLALevel": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelSLA" ++ } ++ } ++ }, ++ "StatusHistory": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StatusHistoryRequests" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusHistoryResults" ++ } ++ } ++ }, ++ "WatchAll": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/AllWatcherId" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "AddCharm": { ++ "type": "object", ++ "properties": { ++ "channel": { ++ "type": "string" ++ }, ++ "force": { ++ "type": "boolean" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url", ++ "channel", ++ "force" ++ ] ++ }, ++ "AddCharmWithAuthorization": { ++ "type": "object", ++ "properties": { ++ "channel": { ++ "type": "string" ++ }, ++ "force": { ++ "type": "boolean" ++ }, ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url", ++ "channel", ++ "macaroon", ++ "force" ++ ] ++ }, ++ "AddMachineParams": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "container-type": { ++ "type": "string" ++ }, ++ "disks": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Constraints" ++ } ++ }, ++ "hardware-characteristics": { ++ "$ref": "#/definitions/HardwareCharacteristics" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "nonce": { ++ "type": "string" ++ }, ++ "parent-id": { ++ "type": "string" ++ }, ++ "placement": { ++ "$ref": "#/definitions/Placement" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "series", ++ "constraints", ++ "jobs", ++ "parent-id", ++ "container-type", ++ "instance-id", ++ "nonce", ++ "hardware-characteristics", ++ "addresses" ++ ] ++ }, ++ "AddMachines": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddMachineParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "AddMachinesResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "machine": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine" ++ ] ++ }, ++ "AddMachinesResults": { ++ "type": "object", ++ "properties": { ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddMachinesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machines" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "AgentVersionResult": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ }, ++ "AllWatcherId": { ++ "type": "object", ++ "properties": { ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "ApplicationOfferStatus": { ++ "type": "object", ++ "properties": { ++ "active-connected-count": { ++ "type": "integer" ++ }, ++ "application-name": { ++ "type": "string" ++ }, ++ "charm": { ++ "type": "string" ++ }, ++ "endpoints": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ } ++ } ++ }, ++ "err": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "offer-name": { ++ "type": "string" ++ }, ++ "total-connected-count": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-name", ++ "application-name", ++ "charm", ++ "endpoints", ++ "active-connected-count", ++ "total-connected-count" ++ ] ++ }, ++ "ApplicationStatus": { ++ "type": "object", ++ "properties": { ++ "can-upgrade-to": { ++ "type": "string" ++ }, ++ "charm": { ++ "type": "string" ++ }, ++ "charm-verion": { ++ "type": "string" ++ }, ++ "endpoint-bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "err": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "exposed": { ++ "type": "boolean" ++ }, ++ "int": { ++ "type": "integer" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "meter-statuses": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/MeterStatus" ++ } ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "public-address": { ++ "type": "string" ++ }, ++ "relations": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "string": { ++ "type": "string" ++ }, ++ "subordinate-to": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "units": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitStatus" ++ } ++ } ++ }, ++ "workload-version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "charm", ++ "series", ++ "exposed", ++ "life", ++ "relations", ++ "can-upgrade-to", ++ "subordinate-to", ++ "units", ++ "meter-statuses", ++ "status", ++ "workload-version", ++ "charm-verion", ++ "endpoint-bindings", ++ "public-address" ++ ] ++ }, ++ "Binary": { ++ "type": "object", ++ "properties": { ++ "Arch": { ++ "type": "string" ++ }, ++ "Number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "Series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Number", ++ "Series", ++ "Arch" ++ ] ++ }, ++ "BundleChange": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "method": { ++ "type": "string" ++ }, ++ "requires": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "method", ++ "args", ++ "requires" ++ ] ++ }, ++ "BundleChangesParams": { ++ "type": "object", ++ "properties": { ++ "bundleURL": { ++ "type": "string" ++ }, ++ "yaml": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "yaml", ++ "bundleURL" ++ ] ++ }, ++ "BundleChangesResults": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BundleChange" ++ } ++ }, ++ "errors": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "BytesResult": { ++ "type": "object", ++ "properties": { ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "ConfigValue": { ++ "type": "object", ++ "properties": { ++ "source": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "source" ++ ] ++ }, ++ "Constraints": { ++ "type": "object", ++ "properties": { ++ "Count": { ++ "type": "integer" ++ }, ++ "Pool": { ++ "type": "string" ++ }, ++ "Size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Pool", ++ "Size", ++ "Count" ++ ] ++ }, ++ "DestroyMachines": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "machine-names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-names", ++ "force" ++ ] ++ }, ++ "DetailedStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "err": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "kind": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "data", ++ "since", ++ "kind", ++ "version", ++ "life" ++ ] ++ }, ++ "EndpointStatus": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ }, ++ "subordinate": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "name", ++ "role", ++ "subordinate" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "FindToolsParams": { ++ "type": "object", ++ "properties": { ++ "agentstream": { ++ "type": "string" ++ }, ++ "arch": { ++ "type": "string" ++ }, ++ "major": { ++ "type": "integer" ++ }, ++ "minor": { ++ "type": "integer" ++ }, ++ "number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "number", ++ "major", ++ "minor", ++ "arch", ++ "series", ++ "agentstream" ++ ] ++ }, ++ "FindToolsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "list": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Tools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "list" ++ ] ++ }, ++ "FullStatus": { ++ "type": "object", ++ "properties": { ++ "applications": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ApplicationStatus" ++ } ++ } ++ }, ++ "controller-timestamp": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "machines": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/MachineStatus" ++ } ++ } ++ }, ++ "model": { ++ "$ref": "#/definitions/ModelStatusInfo" ++ }, ++ "offers": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ApplicationOfferStatus" ++ } ++ } ++ }, ++ "relations": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationStatus" ++ } ++ }, ++ "remote-applications": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/RemoteApplicationStatus" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model", ++ "machines", ++ "applications", ++ "remote-applications", ++ "offers", ++ "relations", ++ "controller-timestamp" ++ ] ++ }, ++ "GetConstraintsResults": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints" ++ ] ++ }, ++ "HardwareCharacteristics": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cpu-cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "History": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "statuses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DetailedStatus" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "statuses" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "LXDProfile": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "devices": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config", ++ "description", ++ "devices" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineHardware": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "MachineStatus": { ++ "type": "object", ++ "properties": { ++ "agent-status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "constraints": { ++ "type": "string" ++ }, ++ "containers": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/MachineStatus" ++ } ++ } ++ }, ++ "dns-name": { ++ "type": "string" ++ }, ++ "hardware": { ++ "type": "string" ++ }, ++ "has-vote": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "instance-status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "ip-addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "lxd-profiles": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/LXDProfile" ++ } ++ } ++ }, ++ "network-interfaces": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/NetworkInterface" ++ } ++ } ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "wants-vote": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "agent-status", ++ "instance-status", ++ "dns-name", ++ "instance-id", ++ "series", ++ "id", ++ "containers", ++ "constraints", ++ "hardware", ++ "jobs", ++ "has-vote", ++ "wants-vote" ++ ] ++ }, ++ "MeterStatus": { ++ "type": "object", ++ "properties": { ++ "color": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "color", ++ "message" ++ ] ++ }, ++ "ModelConfigResults": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ConfigValue" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "cloud-credential-tag": { ++ "type": "string" ++ }, ++ "cloud-region": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "controller-uuid": { ++ "type": "string" ++ }, ++ "default-series": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelMachineInfo" ++ } ++ }, ++ "migration": { ++ "$ref": "#/definitions/ModelMigrationStatus" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "provider-type": { ++ "type": "string" ++ }, ++ "sla": { ++ "$ref": "#/definitions/ModelSLAInfo" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelUserInfo" ++ } ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "uuid", ++ "controller-uuid", ++ "cloud-tag", ++ "owner-tag", ++ "life", ++ "users", ++ "machines", ++ "sla", ++ "agent-version" ++ ] ++ }, ++ "ModelMachineInfo": { ++ "type": "object", ++ "properties": { ++ "hardware": { ++ "$ref": "#/definitions/MachineHardware" ++ }, ++ "has-vote": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "wants-vote": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModelMigrationStatus": { ++ "type": "object", ++ "properties": { ++ "end": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "start": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "start" ++ ] ++ }, ++ "ModelSLA": { ++ "type": "object", ++ "properties": { ++ "ModelSLAInfo": { ++ "$ref": "#/definitions/ModelSLAInfo" ++ }, ++ "creds": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ModelSLAInfo", ++ "creds" ++ ] ++ }, ++ "ModelSLAInfo": { ++ "type": "object", ++ "properties": { ++ "level": { ++ "type": "string" ++ }, ++ "owner": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "level", ++ "owner" ++ ] ++ }, ++ "ModelSet": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelStatusInfo": { ++ "type": "object", ++ "properties": { ++ "available-version": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "meter-status": { ++ "$ref": "#/definitions/MeterStatus" ++ }, ++ "model-status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "sla": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "cloud-tag", ++ "version", ++ "available-version", ++ "model-status", ++ "meter-status", ++ "sla" ++ ] ++ }, ++ "ModelUnset": { ++ "type": "object", ++ "properties": { ++ "keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "keys" ++ ] ++ }, ++ "ModelUserInfo": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "display-name", ++ "last-connection", ++ "access" ++ ] ++ }, ++ "ModelUserInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ModelUserInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelUserInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelUserInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "NetworkInterface": { ++ "type": "object", ++ "properties": { ++ "dns-nameservers": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "gateway": { ++ "type": "string" ++ }, ++ "ip-addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "is-up": { ++ "type": "boolean" ++ }, ++ "mac-address": { ++ "type": "string" ++ }, ++ "space": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ip-addresses", ++ "mac-address", ++ "is-up" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "Placement": { ++ "type": "object", ++ "properties": { ++ "directive": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "scope", ++ "directive" ++ ] ++ }, ++ "PrivateAddress": { ++ "type": "object", ++ "properties": { ++ "target": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "target" ++ ] ++ }, ++ "PrivateAddressResults": { ++ "type": "object", ++ "properties": { ++ "private-address": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "private-address" ++ ] ++ }, ++ "ProvisioningScriptParams": { ++ "type": "object", ++ "properties": { ++ "data-dir": { ++ "type": "string" ++ }, ++ "disable-package-commands": { ++ "type": "boolean" ++ }, ++ "machine-id": { ++ "type": "string" ++ }, ++ "nonce": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-id", ++ "nonce", ++ "data-dir", ++ "disable-package-commands" ++ ] ++ }, ++ "ProvisioningScriptResult": { ++ "type": "object", ++ "properties": { ++ "script": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "script" ++ ] ++ }, ++ "PublicAddress": { ++ "type": "object", ++ "properties": { ++ "target": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "target" ++ ] ++ }, ++ "PublicAddressResults": { ++ "type": "object", ++ "properties": { ++ "public-address": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "public-address" ++ ] ++ }, ++ "RelationStatus": { ++ "type": "object", ++ "properties": { ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EndpointStatus" ++ } ++ }, ++ "id": { ++ "type": "integer" ++ }, ++ "interface": { ++ "type": "string" ++ }, ++ "key": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ }, ++ "status": { ++ "$ref": "#/definitions/DetailedStatus" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "key", ++ "interface", ++ "scope", ++ "endpoints", ++ "status" ++ ] ++ }, ++ "RemoteApplicationStatus": { ++ "type": "object", ++ "properties": { ++ "endpoints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ } ++ }, ++ "err": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "offer-name": { ++ "type": "string" ++ }, ++ "offer-url": { ++ "type": "string" ++ }, ++ "relations": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "status": { ++ "$ref": "#/definitions/DetailedStatus" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-url", ++ "offer-name", ++ "endpoints", ++ "life", ++ "relations", ++ "status" ++ ] ++ }, ++ "RemoteEndpoint": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "limit" ++ ] ++ }, ++ "ResolveCharmResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "type": "string" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ResolveCharmResults": { ++ "type": "object", ++ "properties": { ++ "urls": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ResolveCharmResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "urls" ++ ] ++ }, ++ "ResolveCharms": { ++ "type": "object", ++ "properties": { ++ "references": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "references" ++ ] ++ }, ++ "Resolved": { ++ "type": "object", ++ "properties": { ++ "retry": { ++ "type": "boolean" ++ }, ++ "unit-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-name", ++ "retry" ++ ] ++ }, ++ "SetConstraints": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "constraints" ++ ] ++ }, ++ "SetModelAgentVersion": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ }, ++ "StatusHistoryFilter": { ++ "type": "object", ++ "properties": { ++ "date": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "delta": { ++ "type": "integer" ++ }, ++ "exclude": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "size", ++ "date", ++ "delta", ++ "exclude" ++ ] ++ }, ++ "StatusHistoryRequest": { ++ "type": "object", ++ "properties": { ++ "filter": { ++ "$ref": "#/definitions/StatusHistoryFilter" ++ }, ++ "historyKind": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "historyKind", ++ "size", ++ "filter", ++ "tag" ++ ] ++ }, ++ "StatusHistoryRequests": { ++ "type": "object", ++ "properties": { ++ "requests": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StatusHistoryRequest" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "requests" ++ ] ++ }, ++ "StatusHistoryResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "history": { ++ "$ref": "#/definitions/History" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "history" ++ ] ++ }, ++ "StatusHistoryResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StatusHistoryResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StatusParams": { ++ "type": "object", ++ "properties": { ++ "patterns": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "patterns" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "Tools": { ++ "type": "object", ++ "properties": { ++ "sha256": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "url": { ++ "type": "string" ++ }, ++ "version": { ++ "$ref": "#/definitions/Binary" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version", ++ "url", ++ "size" ++ ] ++ }, ++ "UnitStatus": { ++ "type": "object", ++ "properties": { ++ "address": { ++ "type": "string" ++ }, ++ "agent-status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "charm": { ++ "type": "string" ++ }, ++ "leader": { ++ "type": "boolean" ++ }, ++ "machine": { ++ "type": "string" ++ }, ++ "opened-ports": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "public-address": { ++ "type": "string" ++ }, ++ "subordinates": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitStatus" ++ } ++ } ++ }, ++ "workload-status": { ++ "$ref": "#/definitions/DetailedStatus" ++ }, ++ "workload-version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "agent-status", ++ "workload-status", ++ "workload-version", ++ "machine", ++ "opened-ports", ++ "public-address", ++ "charm", ++ "subordinates" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Cloud", ++ "Version": 3, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddCloud": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddCloudArgs" ++ } ++ } ++ }, ++ "AddCredentials": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/TaggedCredentials" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CheckCredentialsModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/TaggedCredentials" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpdateCredentialResults" ++ } ++ } ++ }, ++ "Cloud": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudResults" ++ } ++ } ++ }, ++ "CloudInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudInfoResults" ++ } ++ } ++ }, ++ "Clouds": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/CloudsResult" ++ } ++ } ++ }, ++ "Credential": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudCredentialResults" ++ } ++ } ++ }, ++ "CredentialContents": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CloudCredentialArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CredentialContentResults" ++ } ++ } ++ }, ++ "DefaultCloud": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "InstanceTypes": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CloudInstanceTypesConstraints" ++ }, ++ "Result": { ++ "$ref": "#/definitions/InstanceTypesResults" ++ } ++ } ++ }, ++ "ListCloudInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ListCloudsRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ListCloudInfoResults" ++ } ++ } ++ }, ++ "ModifyCloudAccess": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyCloudAccessRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveClouds": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RevokeCredentialsCheckModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RevokeCredentialArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateCredentialsCheckModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateCredentialArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpdateCredentialResults" ++ } ++ } ++ }, ++ "UserCredentials": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UserClouds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddCloudArgs": { ++ "type": "object", ++ "properties": { ++ "cloud": { ++ "$ref": "#/definitions/Cloud" ++ }, ++ "name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud", ++ "name" ++ ] ++ }, ++ "Cloud": { ++ "type": "object", ++ "properties": { ++ "auth-types": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "ca-certificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "regions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudRegion" ++ } ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type" ++ ] ++ }, ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudCredentialArg": { ++ "type": "object", ++ "properties": { ++ "cloud-name": { ++ "type": "string" ++ }, ++ "credential-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud-name", ++ "credential-name" ++ ] ++ }, ++ "CloudCredentialArgs": { ++ "type": "object", ++ "properties": { ++ "credentials": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudCredentialArg" ++ } ++ }, ++ "include-secrets": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "include-secrets" ++ ] ++ }, ++ "CloudCredentialResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudCredential" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudCredentialResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudCredentialResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudDetails": { ++ "type": "object", ++ "properties": { ++ "auth-types": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "regions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudRegion" ++ } ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type" ++ ] ++ }, ++ "CloudInfo": { ++ "type": "object", ++ "properties": { ++ "CloudDetails": { ++ "$ref": "#/definitions/CloudDetails" ++ }, ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudUserInfo" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "CloudDetails", ++ "users" ++ ] ++ }, ++ "CloudInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "CloudInstanceTypesConstraint": { ++ "type": "object", ++ "properties": { ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "region": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud-tag", ++ "region" ++ ] ++ }, ++ "CloudInstanceTypesConstraints": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudInstanceTypesConstraint" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints" ++ ] ++ }, ++ "CloudRegion": { ++ "type": "object", ++ "properties": { ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name" ++ ] ++ }, ++ "CloudResult": { ++ "type": "object", ++ "properties": { ++ "cloud": { ++ "$ref": "#/definitions/Cloud" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudUserInfo": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "display-name", ++ "access" ++ ] ++ }, ++ "CloudsResult": { ++ "type": "object", ++ "properties": { ++ "clouds": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/Cloud" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ControllerCredentialInfo": { ++ "type": "object", ++ "properties": { ++ "content": { ++ "$ref": "#/definitions/CredentialContent" ++ }, ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelAccess" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CredentialContent": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "cloud": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "cloud", ++ "auth-type" ++ ] ++ }, ++ "CredentialContentResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ControllerCredentialInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CredentialContentResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CredentialContentResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "InstanceType": { ++ "type": "object", ++ "properties": { ++ "arches": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cost": { ++ "type": "integer" ++ }, ++ "cpu-cores": { ++ "type": "integer" ++ }, ++ "deprecated": { ++ "type": "boolean" ++ }, ++ "memory": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "virt-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "arches", ++ "cpu-cores", ++ "memory" ++ ] ++ }, ++ "InstanceTypesResult": { ++ "type": "object", ++ "properties": { ++ "cost-currency": { ++ "type": "string" ++ }, ++ "cost-divisor": { ++ "type": "integer" ++ }, ++ "cost-unit": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "instance-types": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InstanceType" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "InstanceTypesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InstanceTypesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListCloudInfo": { ++ "type": "object", ++ "properties": { ++ "CloudDetails": { ++ "$ref": "#/definitions/CloudDetails" ++ }, ++ "user-access": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "CloudDetails", ++ "user-access" ++ ] ++ }, ++ "ListCloudInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ListCloudInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ListCloudInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ListCloudInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListCloudsRequest": { ++ "type": "object", ++ "properties": { ++ "all": { ++ "type": "boolean" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "model": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModifyCloudAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "action": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "cloud-tag", ++ "action", ++ "access" ++ ] ++ }, ++ "ModifyCloudAccessRequest": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModifyCloudAccess" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "RevokeCredentialArg": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "force" ++ ] ++ }, ++ "RevokeCredentialArgs": { ++ "type": "object", ++ "properties": { ++ "credentials": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RevokeCredentialArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "credentials" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "TaggedCredential": { ++ "type": "object", ++ "properties": { ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "credential" ++ ] ++ }, ++ "TaggedCredentials": { ++ "type": "object", ++ "properties": { ++ "credentials": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/TaggedCredential" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UpdateCredentialArgs": { ++ "type": "object", ++ "properties": { ++ "credentials": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/TaggedCredential" ++ } ++ }, ++ "force": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "credentials", ++ "force" ++ ] ++ }, ++ "UpdateCredentialModelResult": { ++ "type": "object", ++ "properties": { ++ "errors": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "name" ++ ] ++ }, ++ "UpdateCredentialResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateCredentialModelResult" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "UpdateCredentialResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateCredentialResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UserCloud": { ++ "type": "object", ++ "properties": { ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "cloud-tag" ++ ] ++ }, ++ "UserClouds": { ++ "type": "object", ++ "properties": { ++ "user-clouds": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UserCloud" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Controller", ++ "Version": 5, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AllModels": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/UserModelList" ++ } ++ } ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResults" ++ } ++ } ++ }, ++ "ConfigSet": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ControllerConfigSet" ++ } ++ } ++ }, ++ "ControllerAPIInfoForModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "ControllerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerConfigResult" ++ } ++ } ++ }, ++ "DestroyController": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyControllerArgs" ++ } ++ } ++ }, ++ "GetCloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelTag" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "GetControllerAccess": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UserAccessResults" ++ } ++ } ++ }, ++ "HostedModelConfigs": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/HostedModelConfigsResults" ++ } ++ } ++ }, ++ "InitiateMigration": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/InitiateMigrationArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/InitiateMigrationResults" ++ } ++ } ++ }, ++ "ListBlockedModels": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelBlockInfoList" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResults" ++ } ++ } ++ }, ++ "ModelStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ModelStatusResults" ++ } ++ } ++ }, ++ "ModifyControllerAccess": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyControllerAccessRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveBlocks": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoveBlocksArgs" ++ } ++ } ++ }, ++ "WatchAllModels": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/AllWatcherId" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AllWatcherId": { ++ "type": "object", ++ "properties": { ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "cacertificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "name" ++ ] ++ }, ++ "CloudSpecResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudSpec" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudSpecResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ConfigValue": { ++ "type": "object", ++ "properties": { ++ "source": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "source" ++ ] ++ }, ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ControllerConfigSet": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "DestroyControllerArgs": { ++ "type": "object", ++ "properties": { ++ "destroy-models": { ++ "type": "boolean" ++ }, ++ "destroy-storage": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "destroy-models" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostedModelConfig": { ++ "type": "object", ++ "properties": { ++ "cloud-spec": { ++ "$ref": "#/definitions/CloudSpec" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "owner" ++ ] ++ }, ++ "HostedModelConfigsResults": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostedModelConfig" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "models" ++ ] ++ }, ++ "InitiateMigrationArgs": { ++ "type": "object", ++ "properties": { ++ "specs": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MigrationSpec" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "specs" ++ ] ++ }, ++ "InitiateMigrationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "migration-id": { ++ "type": "string" ++ }, ++ "model-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "migration-id" ++ ] ++ }, ++ "InitiateMigrationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InitiateMigrationResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineHardware": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "MigrationSpec": { ++ "type": "object", ++ "properties": { ++ "model-tag": { ++ "type": "string" ++ }, ++ "target-info": { ++ "$ref": "#/definitions/MigrationTargetInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "target-info" ++ ] ++ }, ++ "MigrationTargetInfo": { ++ "type": "object", ++ "properties": { ++ "addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "auth-tag": { ++ "type": "string" ++ }, ++ "ca-cert": { ++ "type": "string" ++ }, ++ "controller-tag": { ++ "type": "string" ++ }, ++ "macaroons": { ++ "type": "string" ++ }, ++ "password": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controller-tag", ++ "addrs", ++ "ca-cert", ++ "auth-tag" ++ ] ++ }, ++ "Model": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "uuid", ++ "type", ++ "owner-tag" ++ ] ++ }, ++ "ModelBlockInfo": { ++ "type": "object", ++ "properties": { ++ "blocks": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "model-uuid": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "model-uuid", ++ "owner-tag", ++ "blocks" ++ ] ++ }, ++ "ModelBlockInfoList": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelBlockInfo" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelConfigResults": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ConfigValue" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelFilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "detachable": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModelMachineInfo": { ++ "type": "object", ++ "properties": { ++ "hardware": { ++ "$ref": "#/definitions/MachineHardware" ++ }, ++ "has-vote": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "wants-vote": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModelStatus": { ++ "type": "object", ++ "properties": { ++ "application-count": { ++ "type": "integer" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "filesystems": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelFilesystemInfo" ++ } ++ }, ++ "hosted-machine-count": { ++ "type": "integer" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelMachineInfo" ++ } ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelVolumeInfo" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "life", ++ "hosted-machine-count", ++ "application-count", ++ "owner-tag" ++ ] ++ }, ++ "ModelStatusResults": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelStatus" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "models" ++ ] ++ }, ++ "ModelTag": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelVolumeInfo": { ++ "type": "object", ++ "properties": { ++ "detachable": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModifyControllerAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "action": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "action", ++ "access" ++ ] ++ }, ++ "ModifyControllerAccessRequest": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModifyControllerAccess" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "RemoveBlocksArgs": { ++ "type": "object", ++ "properties": { ++ "all": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "all" ++ ] ++ }, ++ "UserAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "access" ++ ] ++ }, ++ "UserAccessResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/UserAccess" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UserAccessResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UserAccessResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UserModel": { ++ "type": "object", ++ "properties": { ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "model": { ++ "$ref": "#/definitions/Model" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model", ++ "last-connection" ++ ] ++ }, ++ "UserModelList": { ++ "type": "object", ++ "properties": { ++ "user-models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UserModel" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-models" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CredentialManager", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "InvalidateModelCredential": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/InvalidateCredentialArg" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "InvalidateCredentialArg": { ++ "type": "object", ++ "properties": { ++ "reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CredentialValidator", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "InvalidateModelCredential": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/InvalidateCredentialArg" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "ModelCredential": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelCredential" ++ } ++ } ++ }, ++ "WatchCredential": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchModelCredential": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "InvalidateCredentialArg": { ++ "type": "object", ++ "properties": { ++ "reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelCredential": { ++ "type": "object", ++ "properties": { ++ "credential-tag": { ++ "type": "string" ++ }, ++ "exists": { ++ "type": "boolean" ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "valid": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "credential-tag" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CrossController", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ControllerInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "WatchControllerInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "CrossModelRelations", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "PublishIngressNetworkChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/IngressNetworksChanges" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "PublishRelationChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteRelationsChanges" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RegisterRemoteRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RegisterRemoteRelationArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RegisterRemoteRelationResults" ++ } ++ } ++ }, ++ "RelationUnitSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteRelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SettingsResults" ++ } ++ } ++ }, ++ "WatchEgressAddressesForRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteEntityArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchOfferStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/OfferArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/OfferStatusWatchResults" ++ } ++ } ++ }, ++ "WatchRelationUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteEntityArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationUnitsWatchResults" ++ } ++ } ++ }, ++ "WatchRelationsSuspendedStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteEntityArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationStatusWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "IngressNetworksChangeEvent": { ++ "type": "object", ++ "properties": { ++ "application-token": { ++ "type": "string" ++ }, ++ "ingress-required": { ++ "type": "boolean" ++ }, ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "networks": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "relation-token": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token", ++ "application-token", ++ "ingress-required" ++ ] ++ }, ++ "IngressNetworksChanges": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/IngressNetworksChangeEvent" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "OfferArg": { ++ "type": "object", ++ "properties": { ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "offer-uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-uuid" ++ ] ++ }, ++ "OfferArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "OfferStatusChange": { ++ "type": "object", ++ "properties": { ++ "offer-name": { ++ "type": "string" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-name", ++ "status" ++ ] ++ }, ++ "OfferStatusWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferStatusChange" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "OfferStatusWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferStatusWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RegisterRemoteRelationArg": { ++ "type": "object", ++ "properties": { ++ "application-token": { ++ "type": "string" ++ }, ++ "local-endpoint-name": { ++ "type": "string" ++ }, ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "offer-uuid": { ++ "type": "string" ++ }, ++ "relation-token": { ++ "type": "string" ++ }, ++ "remote-endpoint": { ++ "$ref": "#/definitions/RemoteEndpoint" ++ }, ++ "remote-space": { ++ "$ref": "#/definitions/RemoteSpace" ++ }, ++ "source-model-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-token", ++ "source-model-tag", ++ "relation-token", ++ "remote-endpoint", ++ "remote-space", ++ "offer-uuid", ++ "local-endpoint-name" ++ ] ++ }, ++ "RegisterRemoteRelationArgs": { ++ "type": "object", ++ "properties": { ++ "relations": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RegisterRemoteRelationArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relations" ++ ] ++ }, ++ "RegisterRemoteRelationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoteRelationDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RegisterRemoteRelationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RegisterRemoteRelationResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RelationLifeSuspendedStatusChange": { ++ "type": "object", ++ "properties": { ++ "key": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "suspended": { ++ "type": "boolean" ++ }, ++ "suspended-reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "key", ++ "life", ++ "suspended", ++ "suspended-reason" ++ ] ++ }, ++ "RelationLifeSuspendedStatusWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationLifeSuspendedStatusChange" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "RelationStatusWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationLifeSuspendedStatusWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RelationUnitsChange": { ++ "type": "object", ++ "properties": { ++ "changed": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitSettings" ++ } ++ } ++ }, ++ "departed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changed" ++ ] ++ }, ++ "RelationUnitsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "$ref": "#/definitions/RelationUnitsChange" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "RelationUnitsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoteEndpoint": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "limit" ++ ] ++ }, ++ "RemoteEntityArg": { ++ "type": "object", ++ "properties": { ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "relation-token": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token" ++ ] ++ }, ++ "RemoteEntityArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEntityArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "RemoteRelationChangeEvent": { ++ "type": "object", ++ "properties": { ++ "application-token": { ++ "type": "string" ++ }, ++ "changed-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationUnitChange" ++ } ++ }, ++ "departed-units": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "force-cleanup": { ++ "type": "boolean" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "relation-token": { ++ "type": "string" ++ }, ++ "suspended": { ++ "type": "boolean" ++ }, ++ "suspended-reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token", ++ "application-token", ++ "life" ++ ] ++ }, ++ "RemoteRelationDetails": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "relation-token": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token" ++ ] ++ }, ++ "RemoteRelationUnit": { ++ "type": "object", ++ "properties": { ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "relation-token": { ++ "type": "string" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token", ++ "unit" ++ ] ++ }, ++ "RemoteRelationUnitChange": { ++ "type": "object", ++ "properties": { ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "unit-id": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-id" ++ ] ++ }, ++ "RemoteRelationUnits": { ++ "type": "object", ++ "properties": { ++ "relation-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationUnit" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-units" ++ ] ++ }, ++ "RemoteRelationsChanges": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationChangeEvent" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoteSpace": { ++ "type": "object", ++ "properties": { ++ "cloud-type": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "provider-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "subnets": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Subnet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cloud-type", ++ "name", ++ "provider-id", ++ "provider-attributes", ++ "subnets" ++ ] ++ }, ++ "SettingsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "SettingsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SettingsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Subnet": { ++ "type": "object", ++ "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": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cidr", ++ "vlan-tag", ++ "life", ++ "space-tag", ++ "zones" ++ ] ++ }, ++ "UnitSettings": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Deployer", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "ConnectionInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/DeployerConnectionValues" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetPasswords": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityPasswords" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "DeployerConnectionValues": { ++ "type": "object", ++ "properties": { ++ "api-addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "api-addresses" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityPassword": { ++ "type": "object", ++ "properties": { ++ "password": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "password" ++ ] ++ }, ++ "EntityPasswords": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPassword" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "DiskManager", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "SetMachineBlockDevices": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachineBlockDevices" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "BlockDevice": { ++ "type": "object", ++ "properties": { ++ "BusAddress": { ++ "type": "string" ++ }, ++ "DeviceLinks": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "DeviceName": { ++ "type": "string" ++ }, ++ "FilesystemType": { ++ "type": "string" ++ }, ++ "HardwareId": { ++ "type": "string" ++ }, ++ "InUse": { ++ "type": "boolean" ++ }, ++ "Label": { ++ "type": "string" ++ }, ++ "MountPoint": { ++ "type": "string" ++ }, ++ "Size": { ++ "type": "integer" ++ }, ++ "UUID": { ++ "type": "string" ++ }, ++ "WWN": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "DeviceName", ++ "DeviceLinks", ++ "Label", ++ "UUID", ++ "HardwareId", ++ "WWN", ++ "BusAddress", ++ "Size", ++ "FilesystemType", ++ "InUse", ++ "MountPoint" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineBlockDevices": { ++ "type": "object", ++ "properties": { ++ "block-devices": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BlockDevice" ++ } ++ }, ++ "machine": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine" ++ ] ++ }, ++ "SetMachineBlockDevices": { ++ "type": "object", ++ "properties": { ++ "machine-block-devices": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineBlockDevices" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-block-devices" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "EntityWatcher", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/EntitiesWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "EntitiesWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ExternalControllerUpdater", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ExternalControllerInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ExternalControllerInfoResults" ++ } ++ } ++ }, ++ "SetExternalControllerInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetExternalControllersInfoParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchExternalControllers": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ExternalControllerInfo": { ++ "type": "object", ++ "properties": { ++ "addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "ca-cert": { ++ "type": "string" ++ }, ++ "controller-alias": { ++ "type": "string" ++ }, ++ "controller-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controller-tag", ++ "controller-alias", ++ "addrs", ++ "ca-cert" ++ ] ++ }, ++ "ExternalControllerInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ExternalControllerInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result", ++ "error" ++ ] ++ }, ++ "ExternalControllerInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ExternalControllerInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SetExternalControllerInfoParams": { ++ "type": "object", ++ "properties": { ++ "info": { ++ "$ref": "#/definitions/ExternalControllerInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "info" ++ ] ++ }, ++ "SetExternalControllersInfoParams": { ++ "type": "object", ++ "properties": { ++ "controllers": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SetExternalControllerInfoParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controllers" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "FanConfigurer", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "FanConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/FanConfigResult" ++ } ++ } ++ }, ++ "WatchForFanConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FanConfigEntry": { ++ "type": "object", ++ "properties": { ++ "overlay": { ++ "type": "string" ++ }, ++ "underlay": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "underlay", ++ "overlay" ++ ] ++ }, ++ "FanConfigResult": { ++ "type": "object", ++ "properties": { ++ "fans": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FanConfigEntry" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "fans" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "FilesystemAttachmentsWatcher", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineStorageId": { ++ "type": "object", ++ "properties": { ++ "attachment-tag": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "attachment-tag" ++ ] ++ }, ++ "MachineStorageIdsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageId" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "FirewallRules", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ListFirewallRules": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ListFirewallRulesResults" ++ } ++ } ++ }, ++ "SetFirewallRules": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FirewallRuleArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "FirewallRule": { ++ "type": "object", ++ "properties": { ++ "known-service": { ++ "type": "string" ++ }, ++ "whitelist-cidrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "known-service" ++ ] ++ }, ++ "FirewallRuleArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FirewallRule" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "ListFirewallRulesResults": { ++ "type": "object", ++ "properties": { ++ "Rules": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FirewallRule" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Rules" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Firewaller", ++ "Version": 5, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AreManuallyProvisioned": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResults" ++ } ++ } ++ }, ++ "ControllerAPIInfoForModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "ControllerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerConfigResult" ++ } ++ } ++ }, ++ "FirewallRules": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/KnownServiceArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ListFirewallRulesResults" ++ } ++ } ++ }, ++ "GetAssignedMachine": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "GetCloudSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelTag" ++ }, ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "GetExposed": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "GetMachineActiveSubnets": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ }, ++ "GetMachinePorts": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachinePortsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachinePortsResults" ++ } ++ } ++ }, ++ "InstanceId": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "MacaroonForRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MacaroonResults" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "SetRelationsStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchEgressAddressesForRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchIngressAddressesForRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchModelMachines": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "WatchOpenedPorts": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "BoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "cacertificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "name" ++ ] ++ }, ++ "CloudSpecResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudSpec" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "CloudSpecResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "FirewallRule": { ++ "type": "object", ++ "properties": { ++ "known-service": { ++ "type": "string" ++ }, ++ "whitelist-cidrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "known-service" ++ ] ++ }, ++ "KnownServiceArgs": { ++ "type": "object", ++ "properties": { ++ "known-services": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "known-services" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListFirewallRulesResults": { ++ "type": "object", ++ "properties": { ++ "Rules": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FirewallRule" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Rules" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MacaroonResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "MacaroonResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MacaroonResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "MachinePortRange": { ++ "type": "object", ++ "properties": { ++ "port-range": { ++ "$ref": "#/definitions/PortRange" ++ }, ++ "relation-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-tag", ++ "relation-tag", ++ "port-range" ++ ] ++ }, ++ "MachinePorts": { ++ "type": "object", ++ "properties": { ++ "machine-tag": { ++ "type": "string" ++ }, ++ "subnet-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "subnet-tag" ++ ] ++ }, ++ "MachinePortsParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachinePorts" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "MachinePortsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "ports": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachinePortRange" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ports" ++ ] ++ }, ++ "MachinePortsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachinePortsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelTag": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "PortRange": { ++ "type": "object", ++ "properties": { ++ "from-port": { ++ "type": "integer" ++ }, ++ "protocol": { ++ "type": "string" ++ }, ++ "to-port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "from-port", ++ "to-port", ++ "protocol" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "HighAvailability", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "EnableHA": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ControllersSpecs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllersChangeResults" ++ } ++ } ++ }, ++ "ResumeHAReplicationAfterUpgrade": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ResumeReplicationParams" ++ } ++ } ++ }, ++ "StopHAReplicationForUpgrade": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeMongoParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MongoUpgradeResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Address": { ++ "type": "object", ++ "properties": { ++ "Scope": { ++ "type": "string" ++ }, ++ "SpaceName": { ++ "type": "string" ++ }, ++ "SpaceProviderId": { ++ "type": "string" ++ }, ++ "Type": { ++ "type": "string" ++ }, ++ "Value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Value", ++ "Type", ++ "Scope", ++ "SpaceName", ++ "SpaceProviderId" ++ ] ++ }, ++ "ControllersChangeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ControllersChanges" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "ControllersChangeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllersChangeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllersChanges": { ++ "type": "object", ++ "properties": { ++ "added": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "converted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "demoted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "maintained": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "promoted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "removed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ControllersSpec": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "num-controllers": { ++ "type": "integer" ++ }, ++ "placement": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "num-controllers" ++ ] ++ }, ++ "ControllersSpecs": { ++ "type": "object", ++ "properties": { ++ "specs": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllersSpec" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "specs" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "HAMember": { ++ "type": "object", ++ "properties": { ++ "public-address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "public-address", ++ "series" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Member": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "type": "string" ++ }, ++ "Id": { ++ "type": "integer" ++ }, ++ "Priority": { ++ "type": "number" ++ }, ++ "Tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "Votes": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Id", ++ "Address", ++ "Priority", ++ "Tags", ++ "Votes" ++ ] ++ }, ++ "MongoUpgradeResults": { ++ "type": "object", ++ "properties": { ++ "ha-members": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HAMember" ++ } ++ }, ++ "master": { ++ "$ref": "#/definitions/HAMember" ++ }, ++ "rs-members": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Member" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "rs-members", ++ "master", ++ "ha-members" ++ ] ++ }, ++ "MongoVersion": { ++ "type": "object", ++ "properties": { ++ "engine": { ++ "type": "string" ++ }, ++ "major": { ++ "type": "integer" ++ }, ++ "minor": { ++ "type": "integer" ++ }, ++ "patch": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "major", ++ "minor", ++ "patch", ++ "engine" ++ ] ++ }, ++ "ResumeReplicationParams": { ++ "type": "object", ++ "properties": { ++ "members": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Member" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "members" ++ ] ++ }, ++ "UpgradeMongoParams": { ++ "type": "object", ++ "properties": { ++ "target": { ++ "$ref": "#/definitions/MongoVersion" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "target" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "HostKeyReporter", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ReportKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SSHHostKeySet" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SSHHostKeySet": { ++ "type": "object", ++ "properties": { ++ "entity-keys": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SSHHostKeys" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity-keys" ++ ] ++ }, ++ "SSHHostKeys": { ++ "type": "object", ++ "properties": { ++ "public-keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "public-keys" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ImageManager", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "DeleteImages": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ImageFilterParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ListImages": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ImageFilterParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ListImageResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ImageFilterParams": { ++ "type": "object", ++ "properties": { ++ "images": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ImageSpec" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "images" ++ ] ++ }, ++ "ImageMetadata": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "created": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "kind": { ++ "type": "string" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "kind", ++ "arch", ++ "series", ++ "url", ++ "created" ++ ] ++ }, ++ "ImageSpec": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "kind": { ++ "type": "string" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "kind", ++ "arch", ++ "series" ++ ] ++ }, ++ "ListImageResult": { ++ "type": "object", ++ "properties": { ++ "result": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ImageMetadata" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ImageMetadata", ++ "Version": 3, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "UpdateFromPublishedImages": { ++ "type": "object" ++ } ++ } ++ } ++ }, ++ { ++ "Name": "InstancePoller", ++ "Version": 3, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AreManuallyProvisioned": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "InstanceId": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "InstanceStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "ProviderAddresses": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineAddressesResults" ++ } ++ } ++ }, ++ "SetInstanceStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetProviderAddresses": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachinesAddresses" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Status": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchModelMachines": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "BoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineAddresses": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "addresses" ++ ] ++ }, ++ "MachineAddressesResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses" ++ ] ++ }, ++ "MachineAddressesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineAddressesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "SetMachinesAddresses": { ++ "type": "object", ++ "properties": { ++ "machine-addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineAddresses" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-addresses" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StatusResult": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "life", ++ "status", ++ "info", ++ "data", ++ "since" ++ ] ++ }, ++ "StatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "KeyManager", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyUserSSHKeys" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "DeleteKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyUserSSHKeys" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ImportKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyUserSSHKeys" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ListKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ListSSHKeys" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListSSHKeys": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "mode": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities", ++ "mode" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModifyUserSSHKeys": { ++ "type": "object", ++ "properties": { ++ "ssh-keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "ssh-keys" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "KeyUpdater", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AuthorisedKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ }, ++ "WatchAuthorisedKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "LeadershipService", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "BlockUntilLeadershipReleased": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ApplicationTag" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "ClaimLeadership": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ClaimLeadershipBulkParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ClaimLeadershipBulkResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ApplicationTag": { ++ "type": "object", ++ "properties": { ++ "Name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Name" ++ ] ++ }, ++ "ClaimLeadershipBulkParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ClaimLeadershipParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "ClaimLeadershipBulkResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ClaimLeadershipParams": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ }, ++ "duration": { ++ "type": "number" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-tag", ++ "unit-tag", ++ "duration" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "LifeFlag", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "LogForwarding", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "GetLastSent": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/LogForwardingGetLastSentParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LogForwardingGetLastSentResults" ++ } ++ } ++ }, ++ "SetLastSent": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/LogForwardingSetLastSentParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "LogForwardingGetLastSentParams": { ++ "type": "object", ++ "properties": { ++ "ids": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LogForwardingID" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ids" ++ ] ++ }, ++ "LogForwardingGetLastSentResult": { ++ "type": "object", ++ "properties": { ++ "err": { ++ "$ref": "#/definitions/Error" ++ }, ++ "record-id": { ++ "type": "integer" ++ }, ++ "record-timestamp": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "record-id", ++ "record-timestamp", ++ "err" ++ ] ++ }, ++ "LogForwardingGetLastSentResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LogForwardingGetLastSentResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "LogForwardingID": { ++ "type": "object", ++ "properties": { ++ "model": { ++ "type": "string" ++ }, ++ "sink": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model", ++ "sink" ++ ] ++ }, ++ "LogForwardingSetLastSentParam": { ++ "type": "object", ++ "properties": { ++ "LogForwardingID": { ++ "$ref": "#/definitions/LogForwardingID" ++ }, ++ "record-id": { ++ "type": "integer" ++ }, ++ "record-timestamp": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "LogForwardingID", ++ "record-id", ++ "record-timestamp" ++ ] ++ }, ++ "LogForwardingSetLastSentParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LogForwardingSetLastSentParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Logger", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "LoggingConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "WatchLoggingConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MachineActions", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Actions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "BeginActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "FinishActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ActionExecutionResults" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RunningActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionsByReceivers" ++ } ++ } ++ }, ++ "WatchActionNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Action": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "parameters": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "receiver": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "receiver", ++ "name" ++ ] ++ }, ++ "ActionExecutionResult": { ++ "type": "object", ++ "properties": { ++ "action-tag": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "results": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "action-tag", ++ "status" ++ ] ++ }, ++ "ActionExecutionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionExecutionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionResult": { ++ "type": "object", ++ "properties": { ++ "action": { ++ "$ref": "#/definitions/Action" ++ }, ++ "completed": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "enqueued": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "output": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "started": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByReceiver": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "receiver": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionsByReceivers": { ++ "type": "object", ++ "properties": { ++ "actions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionsByReceiver" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MachineManager", ++ "Version": 5, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddMachines" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddMachinesResults" ++ } ++ } ++ }, ++ "DestroyMachine": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DestroyMachineResults" ++ } ++ } ++ }, ++ "DestroyMachineWithParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyMachinesParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DestroyMachineResults" ++ } ++ } ++ }, ++ "ForceDestroyMachine": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DestroyMachineResults" ++ } ++ } ++ }, ++ "GetUpgradeSeriesMessages": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeSeriesNotificationParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ }, ++ "InstanceTypes": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelInstanceTypesConstraints" ++ }, ++ "Result": { ++ "$ref": "#/definitions/InstanceTypesResults" ++ } ++ } ++ }, ++ "UpgradeSeriesComplete": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateSeriesArg" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "UpgradeSeriesPrepare": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateSeriesArg" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "UpgradeSeriesValidate": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateSeriesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpgradeSeriesUnitsResults" ++ } ++ } ++ }, ++ "WatchUpgradeSeriesNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddMachineParams": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "container-type": { ++ "type": "string" ++ }, ++ "disks": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Constraints" ++ } ++ }, ++ "hardware-characteristics": { ++ "$ref": "#/definitions/HardwareCharacteristics" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "nonce": { ++ "type": "string" ++ }, ++ "parent-id": { ++ "type": "string" ++ }, ++ "placement": { ++ "$ref": "#/definitions/Placement" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "series", ++ "constraints", ++ "jobs", ++ "parent-id", ++ "container-type", ++ "instance-id", ++ "nonce", ++ "hardware-characteristics", ++ "addresses" ++ ] ++ }, ++ "AddMachines": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddMachineParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "AddMachinesResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "machine": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine" ++ ] ++ }, ++ "AddMachinesResults": { ++ "type": "object", ++ "properties": { ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddMachinesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machines" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "Constraints": { ++ "type": "object", ++ "properties": { ++ "Count": { ++ "type": "integer" ++ }, ++ "Pool": { ++ "type": "string" ++ }, ++ "Size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Pool", ++ "Size", ++ "Count" ++ ] ++ }, ++ "DestroyMachineInfo": { ++ "type": "object", ++ "properties": { ++ "destroyed-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "destroyed-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "detached-storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyMachineResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "$ref": "#/definitions/DestroyMachineInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyMachineResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyMachineResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "DestroyMachinesParams": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "keep": { ++ "type": "boolean" ++ }, ++ "machine-tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tags" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "HardwareCharacteristics": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cpu-cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "InstanceType": { ++ "type": "object", ++ "properties": { ++ "arches": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cost": { ++ "type": "integer" ++ }, ++ "cpu-cores": { ++ "type": "integer" ++ }, ++ "deprecated": { ++ "type": "boolean" ++ }, ++ "memory": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "virt-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "arches", ++ "cpu-cores", ++ "memory" ++ ] ++ }, ++ "InstanceTypesResult": { ++ "type": "object", ++ "properties": { ++ "cost-currency": { ++ "type": "string" ++ }, ++ "cost-divisor": { ++ "type": "integer" ++ }, ++ "cost-unit": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "instance-types": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InstanceType" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "InstanceTypesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InstanceTypesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelInstanceTypesConstraint": { ++ "type": "object", ++ "properties": { ++ "value": { ++ "$ref": "#/definitions/Value" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelInstanceTypesConstraints": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelInstanceTypesConstraint" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Placement": { ++ "type": "object", ++ "properties": { ++ "directive": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "scope", ++ "directive" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UpdateSeriesArg": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "tag": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "force", ++ "series" ++ ] ++ }, ++ "UpdateSeriesArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateSeriesArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "UpgradeSeriesNotificationParam": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "watcher-id" ++ ] ++ }, ++ "UpgradeSeriesNotificationParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesNotificationParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "UpgradeSeriesUnitsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "unit-names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-names" ++ ] ++ }, ++ "UpgradeSeriesUnitsResults": { ++ "type": "object", ++ "properties": { ++ "Results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesUnitsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Results" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MachineUndertaker", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AllMachineRemovals": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/EntitiesResults" ++ } ++ } ++ }, ++ "CompleteMachineRemovals": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ } ++ } ++ }, ++ "GetMachineProviderInterfaceInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ProviderInterfaceInfoResults" ++ } ++ } ++ }, ++ "WatchMachineRemovals": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesResult": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntitiesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ProviderInterfaceInfo": { ++ "type": "object", ++ "properties": { ++ "interface-name": { ++ "type": "string" ++ }, ++ "mac-address": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "interface-name", ++ "mac-address", ++ "provider-id" ++ ] ++ }, ++ "ProviderInterfaceInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "interfaces": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ProviderInterfaceInfo" ++ } ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "interfaces" ++ ] ++ }, ++ "ProviderInterfaceInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ProviderInterfaceInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Machiner", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "EnsureDead": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Jobs": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/JobsResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "SetMachineAddresses": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachinesAddresses" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetObservedNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachineNetworkConfig" ++ } ++ } ++ }, ++ "SetProviderNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "JobsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "jobs" ++ ] ++ }, ++ "JobsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/JobsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineAddresses": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Address" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "addresses" ++ ] ++ }, ++ "NetworkConfig": { ++ "type": "object", ++ "properties": { ++ "address": { ++ "type": "string" ++ }, ++ "cidr": { ++ "type": "string" ++ }, ++ "config-type": { ++ "type": "string" ++ }, ++ "device-index": { ++ "type": "integer" ++ }, ++ "disabled": { ++ "type": "boolean" ++ }, ++ "dns-search-domains": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "dns-servers": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "gateway-address": { ++ "type": "string" ++ }, ++ "interface-name": { ++ "type": "string" ++ }, ++ "interface-type": { ++ "type": "string" ++ }, ++ "is-default-gateway": { ++ "type": "boolean" ++ }, ++ "mac-address": { ++ "type": "string" ++ }, ++ "mtu": { ++ "type": "integer" ++ }, ++ "no-auto-start": { ++ "type": "boolean" ++ }, ++ "parent-interface-name": { ++ "type": "string" ++ }, ++ "provider-address-id": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "provider-space-id": { ++ "type": "string" ++ }, ++ "provider-subnet-id": { ++ "type": "string" ++ }, ++ "provider-vlan-id": { ++ "type": "string" ++ }, ++ "routes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkRoute" ++ } ++ }, ++ "vlan-tag": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "device-index", ++ "mac-address", ++ "cidr", ++ "mtu", ++ "provider-id", ++ "provider-subnet-id", ++ "provider-space-id", ++ "provider-address-id", ++ "provider-vlan-id", ++ "vlan-tag", ++ "interface-name", ++ "parent-interface-name", ++ "interface-type", ++ "disabled" ++ ] ++ }, ++ "NetworkRoute": { ++ "type": "object", ++ "properties": { ++ "destination-cidr": { ++ "type": "string" ++ }, ++ "gateway-ip": { ++ "type": "string" ++ }, ++ "metric": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "destination-cidr", ++ "gateway-ip", ++ "metric" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetMachineNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkConfig" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "config" ++ ] ++ }, ++ "SetMachinesAddresses": { ++ "type": "object", ++ "properties": { ++ "machine-addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineAddresses" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-addresses" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MeterStatus", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "GetMeterStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MeterStatusResults" ++ } ++ } ++ }, ++ "WatchMeterStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MeterStatusResult": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "code", ++ "info" ++ ] ++ }, ++ "MeterStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MeterStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MetricsAdder", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddMetricBatches": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MetricBatchParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Metric": { ++ "type": "object", ++ "properties": { ++ "key": { ++ "type": "string" ++ }, ++ "labels": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "time": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "key", ++ "value", ++ "time" ++ ] ++ }, ++ "MetricBatch": { ++ "type": "object", ++ "properties": { ++ "charm-url": { ++ "type": "string" ++ }, ++ "created": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "metrics": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Metric" ++ } ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "charm-url", ++ "created", ++ "metrics" ++ ] ++ }, ++ "MetricBatchParam": { ++ "type": "object", ++ "properties": { ++ "batch": { ++ "$ref": "#/definitions/MetricBatch" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "batch" ++ ] ++ }, ++ "MetricBatchParams": { ++ "type": "object", ++ "properties": { ++ "batches": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MetricBatchParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "batches" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MetricsDebug", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "GetMetrics": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MetricResults" ++ } ++ } ++ }, ++ "SetMeterStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MeterStatusParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityMetrics": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "metrics": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MetricResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MeterStatusParam": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "code" ++ ] ++ }, ++ "MeterStatusParams": { ++ "type": "object", ++ "properties": { ++ "statues": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MeterStatusParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "statues" ++ ] ++ }, ++ "MetricResult": { ++ "type": "object", ++ "properties": { ++ "key": { ++ "type": "string" ++ }, ++ "labels": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "time": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "unit": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "time", ++ "key", ++ "value", ++ "unit", ++ "labels" ++ ] ++ }, ++ "MetricResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityMetrics" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MetricsManager", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddJujuMachineMetrics": { ++ "type": "object" ++ }, ++ "CleanupOldMetrics": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SendMetrics": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MigrationFlag", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Phase": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PhaseResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "PhaseResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "phase": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "PhaseResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/PhaseResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MigrationMaster", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Export": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/SerializedModel" ++ } ++ } ++ }, ++ "MigrationStatus": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MasterMigrationStatus" ++ } ++ } ++ }, ++ "MinionReports": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MinionReports" ++ } ++ } ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MigrationModelInfo" ++ } ++ } ++ }, ++ "Prechecks": { ++ "type": "object" ++ }, ++ "Reap": { ++ "type": "object" ++ }, ++ "SetPhase": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMigrationPhaseArgs" ++ } ++ } ++ }, ++ "SetStatusMessage": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMigrationStatusMessageArgs" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchMinionReports": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MasterMigrationStatus": { ++ "type": "object", ++ "properties": { ++ "migration-id": { ++ "type": "string" ++ }, ++ "phase": { ++ "type": "string" ++ }, ++ "phase-changed-time": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "spec": { ++ "$ref": "#/definitions/MigrationSpec" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "spec", ++ "migration-id", ++ "phase", ++ "phase-changed-time" ++ ] ++ }, ++ "MigrationModelInfo": { ++ "type": "object", ++ "properties": { ++ "agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "controller-agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "name", ++ "owner-tag", ++ "agent-version", ++ "controller-agent-version" ++ ] ++ }, ++ "MigrationSpec": { ++ "type": "object", ++ "properties": { ++ "model-tag": { ++ "type": "string" ++ }, ++ "target-info": { ++ "$ref": "#/definitions/MigrationTargetInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "target-info" ++ ] ++ }, ++ "MigrationTargetInfo": { ++ "type": "object", ++ "properties": { ++ "addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "auth-tag": { ++ "type": "string" ++ }, ++ "ca-cert": { ++ "type": "string" ++ }, ++ "controller-tag": { ++ "type": "string" ++ }, ++ "macaroons": { ++ "type": "string" ++ }, ++ "password": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "controller-tag", ++ "addrs", ++ "ca-cert", ++ "auth-tag" ++ ] ++ }, ++ "MinionReports": { ++ "type": "object", ++ "properties": { ++ "failed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "migration-id": { ++ "type": "string" ++ }, ++ "phase": { ++ "type": "string" ++ }, ++ "success-count": { ++ "type": "integer" ++ }, ++ "unknown-count": { ++ "type": "integer" ++ }, ++ "unknown-sample": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "migration-id", ++ "phase", ++ "success-count", ++ "unknown-count", ++ "unknown-sample", ++ "failed" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "SerializedModel": { ++ "type": "object", ++ "properties": { ++ "bytes": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "charms": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SerializedModelResource" ++ } ++ }, ++ "tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SerializedModelTools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "bytes", ++ "charms", ++ "tools", ++ "resources" ++ ] ++ }, ++ "SerializedModelResource": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "application-revision": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ }, ++ "charmstore-revision": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "unit-revisions": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "name", ++ "application-revision", ++ "charmstore-revision", ++ "unit-revisions" ++ ] ++ }, ++ "SerializedModelResourceRevision": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "fingerprint": { ++ "type": "string" ++ }, ++ "origin": { ++ "type": "string" ++ }, ++ "path": { ++ "type": "string" ++ }, ++ "revision": { ++ "type": "integer" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "timestamp": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "revision", ++ "type", ++ "path", ++ "description", ++ "origin", ++ "fingerprint", ++ "size", ++ "timestamp" ++ ] ++ }, ++ "SerializedModelTools": { ++ "type": "object", ++ "properties": { ++ "uri": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version", ++ "uri" ++ ] ++ }, ++ "SetMigrationPhaseArgs": { ++ "type": "object", ++ "properties": { ++ "phase": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "phase" ++ ] ++ }, ++ "SetMigrationStatusMessageArgs": { ++ "type": "object", ++ "properties": { ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MigrationMinion", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Report": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MinionReport" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MinionReport": { ++ "type": "object", ++ "properties": { ++ "migration-id": { ++ "type": "string" ++ }, ++ "phase": { ++ "type": "string" ++ }, ++ "success": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "migration-id", ++ "phase", ++ "success" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MigrationStatusWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MigrationStatus" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "MigrationStatus": { ++ "type": "object", ++ "properties": { ++ "attempt": { ++ "type": "integer" ++ }, ++ "migration-id": { ++ "type": "string" ++ }, ++ "phase": { ++ "type": "string" ++ }, ++ "source-api-addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "source-ca-cert": { ++ "type": "string" ++ }, ++ "target-api-addrs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "target-ca-cert": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "migration-id", ++ "attempt", ++ "phase", ++ "source-api-addrs", ++ "source-ca-cert", ++ "target-api-addrs", ++ "target-ca-cert" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "MigrationTarget", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Abort": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelArgs" ++ } ++ } ++ }, ++ "Activate": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelArgs" ++ } ++ } ++ }, ++ "AdoptResources": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AdoptResourcesArgs" ++ } ++ } ++ }, ++ "CACert": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/BytesResult" ++ } ++ } ++ }, ++ "CheckMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Import": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SerializedModel" ++ } ++ } ++ }, ++ "LatestLogTime": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelArgs" ++ }, ++ "Result": { ++ "type": "string", ++ "format": "date-time" ++ } ++ } ++ }, ++ "Prechecks": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MigrationModelInfo" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AdoptResourcesArgs": { ++ "type": "object", ++ "properties": { ++ "model-tag": { ++ "type": "string" ++ }, ++ "source-controller-version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "source-controller-version" ++ ] ++ }, ++ "BytesResult": { ++ "type": "object", ++ "properties": { ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MigrationModelInfo": { ++ "type": "object", ++ "properties": { ++ "agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "controller-agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "name", ++ "owner-tag", ++ "agent-version", ++ "controller-agent-version" ++ ] ++ }, ++ "ModelArgs": { ++ "type": "object", ++ "properties": { ++ "model-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "SerializedModel": { ++ "type": "object", ++ "properties": { ++ "bytes": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "charms": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SerializedModelResource" ++ } ++ }, ++ "tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SerializedModelTools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "bytes", ++ "charms", ++ "tools", ++ "resources" ++ ] ++ }, ++ "SerializedModelResource": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "type": "string" ++ }, ++ "application-revision": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ }, ++ "charmstore-revision": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "unit-revisions": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/SerializedModelResourceRevision" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "name", ++ "application-revision", ++ "charmstore-revision", ++ "unit-revisions" ++ ] ++ }, ++ "SerializedModelResourceRevision": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "fingerprint": { ++ "type": "string" ++ }, ++ "origin": { ++ "type": "string" ++ }, ++ "path": { ++ "type": "string" ++ }, ++ "revision": { ++ "type": "integer" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "timestamp": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "revision", ++ "type", ++ "path", ++ "description", ++ "origin", ++ "fingerprint", ++ "size", ++ "timestamp" ++ ] ++ }, ++ "SerializedModelTools": { ++ "type": "object", ++ "properties": { ++ "uri": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version", ++ "uri" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ModelConfig", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ModelGet": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResults" ++ } ++ } ++ }, ++ "ModelSet": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelSet" ++ } ++ } ++ }, ++ "ModelUnset": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelUnset" ++ } ++ } ++ }, ++ "SLALevel": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "Sequences": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelSequencesResult" ++ } ++ } ++ }, ++ "SetSLALevel": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelSLA" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ConfigValue": { ++ "type": "object", ++ "properties": { ++ "source": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "source" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResults": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ConfigValue" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelSLA": { ++ "type": "object", ++ "properties": { ++ "ModelSLAInfo": { ++ "$ref": "#/definitions/ModelSLAInfo" ++ }, ++ "creds": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ModelSLAInfo", ++ "creds" ++ ] ++ }, ++ "ModelSLAInfo": { ++ "type": "object", ++ "properties": { ++ "level": { ++ "type": "string" ++ }, ++ "owner": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "level", ++ "owner" ++ ] ++ }, ++ "ModelSequencesResult": { ++ "type": "object", ++ "properties": { ++ "sequences": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "integer" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "sequences" ++ ] ++ }, ++ "ModelSet": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelUnset": { ++ "type": "object", ++ "properties": { ++ "keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "keys" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ModelManager", ++ "Version": 5, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ChangeModelCredential": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ChangeModelCredentialsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CreateModel": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelCreateArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ModelInfo" ++ } ++ } ++ }, ++ "DestroyModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DestroyModelsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "DumpModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/DumpModelRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "DumpModelsDB": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MapResults" ++ } ++ } ++ }, ++ "ListModelSummaries": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModelSummariesRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ModelSummaryResults" ++ } ++ } ++ }, ++ "ListModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UserModelList" ++ } ++ } ++ }, ++ "ModelDefaults": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelDefaultsResult" ++ } ++ } ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ModelInfoResults" ++ } ++ } ++ }, ++ "ModelStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ModelStatusResults" ++ } ++ } ++ }, ++ "ModifyModelAccess": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ModifyModelAccessRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetModelDefaults": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetModelDefaults" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UnsetModelDefaults": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UnsetModelDefaults" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ChangeModelCredentialParams": { ++ "type": "object", ++ "properties": { ++ "credential-tag": { ++ "type": "string" ++ }, ++ "model-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "credential-tag" ++ ] ++ }, ++ "ChangeModelCredentialsParams": { ++ "type": "object", ++ "properties": { ++ "model-credentials": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ChangeModelCredentialParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-credentials" ++ ] ++ }, ++ "DestroyModelParams": { ++ "type": "object", ++ "properties": { ++ "destroy-storage": { ++ "type": "boolean" ++ }, ++ "model-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag" ++ ] ++ }, ++ "DestroyModelsParams": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DestroyModelParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "models" ++ ] ++ }, ++ "DumpModelRequest": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "simplified": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities", ++ "simplified" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineHardware": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "MapResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "MapResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MapResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Model": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "uuid", ++ "type", ++ "owner-tag" ++ ] ++ }, ++ "ModelCreateArgs": { ++ "type": "object", ++ "properties": { ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "credential": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "owner-tag" ++ ] ++ }, ++ "ModelDefaultValues": { ++ "type": "object", ++ "properties": { ++ "cloud-region": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelDefaults": { ++ "type": "object", ++ "properties": { ++ "controller": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "default": { ++ "type": "object", ++ "additionalProperties": true ++ }, ++ "regions": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RegionDefaults" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelDefaultsResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/ModelDefaults" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelEntityCount": { ++ "type": "object", ++ "properties": { ++ "count": { ++ "type": "integer" ++ }, ++ "entity": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "count" ++ ] ++ }, ++ "ModelFilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "detachable": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "cloud-credential-tag": { ++ "type": "string" ++ }, ++ "cloud-region": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "controller-uuid": { ++ "type": "string" ++ }, ++ "default-series": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelMachineInfo" ++ } ++ }, ++ "migration": { ++ "$ref": "#/definitions/ModelMigrationStatus" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "provider-type": { ++ "type": "string" ++ }, ++ "sla": { ++ "$ref": "#/definitions/ModelSLAInfo" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelUserInfo" ++ } ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "uuid", ++ "controller-uuid", ++ "cloud-tag", ++ "owner-tag", ++ "life", ++ "users", ++ "machines", ++ "sla", ++ "agent-version" ++ ] ++ }, ++ "ModelInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ModelInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ModelMachineInfo": { ++ "type": "object", ++ "properties": { ++ "hardware": { ++ "$ref": "#/definitions/MachineHardware" ++ }, ++ "has-vote": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "wants-vote": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModelMigrationStatus": { ++ "type": "object", ++ "properties": { ++ "end": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "start": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "start" ++ ] ++ }, ++ "ModelSLAInfo": { ++ "type": "object", ++ "properties": { ++ "level": { ++ "type": "string" ++ }, ++ "owner": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "level", ++ "owner" ++ ] ++ }, ++ "ModelStatus": { ++ "type": "object", ++ "properties": { ++ "application-count": { ++ "type": "integer" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "filesystems": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelFilesystemInfo" ++ } ++ }, ++ "hosted-machine-count": { ++ "type": "integer" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelMachineInfo" ++ } ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelVolumeInfo" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "life", ++ "hosted-machine-count", ++ "application-count", ++ "owner-tag" ++ ] ++ }, ++ "ModelStatusResults": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelStatus" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "models" ++ ] ++ }, ++ "ModelSummariesRequest": { ++ "type": "object", ++ "properties": { ++ "all": { ++ "type": "boolean" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag" ++ ] ++ }, ++ "ModelSummary": { ++ "type": "object", ++ "properties": { ++ "agent-version": { ++ "$ref": "#/definitions/Number" ++ }, ++ "cloud-credential-tag": { ++ "type": "string" ++ }, ++ "cloud-region": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "controller-uuid": { ++ "type": "string" ++ }, ++ "counts": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelEntityCount" ++ } ++ }, ++ "default-series": { ++ "type": "string" ++ }, ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "migration": { ++ "$ref": "#/definitions/ModelMigrationStatus" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "provider-type": { ++ "type": "string" ++ }, ++ "sla": { ++ "$ref": "#/definitions/ModelSLAInfo" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "user-access": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "uuid", ++ "type", ++ "controller-uuid", ++ "cloud-tag", ++ "owner-tag", ++ "life", ++ "user-access", ++ "last-connection", ++ "counts", ++ "sla", ++ "agent-version" ++ ] ++ }, ++ "ModelSummaryResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ModelSummary" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ModelSummaryResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelSummaryResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ModelUnsetKeys": { ++ "type": "object", ++ "properties": { ++ "cloud-region": { ++ "type": "string" ++ }, ++ "cloud-tag": { ++ "type": "string" ++ }, ++ "keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "keys" ++ ] ++ }, ++ "ModelUserInfo": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "user": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user", ++ "display-name", ++ "last-connection", ++ "access" ++ ] ++ }, ++ "ModelVolumeInfo": { ++ "type": "object", ++ "properties": { ++ "detachable": { ++ "type": "boolean" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id" ++ ] ++ }, ++ "ModifyModelAccess": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "action": { ++ "type": "string" ++ }, ++ "model-tag": { ++ "type": "string" ++ }, ++ "user-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-tag", ++ "action", ++ "access", ++ "model-tag" ++ ] ++ }, ++ "ModifyModelAccessRequest": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModifyModelAccess" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "RegionDefaults": { ++ "type": "object", ++ "properties": { ++ "region-name": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "region-name", ++ "value" ++ ] ++ }, ++ "SetModelDefaults": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelDefaultValues" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UnsetModelDefaults": { ++ "type": "object", ++ "properties": { ++ "keys": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ModelUnsetKeys" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "keys" ++ ] ++ }, ++ "UserModel": { ++ "type": "object", ++ "properties": { ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "model": { ++ "$ref": "#/definitions/Model" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model", ++ "last-connection" ++ ] ++ }, ++ "UserModelList": { ++ "type": "object", ++ "properties": { ++ "user-models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UserModel" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "user-models" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ModelUpgrader", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ModelEnvironVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/IntResults" ++ } ++ } ++ }, ++ "ModelTargetEnvironVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/IntResults" ++ } ++ } ++ }, ++ "SetModelEnvironVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetModelEnvironVersions" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetModelStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchModelEnvironVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "IntResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "IntResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/IntResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetModelEnvironVersion": { ++ "type": "object", ++ "properties": { ++ "model-tag": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "model-tag", ++ "version" ++ ] ++ }, ++ "SetModelEnvironVersions": { ++ "type": "object", ++ "properties": { ++ "models": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SetModelEnvironVersion" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "NotifyWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object" ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ } ++ } ++ }, ++ { ++ "Name": "OfferStatusWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/OfferStatusWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "OfferStatusChange": { ++ "type": "object", ++ "properties": { ++ "offer-name": { ++ "type": "string" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "offer-name", ++ "status" ++ ] ++ }, ++ "OfferStatusWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/OfferStatusChange" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Payloads", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "List": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/PayloadListArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadListResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Payload": { ++ "type": "object", ++ "properties": { ++ "class": { ++ "type": "string" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "labels": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "machine": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "class", ++ "type", ++ "id", ++ "status", ++ "labels", ++ "unit", ++ "machine" ++ ] ++ }, ++ "PayloadListArgs": { ++ "type": "object", ++ "properties": { ++ "patterns": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "patterns" ++ ] ++ }, ++ "PayloadListResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Payload" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "PayloadsHookContext", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "List": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadResults" ++ } ++ } ++ }, ++ "LookUp": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/LookUpPayloadArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetPayloadStatusArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadResults" ++ } ++ } ++ }, ++ "Track": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/TrackPayloadArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadResults" ++ } ++ } ++ }, ++ "Untrack": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/PayloadResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "LookUpPayloadArg": { ++ "type": "object", ++ "properties": { ++ "id": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "id" ++ ] ++ }, ++ "LookUpPayloadArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LookUpPayloadArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Payload": { ++ "type": "object", ++ "properties": { ++ "class": { ++ "type": "string" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "labels": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "machine": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "class", ++ "type", ++ "id", ++ "status", ++ "labels", ++ "unit", ++ "machine" ++ ] ++ }, ++ "PayloadResult": { ++ "type": "object", ++ "properties": { ++ "Entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "not-found": { ++ "type": "boolean" ++ }, ++ "payload": { ++ "$ref": "#/definitions/Payload" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Entity", ++ "payload", ++ "not-found" ++ ] ++ }, ++ "PayloadResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/PayloadResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetPayloadStatusArg": { ++ "type": "object", ++ "properties": { ++ "Entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Entity", ++ "status" ++ ] ++ }, ++ "SetPayloadStatusArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SetPayloadStatusArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "TrackPayloadArgs": { ++ "type": "object", ++ "properties": { ++ "payloads": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Payload" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "payloads" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Pinger", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Ping": { ++ "type": "object" ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Provisioner", ++ "Version": 7, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "AvailabilityZone": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "CACert": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/BytesResult" ++ } ++ } ++ }, ++ "CharmProfileChangeInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ProfileChangeResults" ++ } ++ } ++ }, ++ "Constraints": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ConstraintsResults" ++ } ++ } ++ }, ++ "ContainerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ContainerConfig" ++ } ++ } ++ }, ++ "ContainerManagerConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ContainerManagerConfigParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ContainerManagerConfig" ++ } ++ } ++ }, ++ "ControllerAPIInfoForModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "ControllerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerConfigResult" ++ } ++ } ++ }, ++ "DistributionGroup": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/DistributionGroupResults" ++ } ++ } ++ }, ++ "DistributionGroupByMachineId": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsResults" ++ } ++ } ++ }, ++ "EnsureDead": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "FindTools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FindToolsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FindToolsResult" ++ } ++ } ++ }, ++ "GetContainerInterfaceInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineNetworkConfigResults" ++ } ++ } ++ }, ++ "GetContainerProfileInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ContainerProfileResults" ++ } ++ } ++ }, ++ "HostChangesForContainers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/HostNetworkChangeResults" ++ } ++ } ++ }, ++ "InstanceId": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "InstanceStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "KeepInstance": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "MachinesWithTransientErrors": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "MarkMachinesForRemoval": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "PrepareContainerInterfaceInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineNetworkConfigResults" ++ } ++ } ++ }, ++ "ProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ProvisioningInfoResults" ++ } ++ } ++ }, ++ "ReleaseContainerAddresses": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveUpgradeCharmProfileData": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Series": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "SetCharmProfiles": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetProfileArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetHostMachineNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachineNetworkConfig" ++ } ++ } ++ }, ++ "SetInstanceInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/InstancesInfo" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetInstanceStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetObservedNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetMachineNetworkConfig" ++ } ++ } ++ }, ++ "SetPasswords": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityPasswords" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetProviderNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetSupportedContainers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineContainersParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetUpgradeCharmProfileComplete": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetProfileUpgradeCompleteArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "StateAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "Status": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "Tools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ToolsResults" ++ } ++ } ++ }, ++ "UpdateStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchAllContainers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/WatchContainers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchContainers": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/WatchContainers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchContainersCharmProfiles": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/WatchContainers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchMachineErrorRetry": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchModelMachines": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "WatchModelMachinesCharmProfiles": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "Binary": { ++ "type": "object", ++ "properties": { ++ "Arch": { ++ "type": "string" ++ }, ++ "Number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "Series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Number", ++ "Series", ++ "Arch" ++ ] ++ }, ++ "BoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "BytesResult": { ++ "type": "object", ++ "properties": { ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "CharmLXDProfile": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "description": { ++ "type": "string" ++ }, ++ "devices": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config", ++ "description", ++ "devices" ++ ] ++ }, ++ "CloudImageMetadata": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "image-id": { ++ "type": "string" ++ }, ++ "priority": { ++ "type": "integer" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "root-storage-size": { ++ "type": "integer" ++ }, ++ "root-storage-type": { ++ "type": "string" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "source": { ++ "type": "string" ++ }, ++ "stream": { ++ "type": "string" ++ }, ++ "version": { ++ "type": "string" ++ }, ++ "virt-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "image-id", ++ "region", ++ "version", ++ "series", ++ "arch", ++ "source", ++ "priority" ++ ] ++ }, ++ "ConstraintsResult": { ++ "type": "object", ++ "properties": { ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints" ++ ] ++ }, ++ "ConstraintsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConstraintsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ContainerConfig": { ++ "type": "object", ++ "properties": { ++ "UpdateBehavior": { ++ "$ref": "#/definitions/UpdateBehavior" ++ }, ++ "apt-mirror": { ++ "type": "string" ++ }, ++ "apt-proxy": { ++ "$ref": "#/definitions/Settings" ++ }, ++ "authorized-keys": { ++ "type": "string" ++ }, ++ "cloudinit-userdata": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "container-inherit-properties": { ++ "type": "string" ++ }, ++ "juju-proxy": { ++ "$ref": "#/definitions/Settings" ++ }, ++ "legacy-proxy": { ++ "$ref": "#/definitions/Settings" ++ }, ++ "provider-type": { ++ "type": "string" ++ }, ++ "snap-proxy": { ++ "$ref": "#/definitions/Settings" ++ }, ++ "ssl-hostname-verification": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider-type", ++ "authorized-keys", ++ "ssl-hostname-verification", ++ "legacy-proxy", ++ "juju-proxy", ++ "apt-proxy", ++ "snap-proxy", ++ "apt-mirror", ++ "UpdateBehavior" ++ ] ++ }, ++ "ContainerLXDProfile": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "profile": { ++ "$ref": "#/definitions/CharmLXDProfile" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "profile", ++ "name" ++ ] ++ }, ++ "ContainerManagerConfig": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ContainerManagerConfigParams": { ++ "type": "object", ++ "properties": { ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type" ++ ] ++ }, ++ "ContainerProfileResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "lxd-profiles": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ContainerLXDProfile" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ContainerProfileResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ContainerProfileResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "DeviceBridgeInfo": { ++ "type": "object", ++ "properties": { ++ "bridge-name": { ++ "type": "string" ++ }, ++ "host-device-name": { ++ "type": "string" ++ }, ++ "mac-address": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "host-device-name", ++ "bridge-name", ++ "mac-address" ++ ] ++ }, ++ "DistributionGroupResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "DistributionGroupResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DistributionGroupResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityPassword": { ++ "type": "object", ++ "properties": { ++ "password": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "password" ++ ] ++ }, ++ "EntityPasswords": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPassword" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "FindToolsParams": { ++ "type": "object", ++ "properties": { ++ "agentstream": { ++ "type": "string" ++ }, ++ "arch": { ++ "type": "string" ++ }, ++ "major": { ++ "type": "integer" ++ }, ++ "minor": { ++ "type": "integer" ++ }, ++ "number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "number", ++ "major", ++ "minor", ++ "arch", ++ "series", ++ "agentstream" ++ ] ++ }, ++ "FindToolsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "list": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Tools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "list" ++ ] ++ }, ++ "HardwareCharacteristics": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "availability-zone": { ++ "type": "string" ++ }, ++ "cpu-cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "HostNetworkChange": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "new-bridges": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/DeviceBridgeInfo" ++ } ++ }, ++ "reconfigure-delay": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "new-bridges", ++ "reconfigure-delay" ++ ] ++ }, ++ "HostNetworkChangeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostNetworkChange" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "InstanceInfo": { ++ "type": "object", ++ "properties": { ++ "characteristics": { ++ "$ref": "#/definitions/HardwareCharacteristics" ++ }, ++ "charm-profiles": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "network-config": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkConfig" ++ } ++ }, ++ "nonce": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ }, ++ "volume-attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/VolumeAttachmentInfo" ++ } ++ } ++ }, ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Volume" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "instance-id", ++ "nonce", ++ "characteristics", ++ "volumes", ++ "volume-attachments", ++ "network-config", ++ "charm-profiles" ++ ] ++ }, ++ "InstancesInfo": { ++ "type": "object", ++ "properties": { ++ "machines": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InstanceInfo" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machines" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineContainers": { ++ "type": "object", ++ "properties": { ++ "container-types": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "container-types" ++ ] ++ }, ++ "MachineContainersParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineContainers" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "MachineNetworkConfigResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkConfig" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "info" ++ ] ++ }, ++ "MachineNetworkConfigResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineNetworkConfigResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "NetworkConfig": { ++ "type": "object", ++ "properties": { ++ "address": { ++ "type": "string" ++ }, ++ "cidr": { ++ "type": "string" ++ }, ++ "config-type": { ++ "type": "string" ++ }, ++ "device-index": { ++ "type": "integer" ++ }, ++ "disabled": { ++ "type": "boolean" ++ }, ++ "dns-search-domains": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "dns-servers": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "gateway-address": { ++ "type": "string" ++ }, ++ "interface-name": { ++ "type": "string" ++ }, ++ "interface-type": { ++ "type": "string" ++ }, ++ "is-default-gateway": { ++ "type": "boolean" ++ }, ++ "mac-address": { ++ "type": "string" ++ }, ++ "mtu": { ++ "type": "integer" ++ }, ++ "no-auto-start": { ++ "type": "boolean" ++ }, ++ "parent-interface-name": { ++ "type": "string" ++ }, ++ "provider-address-id": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "provider-space-id": { ++ "type": "string" ++ }, ++ "provider-subnet-id": { ++ "type": "string" ++ }, ++ "provider-vlan-id": { ++ "type": "string" ++ }, ++ "routes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkRoute" ++ } ++ }, ++ "vlan-tag": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "device-index", ++ "mac-address", ++ "cidr", ++ "mtu", ++ "provider-id", ++ "provider-subnet-id", ++ "provider-space-id", ++ "provider-address-id", ++ "provider-vlan-id", ++ "vlan-tag", ++ "interface-name", ++ "parent-interface-name", ++ "interface-type", ++ "disabled" ++ ] ++ }, ++ "NetworkRoute": { ++ "type": "object", ++ "properties": { ++ "destination-cidr": { ++ "type": "string" ++ }, ++ "gateway-ip": { ++ "type": "string" ++ }, ++ "metric": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "destination-cidr", ++ "gateway-ip", ++ "metric" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "ProfileChangeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "new-profile-name": { ++ "type": "string" ++ }, ++ "old-profile-name": { ++ "type": "string" ++ }, ++ "profile": { ++ "$ref": "#/definitions/CharmLXDProfile" ++ }, ++ "subordinate": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ProfileChangeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ProfileChangeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ProvisioningInfo": { ++ "type": "object", ++ "properties": { ++ "charm-lxd-profiles": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cloudinit-userdata": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "constraints": { ++ "$ref": "#/definitions/Value" ++ }, ++ "controller-config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "endpoint-bindings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "image-metadata": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CloudImageMetadata" ++ } ++ }, ++ "jobs": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "placement": { ++ "type": "string" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "subnets-to-zones": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "volume-attachments": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachmentParams" ++ } ++ }, ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "constraints", ++ "series", ++ "placement", ++ "jobs" ++ ] ++ }, ++ "ProvisioningInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ProvisioningInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "ProvisioningInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ProvisioningInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetMachineNetworkConfig": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkConfig" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "config" ++ ] ++ }, ++ "SetProfileArg": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "profiles": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "profiles" ++ ] ++ }, ++ "SetProfileArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SetProfileArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "SetProfileUpgradeCompleteArg": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "message" ++ ] ++ }, ++ "SetProfileUpgradeCompleteArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SetProfileUpgradeCompleteArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Settings": { ++ "type": "object", ++ "properties": { ++ "AutoNoProxy": { ++ "type": "string" ++ }, ++ "Ftp": { ++ "type": "string" ++ }, ++ "Http": { ++ "type": "string" ++ }, ++ "Https": { ++ "type": "string" ++ }, ++ "NoProxy": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Http", ++ "Https", ++ "Ftp", ++ "NoProxy", ++ "AutoNoProxy" ++ ] ++ }, ++ "StatusResult": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "life", ++ "status", ++ "info", ++ "data", ++ "since" ++ ] ++ }, ++ "StatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Tools": { ++ "type": "object", ++ "properties": { ++ "sha256": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "url": { ++ "type": "string" ++ }, ++ "version": { ++ "$ref": "#/definitions/Binary" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version", ++ "url", ++ "size" ++ ] ++ }, ++ "ToolsResult": { ++ "type": "object", ++ "properties": { ++ "disable-ssl-hostname-verification": { ++ "type": "boolean" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Tools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tools", ++ "disable-ssl-hostname-verification" ++ ] ++ }, ++ "ToolsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ToolsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UpdateBehavior": { ++ "type": "object", ++ "properties": { ++ "enable-os-refresh-update": { ++ "type": "boolean" ++ }, ++ "enable-os-upgrade": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "enable-os-refresh-update", ++ "enable-os-upgrade" ++ ] ++ }, ++ "Value": { ++ "type": "object", ++ "properties": { ++ "arch": { ++ "type": "string" ++ }, ++ "container": { ++ "type": "string" ++ }, ++ "cores": { ++ "type": "integer" ++ }, ++ "cpu-power": { ++ "type": "integer" ++ }, ++ "instance-type": { ++ "type": "string" ++ }, ++ "mem": { ++ "type": "integer" ++ }, ++ "root-disk": { ++ "type": "integer" ++ }, ++ "spaces": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "virt-type": { ++ "type": "string" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Volume": { ++ "type": "object", ++ "properties": { ++ "info": { ++ "$ref": "#/definitions/VolumeInfo" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "info" ++ ] ++ }, ++ "VolumeAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "bus-address": { ++ "type": "string" ++ }, ++ "device-link": { ++ "type": "string" ++ }, ++ "device-name": { ++ "type": "string" ++ }, ++ "plan-info": { ++ "$ref": "#/definitions/VolumeAttachmentPlanInfo" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "instance-id": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ }, ++ "volume-id": { ++ "type": "string" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "machine-tag", ++ "provider" ++ ] ++ }, ++ "VolumeAttachmentPlanInfo": { ++ "type": "object", ++ "properties": { ++ "device-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "device-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeInfo": { ++ "type": "object", ++ "properties": { ++ "hardware-id": { ++ "type": "string" ++ }, ++ "persistent": { ++ "type": "boolean" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "volume-id": { ++ "type": "string" ++ }, ++ "wwn": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-id", ++ "size", ++ "persistent" ++ ] ++ }, ++ "VolumeParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/VolumeAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "size", ++ "provider" ++ ] ++ }, ++ "WatchContainer": { ++ "type": "object", ++ "properties": { ++ "container-type": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "container-type" ++ ] ++ }, ++ "WatchContainers": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/WatchContainer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ProxyUpdater", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ProxyConfig": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ProxyConfigResults" ++ } ++ } ++ }, ++ "WatchForProxyConfigAndAPIHostPortChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ProxyConfig": { ++ "type": "object", ++ "properties": { ++ "ftp": { ++ "type": "string" ++ }, ++ "http": { ++ "type": "string" ++ }, ++ "https": { ++ "type": "string" ++ }, ++ "no-proxy": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "http", ++ "https", ++ "ftp", ++ "no-proxy" ++ ] ++ }, ++ "ProxyConfigResult": { ++ "type": "object", ++ "properties": { ++ "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" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "legacy-proxy-settings", ++ "juju-proxy-settings" ++ ] ++ }, ++ "ProxyConfigResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ProxyConfigResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Reboot", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ClearReboot": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "GetRebootAction": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RebootActionResults" ++ } ++ } ++ }, ++ "RequestReboot": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchForRebootEvent": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "RebootActionResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RebootActionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RebootActionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "RelationStatusWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/RelationLifeSuspendedStatusWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "RelationLifeSuspendedStatusChange": { ++ "type": "object", ++ "properties": { ++ "key": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "suspended": { ++ "type": "boolean" ++ }, ++ "suspended-reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "key", ++ "life", ++ "suspended", ++ "suspended-reason" ++ ] ++ }, ++ "RelationLifeSuspendedStatusWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationLifeSuspendedStatusChange" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "RelationUnitsWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/RelationUnitsWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "RelationUnitsChange": { ++ "type": "object", ++ "properties": { ++ "changed": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitSettings" ++ } ++ } ++ }, ++ "departed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changed" ++ ] ++ }, ++ "RelationUnitsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "$ref": "#/definitions/RelationUnitsChange" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "UnitSettings": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "RemoteRelations", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ConsumeRemoteRelationChanges": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteRelationsChanges" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ControllerAPIInfoForModels": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ControllerAPIInfoResults" ++ } ++ } ++ }, ++ "ControllerConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ControllerConfigResult" ++ } ++ } ++ }, ++ "ExportEntities": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/TokenResults" ++ } ++ } ++ }, ++ "GetTokens": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/GetTokenArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "ImportRemoteEntities": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoteEntityTokenArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RelationUnitSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SettingsResults" ++ } ++ } ++ }, ++ "Relations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RemoteRelationResults" ++ } ++ } ++ }, ++ "RemoteApplications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RemoteApplicationResults" ++ } ++ } ++ }, ++ "SaveMacaroons": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityMacaroonArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetRemoteApplicationsStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchLocalRelationUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationUnitsWatchResults" ++ } ++ } ++ }, ++ "WatchRemoteApplicationRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchRemoteApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "WatchRemoteRelations": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "ControllerAPIInfoResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "cacert": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses", ++ "cacert" ++ ] ++ }, ++ "ControllerAPIInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ControllerAPIInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ControllerConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityMacaroonArg": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "macaroon", ++ "tag" ++ ] ++ }, ++ "EntityMacaroonArgs": { ++ "type": "object", ++ "properties": { ++ "Args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityMacaroonArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Args" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "GetTokenArg": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "GetTokenArgs": { ++ "type": "object", ++ "properties": { ++ "Args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/GetTokenArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Args" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "RelationUnit": { ++ "type": "object", ++ "properties": { ++ "relation": { ++ "type": "string" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation", ++ "unit" ++ ] ++ }, ++ "RelationUnits": { ++ "type": "object", ++ "properties": { ++ "relation-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnit" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-units" ++ ] ++ }, ++ "RelationUnitsChange": { ++ "type": "object", ++ "properties": { ++ "changed": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitSettings" ++ } ++ } ++ }, ++ "departed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changed" ++ ] ++ }, ++ "RelationUnitsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "$ref": "#/definitions/RelationUnitsChange" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "RelationUnitsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoteApplication": { ++ "type": "object", ++ "properties": { ++ "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" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "offer-uuid", ++ "model-uuid", ++ "is-consumer-proxy" ++ ] ++ }, ++ "RemoteApplicationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoteApplication" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoteApplicationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteApplicationResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoteEndpoint": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "role": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "limit" ++ ] ++ }, ++ "RemoteEntityTokenArg": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "token": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "RemoteEntityTokenArgs": { ++ "type": "object", ++ "properties": { ++ "Args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteEntityTokenArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Args" ++ ] ++ }, ++ "RemoteRelation": { ++ "type": "object", ++ "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" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life", ++ "suspended", ++ "id", ++ "key", ++ "application-name", ++ "endpoint", ++ "remote-application-name", ++ "remote-endpoint-name", ++ "source-model-uuid" ++ ] ++ }, ++ "RemoteRelationChangeEvent": { ++ "type": "object", ++ "properties": { ++ "application-token": { ++ "type": "string" ++ }, ++ "changed-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationUnitChange" ++ } ++ }, ++ "departed-units": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "force-cleanup": { ++ "type": "boolean" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "macaroons": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Macaroon" ++ } ++ }, ++ "relation-token": { ++ "type": "string" ++ }, ++ "suspended": { ++ "type": "boolean" ++ }, ++ "suspended-reason": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-token", ++ "application-token", ++ "life" ++ ] ++ }, ++ "RemoteRelationResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoteRelation" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoteRelationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoteRelationUnitChange": { ++ "type": "object", ++ "properties": { ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "unit-id": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-id" ++ ] ++ }, ++ "RemoteRelationsChanges": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoteRelationChangeEvent" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "SettingsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "SettingsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SettingsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "TokenResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "token": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "TokenResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/TokenResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UnitSettings": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Resources", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddPendingResources": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddPendingResourcesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddPendingResourcesResult" ++ } ++ } ++ }, ++ "ListResources": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ListResourcesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ResourcesResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddCharmWithAuthorization": { ++ "type": "object", ++ "properties": { ++ "channel": { ++ "type": "string" ++ }, ++ "force": { ++ "type": "boolean" ++ }, ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url", ++ "channel", ++ "macaroon", ++ "force" ++ ] ++ }, ++ "AddPendingResourcesArgs": { ++ "type": "object", ++ "properties": { ++ "AddCharmWithAuthorization": { ++ "$ref": "#/definitions/AddCharmWithAuthorization" ++ }, ++ "Entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CharmResource" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Entity", ++ "AddCharmWithAuthorization", ++ "resources" ++ ] ++ }, ++ "AddPendingResourcesResult": { ++ "type": "object", ++ "properties": { ++ "ErrorResult": { ++ "$ref": "#/definitions/ErrorResult" ++ }, ++ "pending-ids": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ErrorResult", ++ "pending-ids" ++ ] ++ }, ++ "CharmResource": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "fingerprint": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "origin": { ++ "type": "string" ++ }, ++ "path": { ++ "type": "string" ++ }, ++ "revision": { ++ "type": "integer" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "path", ++ "origin", ++ "revision", ++ "fingerprint", ++ "size" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ListResourcesArgs": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Resource": { ++ "type": "object", ++ "properties": { ++ "CharmResource": { ++ "$ref": "#/definitions/CharmResource" ++ }, ++ "application": { ++ "type": "string" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "pending-id": { ++ "type": "string" ++ }, ++ "timestamp": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "CharmResource", ++ "id", ++ "pending-id", ++ "application", ++ "username", ++ "timestamp" ++ ] ++ }, ++ "ResourcesResult": { ++ "type": "object", ++ "properties": { ++ "ErrorResult": { ++ "$ref": "#/definitions/ErrorResult" ++ }, ++ "charm-store-resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CharmResource" ++ } ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Resource" ++ } ++ }, ++ "unit-resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UnitResources" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ErrorResult", ++ "resources", ++ "charm-store-resources", ++ "unit-resources" ++ ] ++ }, ++ "ResourcesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ResourcesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UnitResources": { ++ "type": "object", ++ "properties": { ++ "Entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "download-progress": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "integer" ++ } ++ } ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Resource" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Entity", ++ "resources", ++ "download-progress" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "ResourcesHookContext", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "GetResourceInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ListUnitResourcesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UnitResourcesResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "CharmResource": { ++ "type": "object", ++ "properties": { ++ "description": { ++ "type": "string" ++ }, ++ "fingerprint": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "origin": { ++ "type": "string" ++ }, ++ "path": { ++ "type": "string" ++ }, ++ "revision": { ++ "type": "integer" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "type", ++ "path", ++ "origin", ++ "revision", ++ "fingerprint", ++ "size" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ListUnitResourcesArgs": { ++ "type": "object", ++ "properties": { ++ "resource-names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "resource-names" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Resource": { ++ "type": "object", ++ "properties": { ++ "CharmResource": { ++ "$ref": "#/definitions/CharmResource" ++ }, ++ "application": { ++ "type": "string" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "pending-id": { ++ "type": "string" ++ }, ++ "timestamp": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "CharmResource", ++ "id", ++ "pending-id", ++ "application", ++ "username", ++ "timestamp" ++ ] ++ }, ++ "UnitResourceResult": { ++ "type": "object", ++ "properties": { ++ "ErrorResult": { ++ "$ref": "#/definitions/ErrorResult" ++ }, ++ "resource": { ++ "$ref": "#/definitions/Resource" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ErrorResult", ++ "resource" ++ ] ++ }, ++ "UnitResourcesResult": { ++ "type": "object", ++ "properties": { ++ "ErrorResult": { ++ "$ref": "#/definitions/ErrorResult" ++ }, ++ "resources": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UnitResourceResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ErrorResult", ++ "resources" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Resumer", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ResumeTransactions": { ++ "type": "object" ++ } ++ } ++ } ++ }, ++ { ++ "Name": "RetryStrategy", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "RetryStrategy": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RetryStrategyResults" ++ } ++ } ++ }, ++ "WatchRetryStrategy": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RetryStrategy": { ++ "type": "object", ++ "properties": { ++ "jitter-retry-time": { ++ "type": "boolean" ++ }, ++ "max-retry-time": { ++ "type": "integer" ++ }, ++ "min-retry-time": { ++ "type": "integer" ++ }, ++ "retry-time-factor": { ++ "type": "integer" ++ }, ++ "should-retry": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "should-retry", ++ "min-retry-time", ++ "max-retry-time", ++ "jitter-retry-time", ++ "retry-time-factor" ++ ] ++ }, ++ "RetryStrategyResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RetryStrategy" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RetryStrategyResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RetryStrategyResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "SSHClient", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AllAddresses": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SSHAddressesResults" ++ } ++ } ++ }, ++ "PrivateAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SSHAddressResults" ++ } ++ } ++ }, ++ "Proxy": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/SSHProxyResult" ++ } ++ } ++ }, ++ "PublicAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SSHAddressResults" ++ } ++ } ++ }, ++ "PublicKeys": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SSHPublicKeysResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SSHAddressResult": { ++ "type": "object", ++ "properties": { ++ "address": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "SSHAddressResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SSHAddressResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SSHAddressesResult": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "addresses" ++ ] ++ }, ++ "SSHAddressesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SSHAddressesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SSHProxyResult": { ++ "type": "object", ++ "properties": { ++ "use-proxy": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "use-proxy" ++ ] ++ }, ++ "SSHPublicKeysResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "public-keys": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "SSHPublicKeysResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SSHPublicKeysResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Singular", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Claim": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SingularClaims" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Wait": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SingularClaim": { ++ "type": "object", ++ "properties": { ++ "claimant-tag": { ++ "type": "string" ++ }, ++ "duration": { ++ "type": "integer" ++ }, ++ "entity-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity-tag", ++ "claimant-tag", ++ "duration" ++ ] ++ }, ++ "SingularClaims": { ++ "type": "object", ++ "properties": { ++ "claims": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SingularClaim" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "claims" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Spaces", ++ "Version": 3, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "CreateSpaces": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CreateSpacesParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ListSpaces": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ListSpacesResults" ++ } ++ } ++ }, ++ "ReloadSpaces": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "CreateSpaceParams": { ++ "type": "object", ++ "properties": { ++ "provider-id": { ++ "type": "string" ++ }, ++ "public": { ++ "type": "boolean" ++ }, ++ "space-tag": { ++ "type": "string" ++ }, ++ "subnet-tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "subnet-tags", ++ "space-tag", ++ "public" ++ ] ++ }, ++ "CreateSpacesParams": { ++ "type": "object", ++ "properties": { ++ "spaces": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CreateSpaceParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "spaces" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListSpacesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Space" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "Space": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "subnets": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Subnet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "subnets" ++ ] ++ }, ++ "Subnet": { ++ "type": "object", ++ "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": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cidr", ++ "vlan-tag", ++ "life", ++ "space-tag", ++ "zones" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "StatusHistory", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "Prune": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StatusHistoryPruneArgs" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "StatusHistoryPruneArgs": { ++ "type": "object", ++ "properties": { ++ "max-history-mb": { ++ "type": "integer" ++ }, ++ "max-history-time": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "max-history-time", ++ "max-history-mb" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Storage", ++ "Version": 4, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddToUnit": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StoragesAddParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddStorageResults" ++ } ++ } ++ }, ++ "Attach": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CreatePool": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StoragePool" ++ } ++ } ++ }, ++ "Detach": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Import": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/BulkImportStorageParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ImportStorageResults" ++ } ++ } ++ }, ++ "ListFilesystems": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FilesystemFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FilesystemDetailsListResults" ++ } ++ } ++ }, ++ "ListPools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StoragePoolFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StoragePoolsResults" ++ } ++ } ++ }, ++ "ListStorageDetails": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StorageDetailsListResults" ++ } ++ } ++ }, ++ "ListVolumes": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/VolumeFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeDetailsListResults" ++ } ++ } ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RemoveStorage" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "StorageDetails": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StorageDetailsResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddStorageDetails": { ++ "type": "object", ++ "properties": { ++ "storage-tags": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tags" ++ ] ++ }, ++ "AddStorageResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/AddStorageDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "AddStorageResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddStorageResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "BulkImportStorageParams": { ++ "type": "object", ++ "properties": { ++ "storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ImportStorageParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatus": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "info", ++ "since" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "FilesystemAttachmentDetails": { ++ "type": "object", ++ "properties": { ++ "FilesystemAttachmentInfo": { ++ "$ref": "#/definitions/FilesystemAttachmentInfo" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "FilesystemAttachmentInfo" ++ ] ++ }, ++ "FilesystemAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "mount-point": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemDetails": { ++ "type": "object", ++ "properties": { ++ "filesystem-tag": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/FilesystemInfo" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machine-attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/FilesystemAttachmentDetails" ++ } ++ } ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "storage": { ++ "$ref": "#/definitions/StorageDetails" ++ }, ++ "unit-attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/FilesystemAttachmentDetails" ++ } ++ } ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-tag", ++ "info", ++ "status" ++ ] ++ }, ++ "FilesystemDetailsListResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemDetails" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemDetailsListResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemDetailsListResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemFilter": { ++ "type": "object", ++ "properties": { ++ "machines": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemFilters": { ++ "type": "object", ++ "properties": { ++ "filters": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemFilter" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "filesystem-id": { ++ "type": "string" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-id", ++ "pool", ++ "size" ++ ] ++ }, ++ "ImportStorageDetails": { ++ "type": "object", ++ "properties": { ++ "storage-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag" ++ ] ++ }, ++ "ImportStorageParams": { ++ "type": "object", ++ "properties": { ++ "kind": { ++ "type": "integer" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "provider-id": { ++ "type": "string" ++ }, ++ "storage-name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "kind", ++ "pool", ++ "provider-id", ++ "storage-name" ++ ] ++ }, ++ "ImportStorageResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/ImportStorageDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ImportStorageResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ImportStorageResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "RemoveStorage": { ++ "type": "object", ++ "properties": { ++ "storage": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoveStorageInstance" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage" ++ ] ++ }, ++ "RemoveStorageInstance": { ++ "type": "object", ++ "properties": { ++ "destroy-attachments": { ++ "type": "boolean" ++ }, ++ "destroy-storage": { ++ "type": "boolean" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "StorageAddParams": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "storage": { ++ "$ref": "#/definitions/StorageConstraints" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit", ++ "name", ++ "storage" ++ ] ++ }, ++ "StorageAttachmentDetails": { ++ "type": "object", ++ "properties": { ++ "life": { ++ "type": "string" ++ }, ++ "location": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "storage-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag", ++ "unit-tag", ++ "machine-tag" ++ ] ++ }, ++ "StorageAttachmentId": { ++ "type": "object", ++ "properties": { ++ "storage-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag", ++ "unit-tag" ++ ] ++ }, ++ "StorageAttachmentIds": { ++ "type": "object", ++ "properties": { ++ "ids": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAttachmentId" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ids" ++ ] ++ }, ++ "StorageConstraints": { ++ "type": "object", ++ "properties": { ++ "count": { ++ "type": "integer" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageDetails": { ++ "type": "object", ++ "properties": { ++ "attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/StorageAttachmentDetails" ++ } ++ } ++ }, ++ "kind": { ++ "type": "integer" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "persistent": { ++ "type": "boolean" ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "storage-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag", ++ "owner-tag", ++ "kind", ++ "status", ++ "persistent" ++ ] ++ }, ++ "StorageDetailsListResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageDetails" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageDetailsListResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageDetailsListResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageDetailsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/StorageDetails" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageDetailsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageDetailsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageFilter": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "StorageFilters": { ++ "type": "object", ++ "properties": { ++ "filters": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageFilter" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragePool": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "provider", ++ "attrs" ++ ] ++ }, ++ "StoragePoolFilter": { ++ "type": "object", ++ "properties": { ++ "names": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "providers": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragePoolFilters": { ++ "type": "object", ++ "properties": { ++ "filters": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StoragePoolFilter" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragePoolsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "storage-pools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StoragePool" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragePoolsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StoragePoolsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragesAddParams": { ++ "type": "object", ++ "properties": { ++ "storages": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAddParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storages" ++ ] ++ }, ++ "VolumeAttachmentDetails": { ++ "type": "object", ++ "properties": { ++ "VolumeAttachmentInfo": { ++ "$ref": "#/definitions/VolumeAttachmentInfo" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "VolumeAttachmentInfo" ++ ] ++ }, ++ "VolumeAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "bus-address": { ++ "type": "string" ++ }, ++ "device-link": { ++ "type": "string" ++ }, ++ "device-name": { ++ "type": "string" ++ }, ++ "plan-info": { ++ "$ref": "#/definitions/VolumeAttachmentPlanInfo" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentPlanInfo": { ++ "type": "object", ++ "properties": { ++ "device-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "device-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeDetails": { ++ "type": "object", ++ "properties": { ++ "info": { ++ "$ref": "#/definitions/VolumeInfo" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machine-attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/VolumeAttachmentDetails" ++ } ++ } ++ }, ++ "status": { ++ "$ref": "#/definitions/EntityStatus" ++ }, ++ "storage": { ++ "$ref": "#/definitions/StorageDetails" ++ }, ++ "unit-attachments": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/VolumeAttachmentDetails" ++ } ++ } ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "info", ++ "status" ++ ] ++ }, ++ "VolumeDetailsListResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeDetails" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeDetailsListResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeDetailsListResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeFilter": { ++ "type": "object", ++ "properties": { ++ "machines": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeFilters": { ++ "type": "object", ++ "properties": { ++ "filters": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeFilter" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeInfo": { ++ "type": "object", ++ "properties": { ++ "hardware-id": { ++ "type": "string" ++ }, ++ "persistent": { ++ "type": "boolean" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "volume-id": { ++ "type": "string" ++ }, ++ "wwn": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-id", ++ "size", ++ "persistent" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "StorageProvisioner", ++ "Version": 4, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AttachmentLife": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "CreateVolumeAttachmentPlans": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/VolumeAttachmentPlans" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "EnsureDead": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "FilesystemAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FilesystemAttachmentParamsResults" ++ } ++ } ++ }, ++ "FilesystemAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FilesystemAttachmentResults" ++ } ++ } ++ }, ++ "FilesystemParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FilesystemParamsResults" ++ } ++ } ++ }, ++ "Filesystems": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/FilesystemResults" ++ } ++ } ++ }, ++ "InstanceId": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "Remove": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveAttachment": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveFilesystemParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RemoveFilesystemParamsResults" ++ } ++ } ++ }, ++ "RemoveVolumeAttachmentPlan": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveVolumeParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RemoveVolumeParamsResults" ++ } ++ } ++ }, ++ "SetFilesystemAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/FilesystemAttachments" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetFilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Filesystems" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetVolumeAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/VolumeAttachments" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetVolumeAttachmentPlanBlockInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/VolumeAttachmentPlans" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetVolumeInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Volumes" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "VolumeAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeAttachmentParamsResults" ++ } ++ } ++ }, ++ "VolumeAttachmentPlans": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeAttachmentPlanResults" ++ } ++ } ++ }, ++ "VolumeAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeAttachmentResults" ++ } ++ } ++ }, ++ "VolumeBlockDevices": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MachineStorageIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BlockDeviceResults" ++ } ++ } ++ }, ++ "VolumeParams": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeParamsResults" ++ } ++ } ++ }, ++ "Volumes": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VolumeResults" ++ } ++ } ++ }, ++ "WatchApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "WatchBlockDevices": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchFilesystemAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResults" ++ } ++ } ++ }, ++ "WatchFilesystems": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchMachines": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchVolumeAttachmentPlans": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResults" ++ } ++ } ++ }, ++ "WatchVolumeAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResults" ++ } ++ } ++ }, ++ "WatchVolumes": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "BlockDevice": { ++ "type": "object", ++ "properties": { ++ "BusAddress": { ++ "type": "string" ++ }, ++ "DeviceLinks": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "DeviceName": { ++ "type": "string" ++ }, ++ "FilesystemType": { ++ "type": "string" ++ }, ++ "HardwareId": { ++ "type": "string" ++ }, ++ "InUse": { ++ "type": "boolean" ++ }, ++ "Label": { ++ "type": "string" ++ }, ++ "MountPoint": { ++ "type": "string" ++ }, ++ "Size": { ++ "type": "integer" ++ }, ++ "UUID": { ++ "type": "string" ++ }, ++ "WWN": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "DeviceName", ++ "DeviceLinks", ++ "Label", ++ "UUID", ++ "HardwareId", ++ "WWN", ++ "BusAddress", ++ "Size", ++ "FilesystemType", ++ "InUse", ++ "MountPoint" ++ ] ++ }, ++ "BlockDeviceResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/BlockDevice" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BlockDeviceResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BlockDeviceResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Filesystem": { ++ "type": "object", ++ "properties": { ++ "filesystem-tag": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/FilesystemInfo" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-tag", ++ "info" ++ ] ++ }, ++ "FilesystemAttachment": { ++ "type": "object", ++ "properties": { ++ "filesystem-tag": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/FilesystemAttachmentInfo" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-tag", ++ "machine-tag", ++ "info" ++ ] ++ }, ++ "FilesystemAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "mount-point": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "filesystem-id": { ++ "type": "string" ++ }, ++ "filesystem-tag": { ++ "type": "string" ++ }, ++ "instance-id": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "mount-point": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-tag", ++ "machine-tag", ++ "provider" ++ ] ++ }, ++ "FilesystemAttachmentParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/FilesystemAttachmentParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "FilesystemAttachmentParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemAttachmentParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemAttachmentResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/FilesystemAttachment" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "FilesystemAttachmentResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemAttachmentResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemAttachments": { ++ "type": "object", ++ "properties": { ++ "filesystem-attachments": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemAttachment" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-attachments" ++ ] ++ }, ++ "FilesystemInfo": { ++ "type": "object", ++ "properties": { ++ "filesystem-id": { ++ "type": "string" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-id", ++ "pool", ++ "size" ++ ] ++ }, ++ "FilesystemParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/FilesystemAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "filesystem-tag": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystem-tag", ++ "size", ++ "provider" ++ ] ++ }, ++ "FilesystemParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/FilesystemParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "FilesystemParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "FilesystemResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/Filesystem" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "FilesystemResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/FilesystemResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Filesystems": { ++ "type": "object", ++ "properties": { ++ "filesystems": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Filesystem" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "filesystems" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineStorageId": { ++ "type": "object", ++ "properties": { ++ "attachment-tag": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "attachment-tag" ++ ] ++ }, ++ "MachineStorageIds": { ++ "type": "object", ++ "properties": { ++ "ids": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageId" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ids" ++ ] ++ }, ++ "MachineStorageIdsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageId" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "MachineStorageIdsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RemoveFilesystemParams": { ++ "type": "object", ++ "properties": { ++ "destroy": { ++ "type": "boolean" ++ }, ++ "filesystem-id": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider", ++ "filesystem-id" ++ ] ++ }, ++ "RemoveFilesystemParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoveFilesystemParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "RemoveFilesystemParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoveFilesystemParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "RemoveVolumeParams": { ++ "type": "object", ++ "properties": { ++ "destroy": { ++ "type": "boolean" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "volume-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "provider", ++ "volume-id" ++ ] ++ }, ++ "RemoveVolumeParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/RemoveVolumeParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "RemoveVolumeParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RemoveVolumeParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Volume": { ++ "type": "object", ++ "properties": { ++ "info": { ++ "$ref": "#/definitions/VolumeInfo" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "info" ++ ] ++ }, ++ "VolumeAttachment": { ++ "type": "object", ++ "properties": { ++ "info": { ++ "$ref": "#/definitions/VolumeAttachmentInfo" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "machine-tag", ++ "info" ++ ] ++ }, ++ "VolumeAttachmentInfo": { ++ "type": "object", ++ "properties": { ++ "bus-address": { ++ "type": "string" ++ }, ++ "device-link": { ++ "type": "string" ++ }, ++ "device-name": { ++ "type": "string" ++ }, ++ "plan-info": { ++ "$ref": "#/definitions/VolumeAttachmentPlanInfo" ++ }, ++ "read-only": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentParams": { ++ "type": "object", ++ "properties": { ++ "instance-id": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "read-only": { ++ "type": "boolean" ++ }, ++ "volume-id": { ++ "type": "string" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "machine-tag", ++ "provider" ++ ] ++ }, ++ "VolumeAttachmentParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/VolumeAttachmentParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "VolumeAttachmentParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachmentParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentPlan": { ++ "type": "object", ++ "properties": { ++ "block-device": { ++ "$ref": "#/definitions/BlockDevice" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ }, ++ "plan-info": { ++ "$ref": "#/definitions/VolumeAttachmentPlanInfo" ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "machine-tag", ++ "plan-info" ++ ] ++ }, ++ "VolumeAttachmentPlanInfo": { ++ "type": "object", ++ "properties": { ++ "device-attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "device-type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentPlanResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/VolumeAttachmentPlan" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "VolumeAttachmentPlanResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachmentPlanResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachmentPlans": { ++ "type": "object", ++ "properties": { ++ "volume-plans": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachmentPlan" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-plans" ++ ] ++ }, ++ "VolumeAttachmentResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/VolumeAttachment" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "VolumeAttachmentResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachmentResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeAttachments": { ++ "type": "object", ++ "properties": { ++ "volume-attachments": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeAttachment" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-attachments" ++ ] ++ }, ++ "VolumeInfo": { ++ "type": "object", ++ "properties": { ++ "hardware-id": { ++ "type": "string" ++ }, ++ "persistent": { ++ "type": "boolean" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "volume-id": { ++ "type": "string" ++ }, ++ "wwn": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-id", ++ "size", ++ "persistent" ++ ] ++ }, ++ "VolumeParams": { ++ "type": "object", ++ "properties": { ++ "attachment": { ++ "$ref": "#/definitions/VolumeAttachmentParams" ++ }, ++ "attributes": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "provider": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "tags": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "volume-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volume-tag", ++ "size", ++ "provider" ++ ] ++ }, ++ "VolumeParamsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/VolumeParams" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "VolumeParamsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeParamsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VolumeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/Volume" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "VolumeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VolumeResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Volumes": { ++ "type": "object", ++ "properties": { ++ "volumes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Volume" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "volumes" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "StringsWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Subnets", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddSubnets": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddSubnetsParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "AllSpaces": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/SpaceResults" ++ } ++ } ++ }, ++ "AllZones": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ZoneResults" ++ } ++ } ++ }, ++ "ListSubnets": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SubnetsFilters" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ListSubnetsResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddSubnetParams": { ++ "type": "object", ++ "properties": { ++ "provider-network-id": { ++ "type": "string" ++ }, ++ "space-tag": { ++ "type": "string" ++ }, ++ "subnet-provider-id": { ++ "type": "string" ++ }, ++ "subnet-tag": { ++ "type": "string" ++ }, ++ "vlan-tag": { ++ "type": "integer" ++ }, ++ "zones": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "space-tag" ++ ] ++ }, ++ "AddSubnetsParams": { ++ "type": "object", ++ "properties": { ++ "subnets": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddSubnetParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "subnets" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ListSubnetsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Subnet" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SpaceResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "SpaceResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SpaceResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Subnet": { ++ "type": "object", ++ "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": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "cidr", ++ "vlan-tag", ++ "life", ++ "space-tag", ++ "zones" ++ ] ++ }, ++ "SubnetsFilters": { ++ "type": "object", ++ "properties": { ++ "space-tag": { ++ "type": "string" ++ }, ++ "zone": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ZoneResult": { ++ "type": "object", ++ "properties": { ++ "available": { ++ "type": "boolean" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "available" ++ ] ++ }, ++ "ZoneResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ZoneResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Undertaker", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "ModelInfo": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/UndertakerModelInfoResult" ++ } ++ } ++ }, ++ "ProcessDyingModel": { ++ "type": "object" ++ }, ++ "RemoveModel": { ++ "type": "object" ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpdateStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchModelResources": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "UndertakerModelInfo": { ++ "type": "object", ++ "properties": { ++ "global-name": { ++ "type": "string" ++ }, ++ "is-system": { ++ "type": "boolean" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "name", ++ "global-name", ++ "is-system", ++ "life" ++ ] ++ }, ++ "UndertakerModelInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/UndertakerModelInfo" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "UnitAssigner", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AssignUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetAgentStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "WatchUnitAssignments": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Uniter", ++ "Version": 9, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "APIAddresses": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringsResult" ++ } ++ } ++ }, ++ "APIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/APIHostPortsResult" ++ } ++ } ++ }, ++ "Actions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ActionResults" ++ } ++ } ++ }, ++ "AddMetricBatches": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MetricBatchParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "AddUnitStorage": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StoragesAddParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "AllMachinePorts": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MachinePortsResults" ++ } ++ } ++ }, ++ "ApplicationStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ApplicationStatusResults" ++ } ++ } ++ }, ++ "AssignedMachine": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "AvailabilityZone": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "BeginActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CharmArchiveSha256": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/CharmURLs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "CharmModifiedVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/IntResults" ++ } ++ } ++ }, ++ "CharmURL": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringBoolResults" ++ } ++ } ++ }, ++ "ClearResolved": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ClosePorts": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntitiesPortRanges" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/CloudSpecResult" ++ } ++ } ++ }, ++ "ConfigSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ConfigSettingsResults" ++ } ++ } ++ }, ++ "CurrentModel": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelResult" ++ } ++ } ++ }, ++ "Destroy": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "DestroyAllSubordinates": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "DestroyUnitStorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "EnsureDead": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "EnterScope": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "FinishActions": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/ActionExecutionResults" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "GetMeterStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/MeterStatusResults" ++ } ++ } ++ }, ++ "GetPrincipal": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringBoolResults" ++ } ++ } ++ }, ++ "GoalStates": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/GoalStateResults" ++ } ++ } ++ }, ++ "HasSubordinates": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/BoolResults" ++ } ++ } ++ }, ++ "LeaveScope": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Life": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "Merge": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/MergeLeadershipSettingsBulkParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ModelConfig": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/ModelConfigResult" ++ } ++ } ++ }, ++ "ModelUUID": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "NetworkInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/NetworkInfoParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NetworkInfoResults" ++ } ++ } ++ }, ++ "OpenPorts": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntitiesPortRanges" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "PrivateAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "ProviderType": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "PublicAddress": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "Read": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/GetLeadershipSettingsBulkResults" ++ } ++ } ++ }, ++ "ReadRemoteSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnitPairs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SettingsResults" ++ } ++ } ++ }, ++ "ReadSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/SettingsResults" ++ } ++ } ++ }, ++ "Refresh": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UnitRefreshResults" ++ } ++ } ++ }, ++ "Relation": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationResults" ++ } ++ } ++ }, ++ "RelationById": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationResults" ++ } ++ } ++ }, ++ "RelationsStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationUnitStatusResults" ++ } ++ } ++ }, ++ "RemoveStorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RequestReboot": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Resolved": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ResolvedModeResults" ++ } ++ } ++ }, ++ "SLALevel": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "SetAgentStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetApplicationStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetCharmURL": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntitiesCharmURL" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetPodSpec": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetPodSpecParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetRelationStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationStatusArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetUnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/SetStatus" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetUpgradeSeriesUnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeSeriesStatusParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetWorkloadVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityWorkloadVersions" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "StorageAttachmentLife": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/LifeResults" ++ } ++ } ++ }, ++ "StorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StorageAttachmentResults" ++ } ++ } ++ }, ++ "UnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StatusResults" ++ } ++ } ++ }, ++ "UnitStorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StorageAttachmentIdsResults" ++ } ++ } ++ }, ++ "UpdateSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnitsSettings" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UpgradeSeriesUnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpgradeSeriesStatusResults" ++ } ++ } ++ }, ++ "Watch": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchAPIHostPorts": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchActionNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchConfigSettingsHash": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchForModelConfigChanges": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "WatchLeadershipSettings": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchMeterStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchRelationUnits": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/RelationUnits" ++ }, ++ "Result": { ++ "$ref": "#/definitions/RelationUnitsWatchResults" ++ } ++ } ++ }, ++ "WatchStorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WatchTrustConfigSettingsHash": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchUnitAddressesHash": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchUnitRelations": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchUnitStorageAttachments": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringsWatchResults" ++ } ++ } ++ }, ++ "WatchUpgradeSeriesNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ }, ++ "WorkloadVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "APIHostPortsResult": { ++ "type": "object", ++ "properties": { ++ "servers": { ++ "type": "array", ++ "items": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/HostPort" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "servers" ++ ] ++ }, ++ "Action": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "parameters": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "receiver": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "receiver", ++ "name" ++ ] ++ }, ++ "ActionExecutionResult": { ++ "type": "object", ++ "properties": { ++ "action-tag": { ++ "type": "string" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "results": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "action-tag", ++ "status" ++ ] ++ }, ++ "ActionExecutionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionExecutionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionResult": { ++ "type": "object", ++ "properties": { ++ "action": { ++ "$ref": "#/definitions/Action" ++ }, ++ "completed": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "enqueued": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "output": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "started": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ActionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ActionResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Address": { ++ "type": "object", ++ "properties": { ++ "scope": { ++ "type": "string" ++ }, ++ "space-name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "value", ++ "type", ++ "scope" ++ ] ++ }, ++ "ApplicationStatusResult": { ++ "type": "object", ++ "properties": { ++ "application": { ++ "$ref": "#/definitions/StatusResult" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "units": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/StatusResult" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application", ++ "units" ++ ] ++ }, ++ "ApplicationStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ApplicationStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "BoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "BoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/BoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "CharmRelation": { ++ "type": "object", ++ "properties": { ++ "interface": { ++ "type": "string" ++ }, ++ "limit": { ++ "type": "integer" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "optional": { ++ "type": "boolean" ++ }, ++ "role": { ++ "type": "string" ++ }, ++ "scope": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "role", ++ "interface", ++ "optional", ++ "limit", ++ "scope" ++ ] ++ }, ++ "CharmURL": { ++ "type": "object", ++ "properties": { ++ "url": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "url" ++ ] ++ }, ++ "CharmURLs": { ++ "type": "object", ++ "properties": { ++ "urls": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/CharmURL" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "urls" ++ ] ++ }, ++ "CloudCredential": { ++ "type": "object", ++ "properties": { ++ "attrs": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "auth-type": { ++ "type": "string" ++ }, ++ "redacted": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "auth-type" ++ ] ++ }, ++ "CloudSpec": { ++ "type": "object", ++ "properties": { ++ "cacertificates": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "credential": { ++ "$ref": "#/definitions/CloudCredential" ++ }, ++ "endpoint": { ++ "type": "string" ++ }, ++ "identity-endpoint": { ++ "type": "string" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "region": { ++ "type": "string" ++ }, ++ "storage-endpoint": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "type", ++ "name" ++ ] ++ }, ++ "CloudSpecResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/CloudSpec" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ConfigSettingsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "ConfigSettingsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ConfigSettingsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Endpoint": { ++ "type": "object", ++ "properties": { ++ "application-name": { ++ "type": "string" ++ }, ++ "relation": { ++ "$ref": "#/definitions/CharmRelation" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-name", ++ "relation" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesCharmURL": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityCharmURL" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesPortRanges": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPortRange" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityCharmURL": { ++ "type": "object", ++ "properties": { ++ "charm-url": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "charm-url" ++ ] ++ }, ++ "EntityPortRange": { ++ "type": "object", ++ "properties": { ++ "from-port": { ++ "type": "integer" ++ }, ++ "protocol": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ }, ++ "to-port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "protocol", ++ "from-port", ++ "to-port" ++ ] ++ }, ++ "EntityStatusArgs": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "status", ++ "info", ++ "data" ++ ] ++ }, ++ "EntityString": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "value" ++ ] ++ }, ++ "EntityWorkloadVersion": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "workload-version": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "workload-version" ++ ] ++ }, ++ "EntityWorkloadVersions": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityWorkloadVersion" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "GetLeadershipSettingsBulkResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/GetLeadershipSettingsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "GetLeadershipSettingsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "GoalState": { ++ "type": "object", ++ "properties": { ++ "relations": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/GoalStateStatus" ++ } ++ } ++ } ++ } ++ }, ++ "units": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/GoalStateStatus" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "units", ++ "relations" ++ ] ++ }, ++ "GoalStateResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/GoalState" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result", ++ "error" ++ ] ++ }, ++ "GoalStateResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/GoalStateResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "GoalStateStatus": { ++ "type": "object", ++ "properties": { ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "status", ++ "since" ++ ] ++ }, ++ "HostPort": { ++ "type": "object", ++ "properties": { ++ "Address": { ++ "$ref": "#/definitions/Address" ++ }, ++ "port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Address", ++ "port" ++ ] ++ }, ++ "IntResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "IntResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/IntResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "InterfaceAddress": { ++ "type": "object", ++ "properties": { ++ "cidr": { ++ "type": "string" ++ }, ++ "hostname": { ++ "type": "string" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "hostname", ++ "value", ++ "cidr" ++ ] ++ }, ++ "LifeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "life": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life" ++ ] ++ }, ++ "LifeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/LifeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachinePortRange": { ++ "type": "object", ++ "properties": { ++ "port-range": { ++ "$ref": "#/definitions/PortRange" ++ }, ++ "relation-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-tag", ++ "relation-tag", ++ "port-range" ++ ] ++ }, ++ "MachinePortsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "ports": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachinePortRange" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ports" ++ ] ++ }, ++ "MachinePortsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachinePortsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "MergeLeadershipSettingsBulkParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MergeLeadershipSettingsParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "MergeLeadershipSettingsParam": { ++ "type": "object", ++ "properties": { ++ "application-tag": { ++ "type": "string" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "MeterStatusResult": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "info": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "code", ++ "info" ++ ] ++ }, ++ "MeterStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MeterStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Metric": { ++ "type": "object", ++ "properties": { ++ "key": { ++ "type": "string" ++ }, ++ "labels": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "time": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "value": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "key", ++ "value", ++ "time" ++ ] ++ }, ++ "MetricBatch": { ++ "type": "object", ++ "properties": { ++ "charm-url": { ++ "type": "string" ++ }, ++ "created": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "metrics": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Metric" ++ } ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "uuid", ++ "charm-url", ++ "created", ++ "metrics" ++ ] ++ }, ++ "MetricBatchParam": { ++ "type": "object", ++ "properties": { ++ "batch": { ++ "$ref": "#/definitions/MetricBatch" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "batch" ++ ] ++ }, ++ "MetricBatchParams": { ++ "type": "object", ++ "properties": { ++ "batches": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MetricBatchParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "batches" ++ ] ++ }, ++ "ModelConfigResult": { ++ "type": "object", ++ "properties": { ++ "config": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "config" ++ ] ++ }, ++ "ModelResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "name": { ++ "type": "string" ++ }, ++ "type": { ++ "type": "string" ++ }, ++ "uuid": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "name", ++ "uuid", ++ "type" ++ ] ++ }, ++ "NetworkInfo": { ++ "type": "object", ++ "properties": { ++ "addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/InterfaceAddress" ++ } ++ }, ++ "interface-name": { ++ "type": "string" ++ }, ++ "mac-address": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "mac-address", ++ "interface-name", ++ "addresses" ++ ] ++ }, ++ "NetworkInfoParams": { ++ "type": "object", ++ "properties": { ++ "bindings": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "relation-id": { ++ "type": "integer" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit", ++ "bindings" ++ ] ++ }, ++ "NetworkInfoResult": { ++ "type": "object", ++ "properties": { ++ "bind-addresses": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NetworkInfo" ++ } ++ }, ++ "egress-subnets": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "ingress-addresses": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "NetworkInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/NetworkInfoResult" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "PortRange": { ++ "type": "object", ++ "properties": { ++ "from-port": { ++ "type": "integer" ++ }, ++ "protocol": { ++ "type": "string" ++ }, ++ "to-port": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "from-port", ++ "to-port", ++ "protocol" ++ ] ++ }, ++ "RelationIds": { ++ "type": "object", ++ "properties": { ++ "relation-ids": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-ids" ++ ] ++ }, ++ "RelationResult": { ++ "type": "object", ++ "properties": { ++ "bool": { ++ "type": "boolean" ++ }, ++ "endpoint": { ++ "$ref": "#/definitions/Endpoint" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "id": { ++ "type": "integer" ++ }, ++ "key": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "other-application": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "life", ++ "id", ++ "key", ++ "endpoint" ++ ] ++ }, ++ "RelationResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RelationStatusArg": { ++ "type": "object", ++ "properties": { ++ "message": { ++ "type": "string" ++ }, ++ "relation-id": { ++ "type": "integer" ++ }, ++ "status": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit-tag", ++ "relation-id", ++ "status", ++ "message" ++ ] ++ }, ++ "RelationStatusArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationStatusArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "RelationUnit": { ++ "type": "object", ++ "properties": { ++ "relation": { ++ "type": "string" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation", ++ "unit" ++ ] ++ }, ++ "RelationUnitPair": { ++ "type": "object", ++ "properties": { ++ "local-unit": { ++ "type": "string" ++ }, ++ "relation": { ++ "type": "string" ++ }, ++ "remote-unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation", ++ "local-unit", ++ "remote-unit" ++ ] ++ }, ++ "RelationUnitPairs": { ++ "type": "object", ++ "properties": { ++ "relation-unit-pairs": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitPair" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-unit-pairs" ++ ] ++ }, ++ "RelationUnitSettings": { ++ "type": "object", ++ "properties": { ++ "relation": { ++ "type": "string" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation", ++ "unit", ++ "settings" ++ ] ++ }, ++ "RelationUnitStatus": { ++ "type": "object", ++ "properties": { ++ "in-scope": { ++ "type": "boolean" ++ }, ++ "relation-tag": { ++ "type": "string" ++ }, ++ "suspended": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-tag", ++ "in-scope", ++ "suspended" ++ ] ++ }, ++ "RelationUnitStatusResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitStatus" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RelationUnitStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "RelationUnits": { ++ "type": "object", ++ "properties": { ++ "relation-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnit" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-units" ++ ] ++ }, ++ "RelationUnitsChange": { ++ "type": "object", ++ "properties": { ++ "changed": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "$ref": "#/definitions/UnitSettings" ++ } ++ } ++ }, ++ "departed": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changed" ++ ] ++ }, ++ "RelationUnitsSettings": { ++ "type": "object", ++ "properties": { ++ "relation-units": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitSettings" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "relation-units" ++ ] ++ }, ++ "RelationUnitsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "$ref": "#/definitions/RelationUnitsChange" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ }, ++ "RelationUnitsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/RelationUnitsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "ResolvedModeResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "mode": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "mode" ++ ] ++ }, ++ "ResolvedModeResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ResolvedModeResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "SetPodSpecParams": { ++ "type": "object", ++ "properties": { ++ "specs": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityString" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "specs" ++ ] ++ }, ++ "SetStatus": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityStatusArgs" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "SettingsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "settings": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "string" ++ } ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "settings" ++ ] ++ }, ++ "SettingsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/SettingsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StatusResult": { ++ "type": "object", ++ "properties": { ++ "data": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "object", ++ "additionalProperties": true ++ } ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "id": { ++ "type": "string" ++ }, ++ "info": { ++ "type": "string" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "since": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "id", ++ "life", ++ "status", ++ "info", ++ "data", ++ "since" ++ ] ++ }, ++ "StatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StorageAddParams": { ++ "type": "object", ++ "properties": { ++ "name": { ++ "type": "string" ++ }, ++ "storage": { ++ "$ref": "#/definitions/StorageConstraints" ++ }, ++ "unit": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "unit", ++ "name", ++ "storage" ++ ] ++ }, ++ "StorageAttachment": { ++ "type": "object", ++ "properties": { ++ "kind": { ++ "type": "integer" ++ }, ++ "life": { ++ "type": "string" ++ }, ++ "location": { ++ "type": "string" ++ }, ++ "owner-tag": { ++ "type": "string" ++ }, ++ "storage-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag", ++ "owner-tag", ++ "unit-tag", ++ "kind", ++ "location", ++ "life" ++ ] ++ }, ++ "StorageAttachmentId": { ++ "type": "object", ++ "properties": { ++ "storage-tag": { ++ "type": "string" ++ }, ++ "unit-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storage-tag", ++ "unit-tag" ++ ] ++ }, ++ "StorageAttachmentIds": { ++ "type": "object", ++ "properties": { ++ "ids": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAttachmentId" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "ids" ++ ] ++ }, ++ "StorageAttachmentIdsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/StorageAttachmentIds" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StorageAttachmentIdsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAttachmentIdsResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageAttachmentResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/StorageAttachment" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StorageAttachmentResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAttachmentResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StorageConstraints": { ++ "type": "object", ++ "properties": { ++ "count": { ++ "type": "integer" ++ }, ++ "pool": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StoragesAddParams": { ++ "type": "object", ++ "properties": { ++ "storages": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StorageAddParams" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "storages" ++ ] ++ }, ++ "StringBoolResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "ok": { ++ "type": "boolean" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result", ++ "ok" ++ ] ++ }, ++ "StringBoolResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringBoolResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "StringsResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id" ++ ] ++ }, ++ "StringsWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringsWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UnitRefreshResult": { ++ "type": "object", ++ "properties": { ++ "Error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "Life": { ++ "type": "string" ++ }, ++ "Resolved": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Life", ++ "Resolved", ++ "Error" ++ ] ++ }, ++ "UnitRefreshResults": { ++ "type": "object", ++ "properties": { ++ "Results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UnitRefreshResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Results" ++ ] ++ }, ++ "UnitSettings": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "type": "integer" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ }, ++ "UpgradeSeriesStatusParam": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "status", ++ "message" ++ ] ++ }, ++ "UpgradeSeriesStatusParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesStatusParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "UpgradeSeriesStatusResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UpgradeSeriesStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "UpgradeSeries", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "FinishUpgradeSeries": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpdateSeriesArgs" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "MachineStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpgradeSeriesStatusResults" ++ } ++ } ++ }, ++ "PinMachineApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/PinApplicationsResults" ++ } ++ } ++ }, ++ "PinnedLeadership": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/PinnedLeadershipResult" ++ } ++ } ++ }, ++ "SetMachineStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeSeriesStatusParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "SetUpgradeSeriesUnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeSeriesStatusParams" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "StartUnitCompletion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UpgradeSeriesStartUnitCompletionParam" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "TargetSeries": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/StringResults" ++ } ++ } ++ }, ++ "UnitsCompleted": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/EntitiesResults" ++ } ++ } ++ }, ++ "UnitsPrepared": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/EntitiesResults" ++ } ++ } ++ }, ++ "UnpinMachineApplications": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/PinApplicationsResults" ++ } ++ } ++ }, ++ "UpgradeSeriesUnitStatus": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UpgradeSeriesStatusResults" ++ } ++ } ++ }, ++ "WatchUpgradeSeriesNotifications": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesResult": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntitiesResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "PinApplicationResult": { ++ "type": "object", ++ "properties": { ++ "application-name": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "application-name" ++ ] ++ }, ++ "PinApplicationsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/PinApplicationResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "PinnedLeadershipResult": { ++ "type": "object", ++ "properties": { ++ "result": { ++ "type": "object", ++ "patternProperties": { ++ ".*": { ++ "type": "array", ++ "items": { ++ "type": "string" ++ } ++ } ++ } ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "StringResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "result" ++ ] ++ }, ++ "StringResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/StringResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "UpdateSeriesArg": { ++ "type": "object", ++ "properties": { ++ "force": { ++ "type": "boolean" ++ }, ++ "series": { ++ "type": "string" ++ }, ++ "tag": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "force", ++ "series" ++ ] ++ }, ++ "UpdateSeriesArgs": { ++ "type": "object", ++ "properties": { ++ "args": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpdateSeriesArg" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "args" ++ ] ++ }, ++ "UpgradeSeriesStartUnitCompletionParam": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities", ++ "message" ++ ] ++ }, ++ "UpgradeSeriesStatusParam": { ++ "type": "object", ++ "properties": { ++ "entity": { ++ "$ref": "#/definitions/Entity" ++ }, ++ "message": { ++ "type": "string" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entity", ++ "status", ++ "message" ++ ] ++ }, ++ "UpgradeSeriesStatusParams": { ++ "type": "object", ++ "properties": { ++ "params": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesStatusParam" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "params" ++ ] ++ }, ++ "UpgradeSeriesStatusResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "status": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UpgradeSeriesStatusResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UpgradeSeriesStatusResult" ++ } ++ } ++ }, ++ "additionalProperties": false ++ } ++ } ++ } ++ }, ++ { ++ "Name": "Upgrader", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "DesiredVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/VersionResults" ++ } ++ } ++ }, ++ "SetTools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntitiesVersion" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "Tools": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ToolsResults" ++ } ++ } ++ }, ++ "WatchAPIVersion": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/NotifyWatchResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "Binary": { ++ "type": "object", ++ "properties": { ++ "Arch": { ++ "type": "string" ++ }, ++ "Number": { ++ "$ref": "#/definitions/Number" ++ }, ++ "Series": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Number", ++ "Series", ++ "Arch" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "EntitiesVersion": { ++ "type": "object", ++ "properties": { ++ "agent-tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityVersion" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "agent-tools" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityVersion": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ }, ++ "tools": { ++ "$ref": "#/definitions/Version" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "tools" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "NotifyWatchResult": { ++ "type": "object", ++ "properties": { ++ "NotifyWatcherId": { ++ "type": "string" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "NotifyWatcherId" ++ ] ++ }, ++ "NotifyWatchResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/NotifyWatchResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Number": { ++ "type": "object", ++ "properties": { ++ "Build": { ++ "type": "integer" ++ }, ++ "Major": { ++ "type": "integer" ++ }, ++ "Minor": { ++ "type": "integer" ++ }, ++ "Patch": { ++ "type": "integer" ++ }, ++ "Tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "Major", ++ "Minor", ++ "Tag", ++ "Patch", ++ "Build" ++ ] ++ }, ++ "Tools": { ++ "type": "object", ++ "properties": { ++ "sha256": { ++ "type": "string" ++ }, ++ "size": { ++ "type": "integer" ++ }, ++ "url": { ++ "type": "string" ++ }, ++ "version": { ++ "$ref": "#/definitions/Binary" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version", ++ "url", ++ "size" ++ ] ++ }, ++ "ToolsResult": { ++ "type": "object", ++ "properties": { ++ "disable-ssl-hostname-verification": { ++ "type": "boolean" ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "tools": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Tools" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tools", ++ "disable-ssl-hostname-verification" ++ ] ++ }, ++ "ToolsResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ToolsResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Version": { ++ "type": "object", ++ "properties": { ++ "version": { ++ "$ref": "#/definitions/Binary" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "version" ++ ] ++ }, ++ "VersionResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "version": { ++ "$ref": "#/definitions/Number" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "VersionResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/VersionResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "UserManager", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "AddUser": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/AddUsers" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddUserResults" ++ } ++ } ++ }, ++ "DisableUser": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "EnableUser": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "RemoveUser": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "ResetPassword": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/Entities" ++ }, ++ "Result": { ++ "$ref": "#/definitions/AddUserResults" ++ } ++ } ++ }, ++ "SetPassword": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/EntityPasswords" ++ }, ++ "Result": { ++ "$ref": "#/definitions/ErrorResults" ++ } ++ } ++ }, ++ "UserInfo": { ++ "type": "object", ++ "properties": { ++ "Params": { ++ "$ref": "#/definitions/UserInfoRequest" ++ }, ++ "Result": { ++ "$ref": "#/definitions/UserInfoResults" ++ } ++ } ++ } ++ }, ++ "definitions": { ++ "AddUser": { ++ "type": "object", ++ "properties": { ++ "display-name": { ++ "type": "string" ++ }, ++ "password": { ++ "type": "string" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "username", ++ "display-name" ++ ] ++ }, ++ "AddUserResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "secret-key": { ++ "type": "array", ++ "items": { ++ "type": "integer" ++ } ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "AddUserResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddUserResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "AddUsers": { ++ "type": "object", ++ "properties": { ++ "users": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/AddUser" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "users" ++ ] ++ }, ++ "Entities": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities" ++ ] ++ }, ++ "Entity": { ++ "type": "object", ++ "properties": { ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag" ++ ] ++ }, ++ "EntityPassword": { ++ "type": "object", ++ "properties": { ++ "password": { ++ "type": "string" ++ }, ++ "tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "tag", ++ "password" ++ ] ++ }, ++ "EntityPasswords": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/EntityPassword" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "changes" ++ ] ++ }, ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "ErrorResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/ErrorResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "UserInfo": { ++ "type": "object", ++ "properties": { ++ "access": { ++ "type": "string" ++ }, ++ "created-by": { ++ "type": "string" ++ }, ++ "date-created": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "disabled": { ++ "type": "boolean" ++ }, ++ "display-name": { ++ "type": "string" ++ }, ++ "last-connection": { ++ "type": "string", ++ "format": "date-time" ++ }, ++ "username": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "username", ++ "display-name", ++ "access", ++ "created-by", ++ "date-created", ++ "disabled" ++ ] ++ }, ++ "UserInfoRequest": { ++ "type": "object", ++ "properties": { ++ "entities": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/Entity" ++ } ++ }, ++ "include-disabled": { ++ "type": "boolean" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "entities", ++ "include-disabled" ++ ] ++ }, ++ "UserInfoResult": { ++ "type": "object", ++ "properties": { ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "result": { ++ "$ref": "#/definitions/UserInfo" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "UserInfoResults": { ++ "type": "object", ++ "properties": { ++ "results": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/UserInfoResult" ++ } ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "results" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "VolumeAttachmentPlansWatcher", ++ "Version": 1, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineStorageId": { ++ "type": "object", ++ "properties": { ++ "attachment-tag": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "attachment-tag" ++ ] ++ }, ++ "MachineStorageIdsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageId" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ } ++ } ++ } ++ }, ++ { ++ "Name": "VolumeAttachmentsWatcher", ++ "Version": 2, ++ "Schema": { ++ "type": "object", ++ "properties": { ++ "Next": { ++ "type": "object", ++ "properties": { ++ "Result": { ++ "$ref": "#/definitions/MachineStorageIdsWatchResult" ++ } ++ } ++ }, ++ "Stop": { ++ "type": "object" ++ } ++ }, ++ "definitions": { ++ "Error": { ++ "type": "object", ++ "properties": { ++ "code": { ++ "type": "string" ++ }, ++ "info": { ++ "$ref": "#/definitions/ErrorInfo" ++ }, ++ "message": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "message", ++ "code" ++ ] ++ }, ++ "ErrorInfo": { ++ "type": "object", ++ "properties": { ++ "macaroon": { ++ "$ref": "#/definitions/Macaroon" ++ }, ++ "macaroon-path": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false ++ }, ++ "Macaroon": { ++ "type": "object", ++ "additionalProperties": false ++ }, ++ "MachineStorageId": { ++ "type": "object", ++ "properties": { ++ "attachment-tag": { ++ "type": "string" ++ }, ++ "machine-tag": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "machine-tag", ++ "attachment-tag" ++ ] ++ }, ++ "MachineStorageIdsWatchResult": { ++ "type": "object", ++ "properties": { ++ "changes": { ++ "type": "array", ++ "items": { ++ "$ref": "#/definitions/MachineStorageId" ++ } ++ }, ++ "error": { ++ "$ref": "#/definitions/Error" ++ }, ++ "watcher-id": { ++ "type": "string" ++ } ++ }, ++ "additionalProperties": false, ++ "required": [ ++ "watcher-id", ++ "changes" ++ ] ++ } ++ } ++ } ++ } ++] diff --cc modules/libjuju/juju/client/schemas-juju-latest.json index 0000000,0000000..37e41ea new file mode 120000 --- /dev/null +++ b/modules/libjuju/juju/client/schemas-juju-latest.json @@@ -1,0 -1,0 +1,1 @@@ ++schemas-juju-2.5-rc1.json diff --cc modules/libjuju/juju/controller.py index b4c544e,0000000..d3902ba mode 100644,000000..100644 --- a/modules/libjuju/juju/controller.py +++ b/modules/libjuju/juju/controller.py @@@ -1,593 -1,0 +1,633 @@@ +import asyncio +import json +import logging +from pathlib import Path + +from . import errors, tag, utils +from .client import client, connector +from .user import User + +log = logging.getLogger(__name__) + + +class Controller: + def __init__( + self, + loop=None, + max_frame_size=None, + bakery_client=None, + jujudata=None, + ): + """Instantiate a new Controller. + + One of the connect_* methods will need to be called before this + object can be used for anything interesting. + + If jujudata is None, jujudata.FileJujuData will be used. + + :param loop: an asyncio event loop + :param max_frame_size: See + `juju.client.connection.Connection.MAX_FRAME_SIZE` + :param bakery_client httpbakery.Client: The bakery client to use + for macaroon authorization. - :param jujudata JujuData: The source for current controller information. ++ :param jujudata JujuData: The source for current controller ++ information. + """ + self._connector = connector.Connector( + loop=loop, + max_frame_size=max_frame_size, + bakery_client=bakery_client, + jujudata=jujudata, + ) + + async def __aenter__(self): + await self.connect() + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.disconnect() + + @property + def loop(self): + return self._connector.loop + + async def connect(self, *args, **kwargs): + """Connect to a Juju controller. + + This supports two calling conventions: + + The controller and (optionally) authentication information can be + taken from the data files created by the Juju CLI. This convention + will be used if a ``controller_name`` is specified, or if the + ``endpoint`` is not. + + Otherwise, both the ``endpoint`` and authentication information + (``username`` and ``password``, or ``bakery_client`` and/or + ``macaroons``) are required. + + If a single positional argument is given, it will be assumed to be + the ``controller_name``. Otherwise, the first positional argument, + if any, must be the ``endpoint``. + + Available parameters are: + + :param str controller_name: Name of controller registered with the + Juju CLI. + :param str endpoint: The hostname:port of the controller to connect to. + :param str username: The username for controller-local users (or None + to use macaroon-based login.) + :param str password: The password for controller-local users. + :param str cacert: The CA certificate of the controller + (PEM formatted). + :param httpbakery.Client bakery_client: The macaroon bakery client to + to use when performing macaroon-based login. Macaroon tokens + acquired when logging will be saved to bakery_client.cookies. + If this is None, a default bakery_client will be used. + :param list macaroons: List of macaroons to load into the + ``bakery_client``. + :param asyncio.BaseEventLoop loop: The event loop to use for async + operations. + :param int max_frame_size: The maximum websocket frame size to allow. + """ + await self.disconnect() + if 'endpoint' not in kwargs and len(args) < 2: + if args and 'model_name' in kwargs: + raise TypeError('connect() got multiple values for ' + 'controller_name') + elif args: + controller_name = args[0] + else: + controller_name = kwargs.pop('controller_name', None) + await self._connector.connect_controller(controller_name, **kwargs) + else: + if 'controller_name' in kwargs: + raise TypeError('connect() got values for both ' + 'controller_name and endpoint') + if args and 'endpoint' in kwargs: + raise TypeError('connect() got multiple values for endpoint') + has_userpass = (len(args) >= 3 or + {'username', 'password'}.issubset(kwargs)) + has_macaroons = (len(args) >= 5 or not + {'bakery_client', 'macaroons'}.isdisjoint(kwargs)) + if not (has_userpass or has_macaroons): + raise TypeError('connect() missing auth params') + arg_names = [ + 'endpoint', + 'username', + 'password', + 'cacert', + 'bakery_client', + 'macaroons', + 'loop', + 'max_frame_size', + ] + for i, arg in enumerate(args): + kwargs[arg_names[i]] = arg + if 'endpoint' not in kwargs: + raise ValueError('endpoint is required ' + 'if controller_name not given') + if not ({'username', 'password'}.issubset(kwargs) or + {'bakery_client', 'macaroons'}.intersection(kwargs)): + raise ValueError('Authentication parameters are required ' + 'if controller_name not given') + await self._connector.connect(**kwargs) + + async def connect_current(self): + """ + .. deprecated:: 0.7.3 + Use :meth:`.connect()` instead. + """ + return await self.connect() + + async def connect_controller(self, controller_name): + """ + .. deprecated:: 0.7.3 + Use :meth:`.connect(controller_name)` instead. + """ + return await self.connect(controller_name) + + async def _connect_direct(self, **kwargs): + await self.disconnect() + await self._connector.connect(**kwargs) + + def is_connected(self): + """Reports whether the Controller is currently connected.""" + return self._connector.is_connected() + + def connection(self): + """Return the current Connection object. It raises an exception + if the Controller is disconnected""" + return self._connector.connection() + + @property + def controller_name(self): + return self._connector.controller_name + + async def disconnect(self): + """Shut down the watcher task and close websockets. + + """ + await self._connector.disconnect() + + async def add_credential(self, name=None, credential=None, cloud=None, - owner=None): ++ owner=None, force=False): + """Add or update a credential to the controller. + + :param str name: Name of new credential. If None, the default + local credential is used. Name must be provided if a credential + is given. + :param CloudCredential credential: Credential to add. If not given, + it will attempt to read from local data, if available. + :param str cloud: Name of cloud to associate the credential with. + Defaults to the same cloud as the controller. + :param str owner: Username that will own the credential. Defaults to + the current user. ++ :param bool force: Force indicates whether the update should be forced. ++ It's only supported for facade v3 or later. ++ Defaults to false. + :returns: Name of credential that was uploaded. + """ + if not cloud: + cloud = await self.get_cloud() + + if not owner: + owner = self.connection().info['user-info']['identity'] + + if credential and not name: + raise errors.JujuError('Name must be provided for credential') + + if not credential: - name, credential = self._connector.jujudata.load_credential(cloud, name) ++ name, credential = self._connector.jujudata.load_credential(cloud, ++ name) + if credential is None: + raise errors.JujuError( + 'Unable to find credential: {}'.format(name)) + + if credential.auth_type == 'jsonfile' and 'file' in credential.attrs: + # file creds have to be loaded before being sent to the controller + try: + # it might already be JSON + json.loads(credential.attrs['file']) + except json.JSONDecodeError: + # not valid JSON, so maybe it's a file + cred_path = Path(credential.attrs['file']) + if cred_path.exists(): + # make a copy + cred_json = credential.to_json() + credential = client.CloudCredential.from_json(cred_json) + # inline the cred + credential.attrs['file'] = cred_path.read_text() + + log.debug('Uploading credential %s', name) + cloud_facade = client.CloudFacade.from_connection(self.connection()) - await cloud_facade.UpdateCredentials([ ++ tagged_credentials = [ + client.UpdateCloudCredential( + tag=tag.credential(cloud, tag.untag('user-', owner), name), + credential=credential, - )]) - ++ )] ++ if cloud_facade.version >= 3: ++ # UpdateCredentials was renamed to UpdateCredentialsCheckModels ++ # in facade version 3. ++ await cloud_facade.UpdateCredentialsCheckModels( ++ credentials=tagged_credentials, force=force, ++ ) ++ else: ++ await cloud_facade.UpdateCredentials(tagged_credentials) + return name + + async def add_model( + self, model_name, cloud_name=None, credential_name=None, + owner=None, config=None, region=None): + """Add a model to this controller. + + :param str model_name: Name to give the new model. + :param str cloud_name: Name of the cloud in which to create the + model, e.g. 'aws'. Defaults to same cloud as controller. + :param str credential_name: Name of the credential to use when + creating the model. If not given, it will attempt to find a + default credential. + :param str owner: Username that will own the model. Defaults to + the current user. + :param dict config: Model configuration. + :param str region: Region in which to create the model. + :return Model: A connection to the newly created model. + """ + model_facade = client.ModelManagerFacade.from_connection( + self.connection()) + + owner = owner or self.connection().info['user-info']['identity'] + cloud_name = cloud_name or await self.get_cloud() + + try: + # attempt to add/update the credential from local data if available + credential_name = await self.add_credential( + name=credential_name, + cloud=cloud_name, + owner=owner) + except errors.JujuError: + # if it's not available locally, assume it's on the controller + pass + + if credential_name: + credential = tag.credential( + cloud_name, + tag.untag('user-', owner), + credential_name + ) + else: + credential = None + + log.debug('Creating model %s', model_name) + + if not config or 'authorized-keys' not in config: + config = config or {} + config['authorized-keys'] = await utils.read_ssh_key( + loop=self._connector.loop) + + model_info = await model_facade.CreateModel( + tag.cloud(cloud_name), + config, + credential, + model_name, + owner, + region + ) + from juju.model import Model + model = Model(jujudata=self._connector.jujudata) + kwargs = self.connection().connect_params() + kwargs['uuid'] = model_info.uuid + await model._connect_direct(**kwargs) + + return model + - async def destroy_models(self, *models): ++ async def destroy_models(self, *models, destroy_storage=False): + """Destroy one or more models. + - :param str \*models: Names or UUIDs of models to destroy ++ :param str *models: Names or UUIDs of models to destroy ++ :param bool destroy_storage: Whether or not to destroy storage when ++ destroying the models. Defaults to false. + + """ + uuids = await self.model_uuids() + models = [uuids[model] if model in uuids else model + for model in models] + + model_facade = client.ModelManagerFacade.from_connection( + self.connection()) + + log.debug( + 'Destroying model%s %s', + '' if len(models) == 1 else 's', + ', '.join(models) + ) + - await model_facade.DestroyModels([ - client.Entity(tag.model(model)) - for model in models - ]) ++ if model_facade.version >= 5: ++ params = [ ++ client.DestroyModelParams(model_tag=tag.model(model), ++ destroy_storage=destroy_storage) ++ for model in models] ++ else: ++ params = [client.Entity(tag.model(model)) for model in models] ++ ++ await model_facade.DestroyModels(params) + destroy_model = destroy_models + + async def add_user(self, username, password=None, display_name=None): + """Add a user to this controller. + + :param str username: Username + :param str password: Password + :param str display_name: Display name + :returns: A :class:`~juju.user.User` instance + """ + if not display_name: + display_name = username - user_facade = client.UserManagerFacade.from_connection(self.connection()) ++ user_facade = client.UserManagerFacade.from_connection( ++ self.connection()) + users = [client.AddUser(display_name=display_name, + username=username, + password=password)] - await user_facade.AddUser(users) - return await self.get_user(username) ++ results = await user_facade.AddUser(users) ++ secret_key = results.results[0].secret_key ++ return await self.get_user(username, secret_key=secret_key) + + async def remove_user(self, username): + """Remove a user from this controller. + """ + client_facade = client.UserManagerFacade.from_connection( + self.connection()) + user = tag.user(username) + await client_facade.RemoveUser([client.Entity(user)]) + + async def change_user_password(self, username, password): + """Change the password for a user in this controller. + + :param str username: Username + :param str password: New password + + """ - user_facade = client.UserManagerFacade.from_connection(self.connection()) ++ user_facade = client.UserManagerFacade.from_connection( ++ self.connection()) + entity = client.EntityPassword(password, tag.user(username)) + return await user_facade.SetPassword([entity]) + ++ async def reset_user_password(self, username): ++ """Reset user password. ++ ++ :param str username: Username ++ :returns: A :class:`~juju.user.User` instance ++ """ ++ user_facade = client.UserManagerFacade.from_connection( ++ self.connection()) ++ entity = client.Entity(tag.user(username)) ++ results = await user_facade.ResetPassword([entity]) ++ secret_key = results.results[0].secret_key ++ return await self.get_user(username, secret_key=secret_key) ++ + async def destroy(self, destroy_all_models=False): + """Destroy this controller. + + :param bool destroy_all_models: Destroy all hosted models in the + controller. + + """ + controller_facade = client.ControllerFacade.from_connection( + self.connection()) + return await controller_facade.DestroyController(destroy_all_models) + + async def disable_user(self, username): + """Disable a user. + + :param str username: Username + + """ - user_facade = client.UserManagerFacade.from_connection(self.connection()) ++ user_facade = client.UserManagerFacade.from_connection( ++ self.connection()) + entity = client.Entity(tag.user(username)) + return await user_facade.DisableUser([entity]) + + async def enable_user(self, username): + """Re-enable a previously disabled user. + + """ - user_facade = client.UserManagerFacade.from_connection(self.connection()) ++ user_facade = client.UserManagerFacade.from_connection( ++ self.connection()) + entity = client.Entity(tag.user(username)) + return await user_facade.EnableUser([entity]) + + def kill(self): + """Forcibly terminate all machines and other associated resources for + this controller. + + """ + raise NotImplementedError() + + async def get_cloud(self): + """ + Get the name of the cloud that this controller lives on. + """ + cloud_facade = client.CloudFacade.from_connection(self.connection()) + + result = await cloud_facade.Clouds() + cloud = list(result.clouds.keys())[0] # only lives on one cloud + return tag.untag('cloud-', cloud) + + async def get_models(self, all_=False, username=None): + """ + .. deprecated:: 0.7.0 + Use :meth:`.list_models` instead. + """ + controller_facade = client.ControllerFacade.from_connection( + self.connection()) + for attempt in (1, 2, 3): + try: + return await controller_facade.AllModels() + except errors.JujuAPIError as e: + # retry concurrency error until resolved in Juju + # see: https://bugs.launchpad.net/juju/+bug/1721786 + if 'has been removed' not in e.message or attempt == 3: + raise + + async def model_uuids(self): + """Return a mapping of model names to UUIDs. + """ + controller_facade = client.ControllerFacade.from_connection( + self.connection()) + for attempt in (1, 2, 3): + try: + response = await controller_facade.AllModels() + return {um.model.name: um.model.uuid + for um in response.user_models} + except errors.JujuAPIError as e: + # retry concurrency error until resolved in Juju + # see: https://bugs.launchpad.net/juju/+bug/1721786 + if 'has been removed' not in e.message or attempt == 3: + raise + await asyncio.sleep(attempt, loop=self._connector.loop) + + async def list_models(self): + """Return list of names of the available models on this controller. + + Equivalent to ``sorted((await self.model_uuids()).keys())`` + """ + uuids = await self.model_uuids() + return sorted(uuids.keys()) + + def get_payloads(self, *patterns): + """Return list of known payloads. + - :param str \*patterns: Patterns to match against ++ :param str *patterns: Patterns to match against + + Each pattern will be checked against the following info in Juju:: + + - unit name + - machine id + - payload type + - payload class + - payload id + - payload tag + - payload status + + """ + raise NotImplementedError() + + def login(self): + """Log in to this controller. + + """ + raise NotImplementedError() + + def logout(self, force=False): + """Log out of this controller. + + :param bool force: Don't fail even if user not previously logged in + with a password + + """ + raise NotImplementedError() + + async def get_model(self, model): + """Get a model by name or UUID. + + :param str model: Model name or UUID + :returns Model: Connected Model instance. + """ + uuids = await self.model_uuids() + if model in uuids: + uuid = uuids[model] + else: + uuid = model + + from juju.model import Model + model = Model() + kwargs = self.connection().connect_params() + kwargs['uuid'] = uuid + await model._connect_direct(**kwargs) + return model + - async def get_user(self, username): ++ async def get_user(self, username, secret_key=None): + """Get a user by name. + + :param str username: Username ++ :param str secret_key: Issued by juju when add or reset user ++ password + :returns: A :class:`~juju.user.User` instance + """ + client_facade = client.UserManagerFacade.from_connection( + self.connection()) + user = tag.user(username) + args = [client.Entity(user)] + try: + response = await client_facade.UserInfo(args, True) + except errors.JujuError as e: + if 'permission denied' in e.errors: + # apparently, trying to get info for a nonexistent user returns + # a "permission denied" error rather than an empty result set + return None + raise + if response.results and response.results[0].result: - return User(self, response.results[0].result) ++ return User(self, response.results[0].result, secret_key=secret_key) + return None + + async def get_users(self, include_disabled=False): + """Return list of users that can connect to this controller. + + :param bool include_disabled: Include disabled users + :returns: A list of :class:`~juju.user.User` instances + """ + client_facade = client.UserManagerFacade.from_connection( + self.connection()) + response = await client_facade.UserInfo(None, include_disabled) + return [User(self, r.result) for r in response.results] + + async def grant(self, username, acl='login'): + """Grant access level of the given user on the controller. + Note that if the user already has higher permissions than the + provided ACL, this will do nothing (see revoke for a way to + remove permissions). + :param str username: Username + :param str acl: Access control ('login', 'add-model' or 'superuser') + :returns: True if new access was granted, False if user already had + requested access or greater. Raises JujuError if failed. + """ + controller_facade = client.ControllerFacade.from_connection( + self.connection()) + user = tag.user(username) + changes = client.ModifyControllerAccess(acl, 'grant', user) + try: + await controller_facade.ModifyControllerAccess([changes]) + return True + except errors.JujuError as e: + if 'user already has' in str(e): + return False + else: + raise + + async def revoke(self, username, acl='login'): + """Removes some or all access of a user to from a controller + If 'login' access is revoked, the user will no longer have any + permissions on the controller. Revoking a higher privilege from + a user without that privilege will have no effect. + + :param str username: username + :param str acl: Access to remove ('login', 'add-model' or 'superuser') + """ + controller_facade = client.ControllerFacade.from_connection( + self.connection()) + user = tag.user(username) + changes = client.ModifyControllerAccess('login', 'revoke', user) + return await controller_facade.ModifyControllerAccess([changes]) + + async def grant_model(self, username, model_uuid, acl='read'): + """Grant a user access to a model. Note that if the user + already has higher permissions than the provided ACL, - this will do nothing (see revoke_model for a way to remove permissions). ++ this will do nothing (see revoke_model for a way to remove ++ permissions). + + :param str username: Username + :param str model_uuid: The UUID of the model to change. + :param str acl: Access control ('read, 'write' or 'admin') + """ + model_facade = client.ModelManagerFacade.from_connection( + self.connection()) + user = tag.user(username) + model = tag.model(model_uuid) + changes = client.ModifyModelAccess(acl, 'grant', model, user) + return await model_facade.ModifyModelAccess([changes]) + + async def revoke_model(self, username, model_uuid, acl='read'): + """Revoke some or all of a user's access to a model. + If 'read' access is revoked, the user will no longer have any + permissions on the model. Revoking a higher privilege from + a user without that privilege will have no effect. + + :param str username: Username to revoke + :param str model_uuid: The UUID of the model to change. + :param str acl: Access control ('read, 'write' or 'admin') + """ + model_facade = client.ModelManagerFacade.from_connection( + self.connection()) + user = tag.user(username) - model = tag.model(self.info.uuid) ++ model = tag.model(model_uuid) + changes = client.ModifyModelAccess(acl, 'revoke', model, user) + return await model_facade.ModifyModelAccess([changes]) diff --cc modules/libjuju/juju/juju.py index a9fcbbe,0000000..444155f mode 100644,000000..100644 --- a/modules/libjuju/juju/juju.py +++ b/modules/libjuju/juju/juju.py @@@ -1,118 -1,0 +1,118 @@@ +class Juju(object): + def add_cloud(self, name, definition, replace=False): + """Add a user-defined cloud to Juju from among known cloud types. + + :param str name: Name of cloud + :param dict definition: Cloud definition + + Example cloud definition, as yaml:: + + type: openstack + auth-types: [ userpass ] + regions: + london: + endpoint: https://london.mycloud.com:35574/v3.0/ + + """ + raise NotImplementedError() + + def agree(self, *terms): + """Agree to the terms of a charm. + - :param str \*terms: Terms to agree to ++ :param str *terms: Terms to agree to + + """ + raise NotImplementedError() + + def autoload_credentials(self): + """Finds cloud credentials and caches them for use by Juju when + bootstrapping. + + """ + raise NotImplementedError() + + def create_budget(self): + """Create a new budget. + + """ + raise NotImplementedError() + + def get_agreements(self): + """Return list of terms to which the current user has agreed. + + """ + raise NotImplementedError() + + def get_budgets(self): + """Return list of available budgets. + + """ + raise NotImplementedError() + + def get_clouds(self): + """Return list of all available clouds. + + """ + raise NotImplementedError() + + def get_controllers(self): + """Return list of all available controllers. + + (maybe move this to Cloud?) + """ + raise NotImplementedError() + + def get_plans(self, charm_url): + """Return list of plans available for the specified charm. + + :param str charm_url: Charm url + + """ + raise NotImplementedError() + + def register(self, registration_string): + """Register a user to a controller. + + :param str registration_string: The registration string + + """ + raise NotImplementedError() + + def set_budget(self, name, limit): + """Set a monthly budget limit. + + :param str name: Name of budget + :param int limit: Monthly limit + + """ + raise NotImplementedError() + + def get_cloud(self, name): + """Get a cloud by name. + + :param str name: Name of cloud + + """ + raise NotImplementedError() + + def get_controller(self, name, include_passwords=False): + """Get a controller by name. + + :param str name: Name of controller + :param bool include_passwords: Include passwords for accounts + + (maybe move this to Cloud?) + """ + raise NotImplementedError() + + def update_clouds(self): + """Update public cloud info available to Juju. + + """ + raise NotImplementedError() + + def version(self): + """Return the Juju version. + + """ + raise NotImplementedError() diff --cc modules/libjuju/juju/machine.py index a46135c,0000000..39bfa11 mode 100644,000000..100644 --- a/modules/libjuju/juju/machine.py +++ b/modules/libjuju/juju/machine.py @@@ -1,282 -1,0 +1,284 @@@ +import asyncio +import logging +import os + +import pyrfc3339 + +from . import model, utils +from .client import client +from .errors import JujuError + +log = logging.getLogger(__name__) + + +class Machine(model.ModelEntity): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.model.loop.create_task(self._queue_workarounds()) + + async def _queue_workarounds(self): + model = self.model + if not model.info: + await utils.run_with_interrupt(model.get_info(), + model._watch_stopping, - model.loop) ++ loop=model.loop) + if model._watch_stopping.is_set(): + return + if model.info.agent_version < client.Number.from_json('2.2.3'): + self.on_change(self._workaround_1695335) + + async def _workaround_1695335(self, delta, old, new, model): + """ + This is a (hacky) temporary work around for a bug in Juju where the + instance status and agent version fields don't get updated properly + by the AllWatcher. + + Deltas never contain a value for `data['agent-status']['version']`, + and once the `instance-status` reaches `pending`, we no longer get + any updates for it (the deltas come in, but the `instance-status` + data is always the same after that). + + To work around this, whenever a delta comes in for this machine, we + query FullStatus and use the data from there if and only if it's newer. + Luckily, the timestamps on the `since` field does seem to be accurate. + + See https://bugs.launchpad.net/juju/+bug/1695335 + """ + if delta.data.get('synthetic', False): + # prevent infinite loops re-processing already processed deltas + return + + full_status = await utils.run_with_interrupt(model.get_status(), + model._watch_stopping, - model.loop) ++ loop=model.loop) + if model._watch_stopping.is_set(): + return + + if self.id not in full_status.machines: + return + + if not full_status.machines[self.id]['instance-status']['since']: + return + + machine = full_status.machines[self.id] + + change_log = [] + key_map = { + 'status': 'current', + 'info': 'message', + 'since': 'since', + } + + # handle agent version specially, because it's never set in + # deltas, and we don't want even a newer delta to clear it + agent_version = machine['agent-status']['version'] + if agent_version: + delta.data['agent-status']['version'] = agent_version + change_log.append(('agent-version', '', agent_version)) + + # only update (other) delta fields if status data is newer + status_since = pyrfc3339.parse(machine['instance-status']['since']) + delta_since = pyrfc3339.parse(delta.data['instance-status']['since']) + if status_since > delta_since: + for status_key in ('status', 'info', 'since'): + delta_key = key_map[status_key] + status_value = machine['instance-status'][status_key] + delta_value = delta.data['instance-status'][delta_key] + change_log.append((delta_key, delta_value, status_value)) + delta.data['instance-status'][delta_key] = status_value + + if change_log: + log.debug('Overriding machine delta with FullStatus data') + for log_item in change_log: + log.debug(' {}: {} -> {}'.format(*log_item)) + delta.data['synthetic'] = True + old_obj, new_obj = self.model.state.apply_delta(delta) + await model._notify_observers(delta, old_obj, new_obj) + + async def destroy(self, force=False): + """Remove this machine from the model. + + Blocks until the machine is actually removed. + + """ + facade = client.ClientFacade.from_connection(self.connection) + + log.debug( + 'Destroying machine %s', self.id) + + await facade.DestroyMachines(force, [self.id]) + return await self.model._wait( + 'machine', self.id, 'remove') + remove = destroy + + def run(self, command, timeout=None): + """Run command on this machine. + + :param str command: The command to run + :param int timeout: Time to wait before command is considered failed + + """ + raise NotImplementedError() + + async def set_annotations(self, annotations): + """Set annotations on this machine. + + :param annotations map[string]string: the annotations as key/value + pairs. + + """ + log.debug('Updating annotations on machine %s', self.id) + + self.ann_facade = client.AnnotationsFacade.from_connection( + self.connection) + + ann = client.EntityAnnotations( + entity=self.id, + annotations=annotations, + ) + return await self.ann_facade.Set([ann]) + + async def scp_to(self, source, destination, user='ubuntu', proxy=False, + scp_opts=''): + """Transfer files to this machine. + + :param str source: Local path of file(s) to transfer + :param str destination: Remote destination of transferred files + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server - :param str scp_opts: Additional options to the `scp` command ++ :param scp_opts: Additional options to the `scp` command ++ :type scp_opts: str or list + """ + if proxy: + raise NotImplementedError('proxy option is not implemented') + + address = self.dns_name + destination = '%s@%s:%s' % (user, address, destination) + await self._scp(source, destination, scp_opts) + + async def scp_from(self, source, destination, user='ubuntu', proxy=False, + scp_opts=''): + """Transfer files from this machine. + + :param str source: Remote path of file(s) to transfer + :param str destination: Local destination of transferred files + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server - :param str scp_opts: Additional options to the `scp` command ++ :param scp_opts: Additional options to the `scp` command ++ :type scp_opts: str or list + """ + if proxy: + raise NotImplementedError('proxy option is not implemented') + + address = self.dns_name + source = '%s@%s:%s' % (user, address, source) + await self._scp(source, destination, scp_opts) + + async def _scp(self, source, destination, scp_opts): + """ Execute an scp command. Requires a fully qualified source and + destination. + """ + cmd = [ + 'scp', + '-i', os.path.expanduser('~/.local/share/juju/ssh/juju_id_rsa'), + '-o', 'StrictHostKeyChecking=no', + '-q', - '-B', - source, destination ++ '-B' + ] - cmd += scp_opts.split() ++ cmd.extend(scp_opts.split() if isinstance(scp_opts, str) else scp_opts) ++ cmd.extend([source, destination]) + loop = self.model.loop + process = await asyncio.create_subprocess_exec(*cmd, loop=loop) + await process.wait() + if process.returncode != 0: + raise JujuError("command failed: %s" % cmd) + + def ssh( + self, command, user=None, proxy=False, ssh_opts=None): + """Execute a command over SSH on this machine. + + :param str command: Command to execute + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server + :param str ssh_opts: Additional options to the `ssh` command + + """ + raise NotImplementedError() + + def status_history(self, num=20, utc=False): + """Get status history for this machine. + + :param int num: Size of history backlog + :param bool utc: Display time as UTC in RFC3339 format + + """ + raise NotImplementedError() + + @property + def agent_status(self): + """Returns the current Juju agent status string. + + """ + return self.safe_data['agent-status']['current'] + + @property + def agent_status_since(self): + """Get the time when the `agent_status` was last updated. + + """ + return pyrfc3339.parse(self.safe_data['agent-status']['since']) + + @property + def agent_version(self): + """Get the version of the Juju machine agent. + + May return None if the agent is not yet available. + """ + version = self.safe_data['agent-status']['version'] + if version: + return client.Number.from_json(version) + else: + return None + + @property + def status(self): + """Returns the current machine provisioning status string. + + """ + return self.safe_data['instance-status']['current'] + + @property + def status_message(self): + """Returns the current machine provisioning status message. + + """ + return self.safe_data['instance-status']['message'] + + @property + def status_since(self): + """Get the time when the `status` was last updated. + + """ + return pyrfc3339.parse(self.safe_data['instance-status']['since']) + + @property + def dns_name(self): + """Get the DNS name for this machine. This is a best guess based on the + addresses available in current data. + + May return None if no suitable address is found. + """ + for scope in ['public', 'local-cloud']: + addresses = self.safe_data['addresses'] or [] + addresses = [address for address in addresses + if address['scope'] == scope] + if addresses: + return addresses[0]['value'] + return None + + @property + def series(self): + """Returns the series of the current machine + + """ + return self.safe_data['series'] diff --cc modules/libjuju/juju/model.py index 37e8cd6,0000000..bd7d430 mode 100644,000000..100644 --- a/modules/libjuju/juju/model.py +++ b/modules/libjuju/juju/model.py @@@ -1,2270 -1,0 +1,2325 @@@ +import asyncio +import base64 +import collections +import hashlib +import json +import logging +import os +import re +import stat +import tempfile +import weakref +import zipfile +from concurrent.futures import CancelledError +from functools import partial +from pathlib import Path + +import theblues.charmstore +import theblues.errors +import websockets +import yaml + +from . import tag, utils +from .client import client, connector +from .client.client import ConfigValue +from .client.client import Value +from .constraints import parse as parse_constraints +from .constraints import normalize_key +from .delta import get_entity_class, get_entity_delta +from .errors import JujuAPIError, JujuError +from .exceptions import DeadEntityException +from .placement import parse as parse_placement +from . import provisioner + + +log = logging.getLogger(__name__) + + +class _Observer: + """Wrapper around an observer callable. + + This wrapper allows filter criteria to be associated with the + callable so that it's only called for changes that meet the criteria. + + """ + def __init__(self, callable_, entity_type, action, entity_id, predicate): + self.callable_ = callable_ + self.entity_type = entity_type + self.action = action + self.entity_id = entity_id + self.predicate = predicate + if self.entity_id: + self.entity_id = str(self.entity_id) + if not self.entity_id.startswith('^'): + self.entity_id = '^' + self.entity_id + if not self.entity_id.endswith('$'): + self.entity_id += '$' + + async def __call__(self, delta, old, new, model): + await self.callable_(delta, old, new, model) + + def cares_about(self, delta): + """Return True if this observer "cares about" (i.e. wants to be + called) for a this delta. + + """ + if (self.entity_id and delta.get_id() and + not re.match(self.entity_id, str(delta.get_id()))): + return False + + if self.entity_type and self.entity_type != delta.entity: + return False + + if self.action and self.action != delta.type: + return False + + if self.predicate and not self.predicate(delta): + return False + + return True + + +class ModelObserver: + """ + Base class for creating observers that react to changes in a model. + """ + async def __call__(self, delta, old, new, model): + handler_name = 'on_{}_{}'.format(delta.entity, delta.type) + method = getattr(self, handler_name, self.on_change) + await method(delta, old, new, model) + + async def on_change(self, delta, old, new, model): + """Generic model-change handler. + + This should be overridden in a subclass. + + :param delta: :class:`juju.client.overrides.Delta` + :param old: :class:`juju.model.ModelEntity` + :param new: :class:`juju.model.ModelEntity` + :param model: :class:`juju.model.Model` + + """ + pass + + +class ModelState: + """Holds the state of the model, including the delta history of all + entities in the model. + + """ + def __init__(self, model): + self.model = model + self.state = dict() + + def _live_entity_map(self, entity_type): + """Return an id:Entity map of all the living entities of + type ``entity_type``. + + """ + return { + entity_id: self.get_entity(entity_type, entity_id) + for entity_id, history in self.state.get(entity_type, {}).items() + if history[-1] is not None + } + + @property + def applications(self): + """Return a map of application-name:Application for all applications + currently in the model. + + """ + return self._live_entity_map('application') + + @property + def machines(self): + """Return a map of machine-id:Machine for all machines currently in + the model. + + """ + return self._live_entity_map('machine') + + @property + def units(self): + """Return a map of unit-id:Unit for all units currently in + the model. + + """ + return self._live_entity_map('unit') + + @property + def relations(self): + """Return a map of relation-id:Relation for all relations currently in + the model. + + """ + return self._live_entity_map('relation') + + def entity_history(self, entity_type, entity_id): + """Return the history deque for an entity. + + """ + return self.state[entity_type][entity_id] + + def entity_data(self, entity_type, entity_id, history_index): + """Return the data dict for an entity at a specific index of its + history. + + """ + return self.entity_history(entity_type, entity_id)[history_index] + + def apply_delta(self, delta): + """Apply delta to our state and return a copy of the + affected object as it was before and after the update, e.g.: + + old_obj, new_obj = self.apply_delta(delta) + + old_obj may be None if the delta is for the creation of a new object, + e.g. a new application or unit is deployed. + + new_obj will never be None, but may be dead (new_obj.dead == True) + if the object was deleted as a result of the delta being applied. + + """ + history = ( + self.state + .setdefault(delta.entity, {}) + .setdefault(delta.get_id(), collections.deque()) + ) + + history.append(delta.data) + if delta.type == 'remove': + history.append(None) + + entity = self.get_entity(delta.entity, delta.get_id()) + return entity.previous(), entity + + def get_entity( + self, entity_type, entity_id, history_index=-1, connected=True): + """Return an object instance for the given entity_type and id. + + By default the object state matches the most recent state from + Juju. To get an instance of the object in an older state, pass + history_index, an index into the history deque for the entity. + + """ + + if history_index < 0 and history_index != -1: + history_index += len(self.entity_history(entity_type, entity_id)) + if history_index < 0: + return None + + try: + self.entity_data(entity_type, entity_id, history_index) + except IndexError: + return None + + entity_class = get_entity_class(entity_type) + return entity_class( + entity_id, self.model, history_index=history_index, + connected=connected) + + +class ModelEntity: + """An object in the Model tree""" + + def __init__(self, entity_id, model, history_index=-1, connected=True): + """Initialize a new entity + + :param entity_id str: The unique id of the object in the model + :param model: The model instance in whose object tree this + entity resides + :history_index int: The index of this object's state in the model's + history deque for this entity + :connected bool: Flag indicating whether this object gets live updates + from the model. + + """ + self.entity_id = entity_id + self.model = model + self._history_index = history_index + self.connected = connected + self.connection = model.connection() + + def __repr__(self): + return '<{} entity_id="{}">'.format(type(self).__name__, + self.entity_id) + + def __getattr__(self, name): + """Fetch object attributes from the underlying data dict held in the + model. + + """ + try: + return self.safe_data[name] + except KeyError: + name = name.replace('_', '-') + if name in self.safe_data: + return self.safe_data[name] + else: + raise + + def __bool__(self): + return bool(self.data) + + def on_change(self, callable_): + """Add a change observer to this entity. + + """ + self.model.add_observer( + callable_, self.entity_type, 'change', self.entity_id) + + def on_remove(self, callable_): + """Add a remove observer to this entity. + + """ + self.model.add_observer( + callable_, self.entity_type, 'remove', self.entity_id) + + @property + def entity_type(self): + """A string identifying the entity type of this object, e.g. + 'application' or 'unit', etc. + + """ + return self.__class__.__name__.lower() + + @property + def current(self): + """Return True if this object represents the current state of the + entity in the underlying model. + + This will be True except when the object represents an entity at a + non-latest state in history, e.g. if the object was obtained by calling + .previous() on another object. + + """ + return self._history_index == -1 + + @property + def dead(self): + """Returns True if this entity no longer exists in the underlying + model. + + """ + return ( + self.data is None or + self.model.state.entity_data( + self.entity_type, self.entity_id, -1) is None + ) + + @property + def alive(self): + """Returns True if this entity still exists in the underlying + model. + + """ + return not self.dead + + @property + def data(self): + """The data dictionary for this entity. + + """ + return self.model.state.entity_data( + self.entity_type, self.entity_id, self._history_index) + + @property + def safe_data(self): + """The data dictionary for this entity. + + If this `ModelEntity` points to the dead state, it will + raise `DeadEntityException`. + + """ + if self.data is None: + raise DeadEntityException( + "Entity {}:{} is dead - its attributes can no longer be " + "accessed. Use the .previous() method on this object to get " + "a copy of the object at its previous state.".format( + self.entity_type, self.entity_id)) + return self.data + + def previous(self): + """Return a copy of this object as was at its previous state in + history. + + Returns None if this object is new (and therefore has no history). + + The returned object is always "disconnected", i.e. does not receive + live updates. + + """ + return self.model.state.get_entity( + self.entity_type, self.entity_id, self._history_index - 1, + connected=False) + + def next(self): + """Return a copy of this object at its next state in + history. + + Returns None if this object is already the latest. + + The returned object is "disconnected", i.e. does not receive + live updates, unless it is current (latest). + + """ + if self._history_index == -1: + return None + + new_index = self._history_index + 1 + connected = ( + new_index == len(self.model.state.entity_history( + self.entity_type, self.entity_id)) - 1 + ) + return self.model.state.get_entity( + self.entity_type, self.entity_id, self._history_index - 1, + connected=connected) + + def latest(self): + """Return a copy of this object at its current state in the model. + + Returns self if this object is already the latest. + + The returned object is always "connected", i.e. receives + live updates from the model. + + """ + if self._history_index == -1: + return self + + return self.model.state.get_entity(self.entity_type, self.entity_id) + + +class Model: + """ + The main API for interacting with a Juju model. + """ + def __init__( + self, + loop=None, + max_frame_size=None, + bakery_client=None, + jujudata=None, + ): + """Instantiate a new Model. + + The connect method will need to be called before this + object can be used for anything interesting. + + If jujudata is None, jujudata.FileJujuData will be used. + + :param loop: an asyncio event loop + :param max_frame_size: See + `juju.client.connection.Connection.MAX_FRAME_SIZE` + :param bakery_client httpbakery.Client: The bakery client to use + for macaroon authorization. + :param jujudata JujuData: The source for current controller information + """ + self._connector = connector.Connector( + loop=loop, + max_frame_size=max_frame_size, + bakery_client=bakery_client, + jujudata=jujudata, + ) + self._observers = weakref.WeakValueDictionary() + self.state = ModelState(self) + self._info = None + self._watch_stopping = asyncio.Event(loop=self._connector.loop) + self._watch_stopped = asyncio.Event(loop=self._connector.loop) + self._watch_received = asyncio.Event(loop=self._connector.loop) + self._watch_stopped.set() + self._charmstore = CharmStore(self._connector.loop) + + def is_connected(self): + """Reports whether the Model is currently connected.""" + return self._connector.is_connected() + + @property + def loop(self): + return self._connector.loop + + def connection(self): + """Return the current Connection object. It raises an exception + if the Model is disconnected""" + return self._connector.connection() + + async def get_controller(self): + """Return a Controller instance for the currently connected model. + :return Controller: + """ + from juju.controller import Controller + controller = Controller(jujudata=self._connector.jujudata) + kwargs = self.connection().connect_params() + kwargs.pop('uuid') + await controller._connect_direct(**kwargs) + return controller + + async def __aenter__(self): + await self.connect() + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.disconnect() + + async def connect(self, *args, **kwargs): + """Connect to a juju model. + + This supports two calling conventions: + + The model and (optionally) authentication information can be taken + from the data files created by the Juju CLI. This convention will + be used if a ``model_name`` is specified, or if the ``endpoint`` + and ``uuid`` are not. + + Otherwise, all of the ``endpoint``, ``uuid``, and authentication + information (``username`` and ``password``, or ``bakery_client`` and/or + ``macaroons``) are required. + + If a single positional argument is given, it will be assumed to be + the ``model_name``. Otherwise, the first positional argument, if any, + must be the ``endpoint``. + + Available parameters are: + + :param model_name: Format [controller:][user/]model + :param str endpoint: The hostname:port of the controller to connect to. + :param str uuid: The model UUID to connect to. + :param str username: The username for controller-local users (or None + to use macaroon-based login.) + :param str password: The password for controller-local users. + :param str cacert: The CA certificate of the controller + (PEM formatted). + :param httpbakery.Client bakery_client: The macaroon bakery client to + to use when performing macaroon-based login. Macaroon tokens + acquired when logging will be saved to bakery_client.cookies. + If this is None, a default bakery_client will be used. + :param list macaroons: List of macaroons to load into the + ``bakery_client``. + :param asyncio.BaseEventLoop loop: The event loop to use for async + operations. + :param int max_frame_size: The maximum websocket frame size to allow. + """ + await self.disconnect() + if 'endpoint' not in kwargs and len(args) < 2: + if args and 'model_name' in kwargs: + raise TypeError('connect() got multiple values for model_name') + elif args: + model_name = args[0] + else: + model_name = kwargs.pop('model_name', None) + await self._connector.connect_model(model_name, **kwargs) + else: + if 'model_name' in kwargs: + raise TypeError('connect() got values for both ' + 'model_name and endpoint') + if args and 'endpoint' in kwargs: + raise TypeError('connect() got multiple values for endpoint') + if len(args) < 2 and 'uuid' not in kwargs: + raise TypeError('connect() missing value for uuid') + has_userpass = (len(args) >= 4 or + {'username', 'password'}.issubset(kwargs)) + has_macaroons = (len(args) >= 6 or not + {'bakery_client', 'macaroons'}.isdisjoint(kwargs)) + if not (has_userpass or has_macaroons): + raise TypeError('connect() missing auth params') + arg_names = [ + 'endpoint', + 'uuid', + 'username', + 'password', + 'cacert', + 'bakery_client', + 'macaroons', + 'loop', + 'max_frame_size', + ] + for i, arg in enumerate(args): + kwargs[arg_names[i]] = arg + if not {'endpoint', 'uuid'}.issubset(kwargs): + raise ValueError('endpoint and uuid are required ' + 'if model_name not given') + if not ({'username', 'password'}.issubset(kwargs) or + {'bakery_client', 'macaroons'}.intersection(kwargs)): + raise ValueError('Authentication parameters are required ' + 'if model_name not given') + await self._connector.connect(**kwargs) + await self._after_connect() + + async def connect_model(self, model_name): + """ + .. deprecated:: 0.6.2 + Use ``connect(model_name=model_name)`` instead. + """ + return await self.connect(model_name=model_name) + + async def connect_current(self): + """ + .. deprecated:: 0.6.2 + Use ``connect()`` instead. + """ + return await self.connect() + + async def _connect_direct(self, **kwargs): + await self.disconnect() + await self._connector.connect(**kwargs) + await self._after_connect() + + async def _after_connect(self): + self._watch() + + # Wait for the first packet of data from the AllWatcher, + # which contains all information on the model. + # TODO this means that we can't do anything until + # we've received all the model data, which might be + # a whole load of unneeded data if all the client wants + # to do is make one RPC call. + await self._watch_received.wait() + + await self.get_info() + + async def disconnect(self): + """Shut down the watcher task and close websockets. + + """ + if not self._watch_stopped.is_set(): + log.debug('Stopping watcher task') + self._watch_stopping.set() + await self._watch_stopped.wait() + self._watch_stopping.clear() + + if self.is_connected(): + log.debug('Closing model connection') + await self._connector.disconnect() + self._info = None + + async def add_local_charm_dir(self, charm_dir, series): + """Upload a local charm to the model. + + This will automatically generate an archive from + the charm dir. + + :param charm_dir: Path to the charm directory + :param series: Charm series + + """ + fh = tempfile.NamedTemporaryFile() + CharmArchiveGenerator(charm_dir).make_archive(fh.name) + with fh: + func = partial( + self.add_local_charm, fh, series, os.stat(fh.name).st_size) + charm_url = await self._connector.loop.run_in_executor(None, func) + + log.debug('Uploaded local charm: %s -> %s', charm_dir, charm_url) + return charm_url + + def add_local_charm(self, charm_file, series, size=None): + """Upload a local charm archive to the model. + + Returns the 'local:...' url that should be used to deploy the charm. + + :param charm_file: Path to charm zip archive + :param series: Charm series + :param size: Size of the archive, in bytes + :return str: 'local:...' url for deploying the charm + :raises: :class:`JujuError` if the upload fails + + Uses an https endpoint at the same host:port as the wss. + Supports large file uploads. + + .. warning:: + + This method will block. Consider using :meth:`add_local_charm_dir` + instead. + + """ + conn, headers, path_prefix = self.connection().https_connection() + path = "%s/charms?series=%s" % (path_prefix, series) + headers['Content-Type'] = 'application/zip' + if size: + headers['Content-Length'] = size + conn.request("POST", path, charm_file, headers) + response = conn.getresponse() + result = response.read().decode() + if not response.status == 200: + raise JujuError(result) + result = json.loads(result) + return result['charm-url'] + + def all_units_idle(self): + """Return True if all units are idle. + + """ + for unit in self.units.values(): + unit_status = unit.data['agent-status']['current'] + if unit_status != 'idle': + return False + return True + + async def reset(self, force=False): + """Reset the model to a clean state. + + :param bool force: Force-terminate machines. + + This returns only after the model has reached a clean state. "Clean" + means no applications or machines exist in the model. + + """ + log.debug('Resetting model') + for app in self.applications.values(): + await app.destroy() + for machine in self.machines.values(): + await machine.destroy(force=force) + await self.block_until( + lambda: len(self.machines) == 0 + ) + + async def block_until(self, *conditions, timeout=None, wait_period=0.5): + """Return only after all conditions are true. + + Raises `websockets.ConnectionClosed` if disconnected. + """ + def _disconnected(): + return not (self.is_connected() and self.connection().is_open) + + def done(): + return _disconnected() or all(c() for c in conditions) + + await utils.block_until(done, + timeout=timeout, + wait_period=wait_period, + loop=self.loop) + if _disconnected(): + raise websockets.ConnectionClosed(1006, 'no reason') + + @property + def applications(self): + """Return a map of application-name:Application for all applications + currently in the model. + + """ + return self.state.applications + + @property + def machines(self): + """Return a map of machine-id:Machine for all machines currently in + the model. + + """ + return self.state.machines + + @property + def units(self): + """Return a map of unit-id:Unit for all units currently in + the model. + + """ + return self.state.units + + @property + def relations(self): + """Return a list of all Relations currently in the model. + + """ + return list(self.state.relations.values()) + + async def get_info(self): + """Return a client.ModelInfo object for this Model. + + Retrieves latest info for this Model from the api server. The + return value is cached on the Model.info attribute so that the + valued may be accessed again without another api call, if + desired. + + This method is called automatically when the Model is connected, + resulting in Model.info being initialized without requiring an + explicit call to this method. + + """ + facade = client.ClientFacade.from_connection(self.connection()) + + self._info = await facade.ModelInfo() + log.debug('Got ModelInfo: %s', vars(self.info)) + + return self.info + + @property + def info(self): + """Return the cached client.ModelInfo object for this Model. + + If Model.get_info() has not been called, this will return None. + """ + return self._info + + def add_observer( + self, callable_, entity_type=None, action=None, entity_id=None, + predicate=None): + """Register an "on-model-change" callback + + Once the model is connected, ``callable_`` + will be called each time the model changes. ``callable_`` should + be Awaitable and accept the following positional arguments: + + delta - An instance of :class:`juju.delta.EntityDelta` + containing the raw delta data recv'd from the Juju + websocket. + + old_obj - If the delta modifies an existing object in the model, + old_obj will be a copy of that object, as it was before the + delta was applied. Will be None if the delta creates a new + entity in the model. + + new_obj - A copy of the new or updated object, after the delta + is applied. Will be None if the delta removes an entity + from the model. + + model - The :class:`Model` itself. + + Events for which ``callable_`` is called can be specified by passing + entity_type, action, and/or entitiy_id filter criteria, e.g.:: + + add_observer( + myfunc, + entity_type='application', action='add', entity_id='ubuntu') + + For more complex filtering conditions, pass a predicate function. It + will be called with a delta as its only argument. If the predicate + function returns True, the ``callable_`` will be called. + + """ + observer = _Observer( + callable_, entity_type, action, entity_id, predicate) + self._observers[observer] = callable_ + + def _watch(self): + """Start an asynchronous watch against this model. + + See :meth:`add_observer` to register an onchange callback. + + """ + async def _all_watcher(): + try: + allwatcher = client.AllWatcherFacade.from_connection( + self.connection()) + while not self._watch_stopping.is_set(): + try: + results = await utils.run_with_interrupt( + allwatcher.Next(), + self._watch_stopping, - self._connector.loop) ++ loop=self._connector.loop) + except JujuAPIError as e: + if 'watcher was stopped' not in str(e): + raise + if self._watch_stopping.is_set(): + # this shouldn't ever actually happen, because + # the event should trigger before the controller + # has a chance to tell us the watcher is stopped + # but handle it gracefully, just in case + break + # controller stopped our watcher for some reason + # but we're not actually stopping, so just restart it + log.warning( + 'Watcher: watcher stopped, restarting') + del allwatcher.Id + continue + except websockets.ConnectionClosed: + monitor = self.connection().monitor + if monitor.status == monitor.ERROR: + # closed unexpectedly, try to reopen + log.warning( + 'Watcher: connection closed, reopening') + await self.connection().reconnect() + if monitor.status != monitor.CONNECTED: + # reconnect failed; abort and shutdown + log.error('Watcher: automatic reconnect ' + 'failed; stopping watcher') + break + del allwatcher.Id + continue + else: + # closed on request, go ahead and shutdown + break + if self._watch_stopping.is_set(): + try: + await allwatcher.Stop() + except websockets.ConnectionClosed: + pass # can't stop on a closed conn + break + for delta in results.deltas: + delta = get_entity_delta(delta) + old_obj, new_obj = self.state.apply_delta(delta) + await self._notify_observers(delta, old_obj, new_obj) + self._watch_received.set() + except CancelledError: + pass + except Exception: + log.exception('Error in watcher') + raise + finally: + self._watch_stopped.set() + + log.debug('Starting watcher task') + self._watch_received.clear() + self._watch_stopping.clear() + self._watch_stopped.clear() + self._connector.loop.create_task(_all_watcher()) + + async def _notify_observers(self, delta, old_obj, new_obj): + """Call observing callbacks, notifying them of a change in model state + + :param delta: The raw change from the watcher + (:class:`juju.client.overrides.Delta`) + :param old_obj: The object in the model that this delta updates. + May be None. + :param new_obj: The object in the model that is created or updated + by applying this delta. + + """ + if new_obj and not old_obj: + delta.type = 'add' + + log.debug( + 'Model changed: %s %s %s', + delta.entity, delta.type, delta.get_id()) + + for o in self._observers: + if o.cares_about(delta): + asyncio.ensure_future(o(delta, old_obj, new_obj, self), + loop=self._connector.loop) + + async def _wait(self, entity_type, entity_id, action, predicate=None): + """ + Block the calling routine until a given action has happened to the + given entity + + :param entity_type: The entity's type. + :param entity_id: The entity's id. + :param action: the type of action (e.g., 'add', 'change', or 'remove') + :param predicate: optional callable that must take as an + argument a delta, and must return a boolean, indicating + whether the delta contains the specific action we're looking + for. For example, you might check to see whether a 'change' + has a 'completed' status. See the _Observer class for details. + + """ + q = asyncio.Queue(loop=self._connector.loop) + + async def callback(delta, old, new, model): + await q.put(delta.get_id()) + + self.add_observer(callback, entity_type, action, entity_id, predicate) + entity_id = await q.get() + # object might not be in the entity_map if we were waiting for a + # 'remove' action + return self.state._live_entity_map(entity_type).get(entity_id) + + async def _wait_for_new(self, entity_type, entity_id): + """Wait for a new object to appear in the Model and return it. + + Waits for an object of type ``entity_type`` with id ``entity_id`` + to appear in the model. This is similar to watching for the + object using ``block_until``, but uses the watcher rather than + polling. + + """ + # if the entity is already in the model, just return it + if entity_id in self.state._live_entity_map(entity_type): + return self.state._live_entity_map(entity_type)[entity_id] + return await self._wait(entity_type, entity_id, None) + + async def wait_for_action(self, action_id): + """Given an action, wait for it to complete.""" + + if action_id.startswith("action-"): + # if we've been passed action.tag, transform it into the + # id that the api deltas will use. + action_id = action_id[7:] + + def predicate(delta): + return delta.data['status'] in ('completed', 'failed') + + return await self._wait('action', action_id, None, predicate) + + async def add_machine( + self, spec=None, constraints=None, disks=None, series=None): + """Start a new, empty machine and optionally a container, or add a + container to a machine. + + :param str spec: Machine specification + Examples:: + + (None) - starts a new machine + 'lxd' - starts a new machine with one lxd container + 'lxd:4' - starts a new lxd container on machine 4 + 'ssh:user@10.10.0.3:/path/to/private/key' - manually provision + a machine with ssh and the private key used for authentication + 'zone=us-east-1a' - starts a machine in zone us-east-1s on AWS + 'maas2.name' - acquire machine maas2.name on MAAS + + :param dict constraints: Machine constraints, which can contain the + the following keys:: + + arch : str + container : str + cores : int + cpu_power : int + instance_type : str + mem : int + root_disk : int + spaces : list(str) + tags : list(str) + virt_type : str + + Example:: + + constraints={ + 'mem': 256 * MB, + 'tags': ['virtual'], + } + + :param list disks: List of disk constraint dictionaries, which can + contain the following keys:: + + count : int + pool : str + size : int + + Example:: + + disks=[{ + 'pool': 'rootfs', + 'size': 10 * GB, + 'count': 1, + }] + + :param str series: Series, e.g. 'xenial' + + Supported container types are: lxd, kvm + + When deploying a container to an existing machine, constraints cannot + be used. + + """ + params = client.AddMachineParams() + + if spec: + if spec.startswith("ssh:"): + placement, target, private_key_path = spec.split(":") + user, host = target.split("@") + + sshProvisioner = provisioner.SSHProvisioner( + host=host, + user=user, + private_key_path=private_key_path, + ) + + params = sshProvisioner.provision_machine() + else: + placement = parse_placement(spec) + if placement: + params.placement = placement[0] + + params.jobs = ['JobHostUnits'] + + if constraints: + params.constraints = client.Value.from_json(constraints) + + if disks: + params.disks = [ + client.Constraints.from_json(o) for o in disks] + + if series: + params.series = series + + # Submit the request. + client_facade = client.ClientFacade.from_connection(self.connection()) + results = await client_facade.AddMachines([params]) + error = results.machines[0].error + if error: + raise ValueError("Error adding machine: %s" % error.message) + machine_id = results.machines[0].machine + + if spec: + if spec.startswith("ssh:"): + # Need to run this after AddMachines has been called, + # as we need the machine_id + await sshProvisioner.install_agent( + self.connection(), + params.nonce, + machine_id, + ) + + log.debug('Added new machine %s', machine_id) + return await self._wait_for_new('machine', machine_id) + + async def add_relation(self, relation1, relation2): + """Add a relation between two applications. + + :param str relation1: '[:]' + :param str relation2: '[:]' + + """ + connection = self.connection() + app_facade = client.ApplicationFacade.from_connection(connection) + + log.debug( + 'Adding relation %s <-> %s', relation1, relation2) + + def _find_relation(*specs): + for rel in self.relations: + if rel.matches(*specs): + return rel + return None + + try: + result = await app_facade.AddRelation([relation1, relation2]) + except JujuAPIError as e: + if 'relation already exists' not in e.message: + raise + rel = _find_relation(relation1, relation2) + if rel: + return rel + raise JujuError('Relation {} {} exists but not in model'.format( + relation1, relation2)) + + specs = ['{}:{}'.format(app, data['name']) + for app, data in result.endpoints.items()] + + await self.block_until(lambda: _find_relation(*specs) is not None) + return _find_relation(*specs) + + def add_space(self, name, *cidrs): + """Add a new network space. + + Adds a new space with the given name and associates the given + (optional) list of existing subnet CIDRs with it. + + :param str name: Name of the space - :param \*cidrs: Optional list of existing subnet CIDRs ++ :param *cidrs: Optional list of existing subnet CIDRs + + """ + raise NotImplementedError() + + async def add_ssh_key(self, user, key): + """Add a public SSH key to this model. + + :param str user: The username of the user + :param str key: The public ssh key + + """ + key_facade = client.KeyManagerFacade.from_connection(self.connection()) + return await key_facade.AddKeys([key], user) + add_ssh_keys = add_ssh_key + + def add_subnet(self, cidr_or_id, space, *zones): + """Add an existing subnet to this model. + + :param str cidr_or_id: CIDR or provider ID of the existing subnet + :param str space: Network space with which to associate - :param str \*zones: Zone(s) in which the subnet resides ++ :param str *zones: Zone(s) in which the subnet resides + + """ + raise NotImplementedError() + + def get_backups(self): + """Retrieve metadata for backups in this model. + + """ + raise NotImplementedError() + + def block(self, *commands): + """Add a new block to this model. + - :param str \*commands: The commands to block. Valid values are ++ :param str *commands: The commands to block. Valid values are + 'all-changes', 'destroy-model', 'remove-object' + + """ + raise NotImplementedError() + + def get_blocks(self): + """List blocks for this model. + + """ + raise NotImplementedError() + + def get_cached_images(self, arch=None, kind=None, series=None): + """Return a list of cached OS images. + + :param str arch: Filter by image architecture + :param str kind: Filter by image kind, e.g. 'lxd' + :param str series: Filter by image series, e.g. 'xenial' + + """ + raise NotImplementedError() + + def create_backup(self, note=None, no_download=False): + """Create a backup of this model. + + :param str note: A note to store with the backup + :param bool no_download: Do not download the backup archive + :return str: Path to downloaded archive + + """ + raise NotImplementedError() + + def create_storage_pool(self, name, provider_type, **pool_config): + """Create or define a storage pool. + + :param str name: Name to give the storage pool + :param str provider_type: Pool provider type - :param \*\*pool_config: key/value pool configuration pairs ++ :param **pool_config: key/value pool configuration pairs + + """ + raise NotImplementedError() + + def debug_log( + self, no_tail=False, exclude_module=None, include_module=None, + include=None, level=None, limit=0, lines=10, replay=False, + exclude=None): + """Get log messages for this model. + + :param bool no_tail: Stop after returning existing log messages + :param list exclude_module: Do not show log messages for these logging + modules + :param list include_module: Only show log messages for these logging + modules + :param list include: Only show log messages for these entities + :param str level: Log level to show, valid options are 'TRACE', + 'DEBUG', 'INFO', 'WARNING', 'ERROR, + :param int limit: Return this many of the most recent (possibly + filtered) lines are shown + :param int lines: Yield this many of the most recent lines, and keep + yielding + :param bool replay: Yield the entire log, and keep yielding + :param list exclude: Do not show log messages for these entities + + """ + raise NotImplementedError() + + def _get_series(self, entity_url, entity): + # try to get the series from the provided charm URL + if entity_url.startswith('cs:'): + parts = entity_url[3:].split('/') + else: + parts = entity_url.split('/') + if parts[0].startswith('~'): + parts.pop(0) + if len(parts) > 1: + # series was specified in the URL + return parts[0] + # series was not supplied at all, so use the newest + # supported series according to the charm store + ss = entity['Meta']['supported-series'] + return ss['SupportedSeries'][0] + + async def deploy( + self, entity_url, application_name=None, bind=None, budget=None, + channel=None, config=None, constraints=None, force=False, + num_units=1, plan=None, resources=None, series=None, storage=None, - to=None): ++ to=None, devices=None): + """Deploy a new service or bundle. + + :param str entity_url: Charm or bundle url + :param str application_name: Name to give the service + :param dict bind: : pairs + :param dict budget: : pairs + :param str channel: Charm store channel from which to retrieve + the charm or bundle, e.g. 'edge' + :param dict config: Charm configuration dictionary + :param constraints: Service constraints + :type constraints: :class:`juju.Constraints` + :param bool force: Allow charm to be deployed to a machine running + an unsupported series + :param int num_units: Number of units to deploy + :param str plan: Plan under which to deploy charm + :param dict resources: : pairs + :param str series: Series on which to deploy + :param dict storage: Storage constraints TODO how do these look? + :param to: Placement directive as a string. For example: + + '23' - place on machine 23 + 'lxd:7' - place in new lxd container on machine 7 + '24/lxd/3' - place in container 3 on machine 24 + + If None, a new machine is provisioned. + + + TODO:: + + - support local resources + + """ + if storage: + storage = { + k: client.Constraints(**v) + for k, v in storage.items() + } + + entity_path = Path(entity_url.replace('local:', '')) + bundle_path = entity_path / 'bundle.yaml' + metadata_path = entity_path / 'metadata.yaml' + + is_local = ( + entity_url.startswith('local:') or + entity_path.is_dir() or + entity_path.is_file() + ) + if is_local: + entity_id = entity_url.replace('local:', '') + else: - entity = await self.charmstore.entity(entity_url, channel=channel) ++ entity = await self.charmstore.entity(entity_url, channel=channel, ++ include_stats=False) + entity_id = entity['Id'] + + client_facade = client.ClientFacade.from_connection(self.connection()) + + is_bundle = ((is_local and + (entity_id.endswith('.yaml') and entity_path.exists()) or + bundle_path.exists()) or + (not is_local and 'bundle/' in entity_id)) + + if is_bundle: + handler = BundleHandler(self) + await handler.fetch_plan(entity_id) + await handler.execute_plan() + extant_apps = {app for app in self.applications} + pending_apps = set(handler.applications) - extant_apps + if pending_apps: + # new apps will usually be in the model by now, but if some + # haven't made it yet we'll need to wait on them to be added + await asyncio.gather(*[ + asyncio.ensure_future( + self._wait_for_new('application', app_name), + loop=self._connector.loop) + for app_name in pending_apps + ], loop=self._connector.loop) + return [app for name, app in self.applications.items() + if name in handler.applications] + else: + if not is_local: + if not application_name: + application_name = entity['Meta']['charm-metadata']['Name'] + if not series: + series = self._get_series(entity_url, entity) + await client_facade.AddCharm(channel, entity_id) + # XXX: we're dropping local resources here, but we don't + # actually support them yet anyway + resources = await self._add_store_resources(application_name, + entity_id, - entity) ++ entity=entity) + else: + if not application_name: + metadata = yaml.load(metadata_path.read_text()) + application_name = metadata['name'] + # We have a local charm dir that needs to be uploaded + charm_dir = os.path.abspath( + os.path.expanduser(entity_id)) + series = series or get_charm_series(charm_dir) + if not series: + raise JujuError( + "Couldn't determine series for charm at {}. " + "Pass a 'series' kwarg to Model.deploy().".format( + charm_dir)) + entity_id = await self.add_local_charm_dir(charm_dir, series) + return await self._deploy( + charm_url=entity_id, + application=application_name, + series=series, + config=config or {}, + constraints=constraints, + endpoint_bindings=bind, + resources=resources, + storage=storage, + channel=channel, + num_units=num_units, - placement=parse_placement(to) ++ placement=parse_placement(to), ++ devices=devices, + ) + - async def _add_store_resources(self, application, entity_url, entity=None): ++ async def _add_store_resources(self, application, entity_url, ++ overrides=None, entity=None): + if not entity: + # avoid extra charm store call if one was already made - entity = await self.charmstore.entity(entity_url) ++ entity = await self.charmstore.entity(entity_url, ++ include_stats=False) + resources = [ + { + 'description': resource['Description'], + 'fingerprint': resource['Fingerprint'], + 'name': resource['Name'], + 'path': resource['Path'], + 'revision': resource['Revision'], + 'size': resource['Size'], + 'type_': resource['Type'], + 'origin': 'store', + } for resource in entity['Meta']['resources'] + ] + ++ if overrides: ++ names = {r['name'] for r in resources} ++ unknown = overrides.keys() - names ++ if unknown: ++ raise JujuError('Unrecognized resource{}: {}'.format( ++ 's' if len(unknown) > 1 else '', ++ ', '.join(unknown))) ++ for resource in resources: ++ if resource['name'] in overrides: ++ resource['revision'] = overrides[resource['name']] ++ + if not resources: + return None + + resources_facade = client.ResourcesFacade.from_connection( + self.connection()) + response = await resources_facade.AddPendingResources( + tag.application(application), + entity_url, + [client.CharmResource(**resource) for resource in resources]) + resource_map = {resource['name']: pid + for resource, pid + in zip(resources, response.pending_ids)} + return resource_map + + async def _deploy(self, charm_url, application, series, config, + constraints, endpoint_bindings, resources, storage, - channel=None, num_units=None, placement=None): ++ channel=None, num_units=None, placement=None, ++ devices=None): + """Logic shared between `Model.deploy` and `BundleHandler.deploy`. + """ + log.info('Deploying %s', charm_url) + + # stringify all config values for API, and convert to YAML + config = {k: str(v) for k, v in config.items()} + config = yaml.dump({application: config}, + default_flow_style=False) + + app_facade = client.ApplicationFacade.from_connection( + self.connection()) + + app = client.ApplicationDeploy( + charm_url=charm_url, + application=application, + series=series, + channel=channel, + config_yaml=config, + constraints=parse_constraints(constraints), + endpoint_bindings=endpoint_bindings, + num_units=num_units, + resources=resources, + storage=storage, - placement=placement ++ placement=placement, ++ devices=devices, + ) + result = await app_facade.Deploy([app]) + errors = [r.error.message for r in result.results if r.error] + if errors: + raise JujuError('\n'.join(errors)) + return await self._wait_for_new('application', application) + + async def destroy(self): + """Terminate all machines and resources for this model. + Is already implemented in controller.py. + """ + raise NotImplementedError() + + async def destroy_unit(self, *unit_names): + """Destroy units by name. + + """ + connection = self.connection() + app_facade = client.ApplicationFacade.from_connection(connection) + + log.debug( + 'Destroying unit%s %s', + 's' if len(unit_names) == 1 else '', + ' '.join(unit_names)) + + return await app_facade.DestroyUnits(list(unit_names)) + destroy_units = destroy_unit + + def get_backup(self, archive_id): + """Download a backup archive file. + + :param str archive_id: The id of the archive to download + :return str: Path to the archive file + + """ + raise NotImplementedError() + + def enable_ha( + self, num_controllers=0, constraints=None, series=None, to=None): + """Ensure sufficient controllers exist to provide redundancy. + + :param int num_controllers: Number of controllers to make available + :param constraints: Constraints to apply to the controller machines + :type constraints: :class:`juju.Constraints` + :param str series: Series of the controller machines + :param list to: Placement directives for controller machines, e.g.:: + + '23' - machine 23 + 'lxc:7' - new lxc container on machine 7 + '24/lxc/3' - lxc container 3 or machine 24 + + If None, a new machine is provisioned. + + """ + raise NotImplementedError() + + async def get_config(self): + """Return the configuration settings for this model. + + :returns: A ``dict`` mapping keys to `ConfigValue` instances, + which have `source` and `value` attributes. + """ + config_facade = client.ModelConfigFacade.from_connection( + self.connection() + ) + result = await config_facade.ModelGet() + config = result.config + for key, value in config.items(): + config[key] = ConfigValue.from_json(value) + return config + + async def get_constraints(self): + """Return the machine constraints for this model. + + :returns: A ``dict`` of constraints. + """ + constraints = {} + client_facade = client.ClientFacade.from_connection(self.connection()) + result = await client_facade.GetModelConstraints() + - # GetModelConstraints returns GetConstraintsResults which has a 'constraints' - # attribute. If no constraints have been set GetConstraintsResults.constraints - # is None. Otherwise GetConstraintsResults.constraints has an attribute for each - # possible constraint, each of these in turn will be None if they have not been ++ # GetModelConstraints returns GetConstraintsResults which has a ++ # 'constraints' attribute. If no constraints have been set ++ # GetConstraintsResults.constraints is None. Otherwise ++ # GetConstraintsResults.constraints has an attribute for each possible ++ # constraint, each of these in turn will be None if they have not been + # set. + if result.constraints: - constraint_types = [a for a in dir(result.constraints) - if a in Value._toSchema.keys()] - for constraint in constraint_types: - value = getattr(result.constraints, constraint) - if value is not None: - constraints[constraint] = getattr(result.constraints, constraint) ++ constraint_types = [a for a in dir(result.constraints) ++ if a in Value._toSchema.keys()] ++ for constraint in constraint_types: ++ value = getattr(result.constraints, constraint) ++ if value is not None: ++ constraints[constraint] = getattr(result.constraints, ++ constraint) + return constraints + + def import_ssh_key(self, identity): + """Add a public SSH key from a trusted indentity source to this model. + + :param str identity: User identity in the form : + + """ + raise NotImplementedError() + import_ssh_keys = import_ssh_key + + async def get_machines(self): + """Return list of machines in this model. + + """ + return list(self.state.machines.keys()) + + def get_shares(self): + """Return list of all users with access to this model. + + """ + raise NotImplementedError() + + def get_spaces(self): + """Return list of all known spaces, including associated subnets. + + """ + raise NotImplementedError() + + async def get_ssh_key(self, raw_ssh=False): + """Return known SSH keys for this model. + :param bool raw_ssh: if True, returns the raw ssh key, + else it's fingerprint + + """ + key_facade = client.KeyManagerFacade.from_connection(self.connection()) + entity = {'tag': tag.model(self.info.uuid)} + entities = client.Entities([entity]) + return await key_facade.ListKeys(entities, raw_ssh) + get_ssh_keys = get_ssh_key + + def get_storage(self, filesystem=False, volume=False): + """Return details of storage instances. + + :param bool filesystem: Include filesystem storage + :param bool volume: Include volume storage + + """ + raise NotImplementedError() + + def get_storage_pools(self, names=None, providers=None): + """Return list of storage pools. + + :param list names: Only include pools with these names + :param list providers: Only include pools for these providers + + """ + raise NotImplementedError() + + def get_subnets(self, space=None, zone=None): + """Return list of known subnets. + + :param str space: Only include subnets in this space + :param str zone: Only include subnets in this zone + + """ + raise NotImplementedError() + + def remove_blocks(self): + """Remove all blocks from this model. + + """ + raise NotImplementedError() + + def remove_backup(self, backup_id): + """Delete a backup. + + :param str backup_id: The id of the backup to remove + + """ + raise NotImplementedError() + + def remove_cached_images(self, arch=None, kind=None, series=None): + """Remove cached OS images. + + :param str arch: Architecture of the images to remove + :param str kind: Image kind to remove, e.g. 'lxd' + :param str series: Image series to remove, e.g. 'xenial' + + """ + raise NotImplementedError() + + def remove_machine(self, *machine_ids): + """Remove a machine from this model. + - :param str \*machine_ids: Ids of the machines to remove ++ :param str *machine_ids: Ids of the machines to remove + + """ + raise NotImplementedError() + remove_machines = remove_machine + + async def remove_ssh_key(self, user, key): + """Remove a public SSH key(s) from this model. + + :param str key: Full ssh key + :param str user: Juju user to which the key is registered + + """ + key_facade = client.KeyManagerFacade.from_connection(self.connection()) + key = base64.b64decode(bytes(key.strip().split()[1].encode('ascii'))) + key = hashlib.md5(key).hexdigest() + key = ':'.join(a + b for a, b in zip(key[::2], key[1::2])) + await key_facade.DeleteKeys([key], user) + remove_ssh_keys = remove_ssh_key + + def restore_backup( + self, bootstrap=False, constraints=None, archive=None, + backup_id=None, upload_tools=False): + """Restore a backup archive to a new controller. + + :param bool bootstrap: Bootstrap a new state machine + :param constraints: Model constraints + :type constraints: :class:`juju.Constraints` + :param str archive: Path to backup archive to restore + :param str backup_id: Id of backup to restore + :param bool upload_tools: Upload tools if bootstrapping a new machine + + """ + raise NotImplementedError() + + def retry_provisioning(self): + """Retry provisioning for failed machines. + + """ + raise NotImplementedError() + + def run(self, command, timeout=None): + """Run command on all machines in this model. + + :param str command: The command to run + :param int timeout: Time to wait before command is considered failed + + """ + raise NotImplementedError() + + async def set_config(self, config): + """Set configuration keys on this model. + + :param dict config: Mapping of config keys to either string values or + `ConfigValue` instances, as returned by `get_config`. + """ + config_facade = client.ModelConfigFacade.from_connection( + self.connection() + ) + for key, value in config.items(): + if isinstance(value, ConfigValue): + config[key] = value.value + await config_facade.ModelSet(config) + + async def set_constraints(self, constraints): + """Set machine constraints on this model. + + :param dict config: Mapping of model constraints + """ + client_facade = client.ClientFacade.from_connection(self.connection()) + await client_facade.SetModelConstraints( + application='', + constraints=constraints) + + async def get_action_output(self, action_uuid, wait=None): + """Get the results of an action by ID. + + :param str action_uuid: Id of the action + :param int wait: Time in seconds to wait for action to complete. + :return dict: Output from action + :raises: :class:`JujuError` if invalid action_uuid + """ + action_facade = client.ActionFacade.from_connection( + self.connection() + ) + entity = [{'tag': tag.action(action_uuid)}] + # Cannot use self.wait_for_action as the action event has probably + # already happened and self.wait_for_action works by processing + # model deltas and checking if they match our type. If the action + # has already occured then the delta has gone. + + async def _wait_for_action_status(): + while True: + action_output = await action_facade.Actions(entity) + if action_output.results[0].status in ('completed', 'failed'): + return + else: + await asyncio.sleep(1) + await asyncio.wait_for( + _wait_for_action_status(), + timeout=wait) + action_output = await action_facade.Actions(entity) + # ActionResult.output is None if the action produced no output + if action_output.results[0].output is None: + output = {} + else: + output = action_output.results[0].output + return output + + async def get_action_status(self, uuid_or_prefix=None, name=None): + """Get the status of all actions, filtered by ID, ID prefix, or name. + + :param str uuid_or_prefix: Filter by action uuid or prefix + :param str name: Filter by action name + + """ + results = {} + action_results = [] + action_facade = client.ActionFacade.from_connection( + self.connection() + ) + if name: + name_results = await action_facade.FindActionsByNames([name]) + action_results.extend(name_results.actions[0].actions) + if uuid_or_prefix: + # Collect list of actions matching uuid or prefix + matching_actions = await action_facade.FindActionTagsByPrefix( + [uuid_or_prefix]) + entities = [] + for actions in matching_actions.matches.values(): + entities = [{'tag': a.tag} for a in actions] + # Get action results matching action tags + uuid_results = await action_facade.Actions(entities) + action_results.extend(uuid_results.results) + for a in action_results: + results[tag.untag('action-', a.action.tag)] = a.status + return results + + def get_budget(self, budget_name): + """Get budget usage info. + + :param str budget_name: Name of budget + + """ + raise NotImplementedError() + + async def get_status(self, filters=None, utc=False): + """Return the status of the model. + + :param str filters: Optional list of applications, units, or machines + to include, which can use wildcards ('*'). + :param bool utc: Display time as UTC in RFC3339 format + + """ + client_facade = client.ClientFacade.from_connection(self.connection()) + return await client_facade.FullStatus(filters) + + def sync_tools( + self, all_=False, destination=None, dry_run=False, public=False, + source=None, stream=None, version=None): + """Copy Juju tools into this model. + + :param bool all_: Copy all versions, not just the latest + :param str destination: Path to local destination directory + :param bool dry_run: Don't do the actual copy + :param bool public: Tools are for a public cloud, so generate mirrors + information + :param str source: Path to local source directory + :param str stream: Simplestreams stream for which to sync metadata + :param str version: Copy a specific major.minor version + + """ + raise NotImplementedError() + + def unblock(self, *commands): + """Unblock an operation that would alter this model. + - :param str \*commands: The commands to unblock. Valid values are ++ :param str *commands: The commands to unblock. Valid values are + 'all-changes', 'destroy-model', 'remove-object' + + """ + raise NotImplementedError() + + def unset_config(self, *keys): + """Unset configuration on this model. + - :param str \*keys: The keys to unset ++ :param str *keys: The keys to unset + + """ + raise NotImplementedError() + + def upgrade_gui(self): + """Upgrade the Juju GUI for this model. + + """ + raise NotImplementedError() + + def upgrade_juju( + self, dry_run=False, reset_previous_upgrade=False, + upload_tools=False, version=None): + """Upgrade Juju on all machines in a model. + + :param bool dry_run: Don't do the actual upgrade + :param bool reset_previous_upgrade: Clear the previous (incomplete) + upgrade status + :param bool upload_tools: Upload local version of tools + :param str version: Upgrade to a specific version + + """ + raise NotImplementedError() + + def upload_backup(self, archive_path): + """Store a backup archive remotely in Juju. + + :param str archive_path: Path to local archive + + """ + raise NotImplementedError() + + @property + def charmstore(self): + return self._charmstore + + async def get_metrics(self, *tags): + """Retrieve metrics. + - :param str \*tags: Tags of entities from which to retrieve metrics. ++ :param str *tags: Tags of entities from which to retrieve metrics. + No tags retrieves the metrics of all units in the model. + :return: Dictionary of unit_name:metrics + + """ + log.debug("Retrieving metrics for %s", + ', '.join(tags) if tags else "all units") + + metrics_facade = client.MetricsDebugFacade.from_connection( + self.connection()) + + entities = [client.Entity(tag) for tag in tags] + metrics_result = await metrics_facade.GetMetrics(entities) + + metrics = collections.defaultdict(list) + + for entity_metrics in metrics_result.results: + error = entity_metrics.error + if error: + if "is not a valid tag" in error: + raise ValueError(error.message) + else: + raise Exception(error.message) + + for metric in entity_metrics.metrics: + metrics[metric.unit].append(vars(metric)) + + return metrics + + +def get_charm_series(path): + """Inspects the charm directory at ``path`` and returns a default + series from its metadata.yaml (the first item in the 'series' list). + + Returns None if no series can be determined. + + """ + md = Path(path) / "metadata.yaml" + if not md.exists(): + return None + data = yaml.load(md.open()) + series = data.get('series') + return series[0] if series else None + + +class BundleHandler: + """ + Handle bundles by using the API to translate bundle YAML into a plan of + steps and then dispatching each of those using the API. + """ + def __init__(self, model): + self.model = model + self.charmstore = model.charmstore + self.plan = [] + self.references = {} + self._units_by_app = {} + for unit_name, unit in model.units.items(): + app_units = self._units_by_app.setdefault(unit.application, []) + app_units.append(unit_name) ++ self.bundle_facade = client.BundleFacade.from_connection( ++ model.connection()) + self.client_facade = client.ClientFacade.from_connection( + model.connection()) + self.app_facade = client.ApplicationFacade.from_connection( + model.connection()) + self.ann_facade = client.AnnotationsFacade.from_connection( + model.connection()) + + async def _handle_local_charms(self, bundle): + """Search for references to local charms (i.e. filesystem paths) + in the bundle. Upload the local charms to the model, and replace + the filesystem paths with appropriate 'local:' paths in the bundle. + + Return the modified bundle. + + :param dict bundle: Bundle dictionary + :return: Modified bundle dictionary + + """ + apps, args = [], [] + + default_series = bundle.get('series') + apps_dict = bundle.get('applications', bundle.get('services', {})) + for app_name in self.applications: + app_dict = apps_dict[app_name] + charm_dir = os.path.abspath(os.path.expanduser(app_dict['charm'])) + if not os.path.isdir(charm_dir): + continue + series = ( + app_dict.get('series') or + default_series or + get_charm_series(charm_dir) + ) + if not series: + raise JujuError( + "Couldn't determine series for charm at {}. " + "Add a 'series' key to the bundle.".format(charm_dir)) + + # Keep track of what we need to update. We keep a list of apps + # that need to be updated, and a corresponding list of args + # needed to update those apps. + apps.append(app_name) + args.append((charm_dir, series)) + + if apps: + # If we have apps to update, spawn all the coroutines concurrently + # and wait for them to finish. + charm_urls = await asyncio.gather(*[ + self.model.add_local_charm_dir(*params) + for params in args + ], loop=self.model.loop) + # Update the 'charm:' entry for each app with the new 'local:' url. + for app_name, charm_url in zip(apps, charm_urls): + apps_dict[app_name]['charm'] = charm_url + + return bundle + + async def fetch_plan(self, entity_id): - is_local = not entity_id.startswith('cs:') ++ is_store_url = entity_id.startswith('cs:') + - if is_local and os.path.isfile(entity_id): ++ if not is_store_url and os.path.isfile(entity_id): + bundle_yaml = Path(entity_id).read_text() - elif is_local and os.path.isdir(entity_id): ++ elif not is_store_url and os.path.isdir(entity_id): + bundle_yaml = (Path(entity_id) / "bundle.yaml").read_text() + else: + bundle_yaml = await self.charmstore.files(entity_id, + filename='bundle.yaml', + read_file=True) + self.bundle = yaml.safe_load(bundle_yaml) + self.bundle = await self._handle_local_charms(self.bundle) + - self.plan = await self.client_facade.GetBundleChanges( ++ self.plan = await self.bundle_facade.GetChanges( + yaml.dump(self.bundle)) + + if self.plan.errors: + raise JujuError(self.plan.errors) + + async def execute_plan(self): + for step in self.plan.changes: + method = getattr(self, step.method) + result = await method(*step.args) + self.references[step.id_] = result + + @property + def applications(self): + apps_dict = self.bundle.get('applications', + self.bundle.get('services', {})) + return list(apps_dict.keys()) + + def resolve(self, reference): + if reference and reference.startswith('$'): + reference = self.references[reference[1:]] + return reference + + async def addCharm(self, charm, series): + """ + :param charm string: + Charm holds the URL of the charm to be added. + + :param series string: + Series holds the series of the charm to be added + if the charm default is not sufficient. + """ + # We don't add local charms because they've already been added + # by self._handle_local_charms + if charm.startswith('local:'): + return charm + + entity_id = await self.charmstore.entityId(charm) + log.debug('Adding %s', entity_id) + await self.client_facade.AddCharm(None, entity_id) + return entity_id + + async def addMachines(self, params=None): + """ + :param params dict: + Dictionary specifying the machine to add. All keys are optional. + Keys include: + + series: string specifying the machine OS series. + + constraints: string holding machine constraints, if any. We'll + parse this into the json friendly dict that the juju api + expects. + + container_type: string holding the type of the container (for + instance ""lxd" or kvm"). It is not specified for top level + machines. + + parent_id: string holding a placeholder pointing to another + machine change or to a unit change. This value is only + specified in the case this machine is a container, in + which case also ContainerType is set. + + """ + params = params or {} + + # Normalize keys + params = {normalize_key(k): params[k] for k in params.keys()} + + # Fix up values, as necessary. + if 'parent_id' in params: + if params['parent_id'].startswith('$addUnit'): + unit = self.resolve(params['parent_id'])[0] + params['parent_id'] = unit.machine.entity_id + else: + params['parent_id'] = self.resolve(params['parent_id']) + + params['constraints'] = parse_constraints( + params.get('constraints')) + params['jobs'] = params.get('jobs', ['JobHostUnits']) + + if params.get('container_type') == 'lxc': + log.warning('Juju 2.0 does not support lxc containers. ' + 'Converting containers to lxd.') + params['container_type'] = 'lxd' + + # Submit the request. + params = client.AddMachineParams(**params) + results = await self.client_facade.AddMachines([params]) + error = results.machines[0].error + if error: + raise ValueError("Error adding machine: %s" % error.message) + machine = results.machines[0].machine + log.debug('Added new machine %s', machine) + return machine + + async def addRelation(self, endpoint1, endpoint2): + """ + :param endpoint1 string: + :param endpoint2 string: + Endpoint1 and Endpoint2 hold relation endpoints in the + "application:interface" form, where the application is always a + placeholder pointing to an application change, and the interface is + optional. Examples are "$deploy-42:web" or just "$deploy-42". + """ + endpoints = [endpoint1, endpoint2] + # resolve indirect references + for i in range(len(endpoints)): + parts = endpoints[i].split(':') + parts[0] = self.resolve(parts[0]) + endpoints[i] = ':'.join(parts) + + log.info('Relating %s <-> %s', *endpoints) + return await self.model.add_relation(*endpoints) + + async def deploy(self, charm, series, application, options, constraints, - storage, endpoint_bindings, resources): ++ storage, endpoint_bindings, *args): + """ + :param charm string: + Charm holds the URL of the charm to be used to deploy this + application. + + :param series string: + Series holds the series of the application to be deployed + if the charm default is not sufficient. + + :param application string: + Application holds the application name. + + :param options map[string]interface{}: + Options holds application options. + + :param constraints string: + Constraints holds the optional application constraints. + + :param storage map[string]string: + Storage holds the optional storage constraints. + + :param endpoint_bindings map[string]string: + EndpointBindings holds the optional endpoint bindings + ++ :param devices map[string]string: ++ Devices holds the optional devices constraints. ++ (Only given on Juju 2.5+) ++ + :param resources map[string]int: + Resources identifies the revision to use for each resource + of the application's charm. ++ ++ :param num_units int: ++ NumUnits holds the number of units required. For IAAS models, this ++ will be 0 and separate AddUnitChanges will be used. For Kubernetes ++ models, this will be used to scale the application. ++ (Only given on Juju 2.5+) + """ + # resolve indirect references + charm = self.resolve(charm) - # the bundle plan doesn't actually do anything with resources, even - # though it ostensibly gives us something (None) for that param ++ ++ if len(args) == 1: ++ # Juju 2.4 and below only sends the resources ++ resources = args[0] ++ devices, num_units = None, None ++ else: ++ # Juju 2.5+ sends devices before resources, as well as num_units ++ # There might be placement but we need to ignore that. ++ devices, resources, num_units = args[:3] ++ + if not charm.startswith('local:'): - resources = await self.model._add_store_resources(application, - charm) ++ resources = await self.model._add_store_resources( ++ application, charm, overrides=resources) + await self.model._deploy( + charm_url=charm, + application=application, + series=series, + config=options, + constraints=constraints, + endpoint_bindings=endpoint_bindings, + resources=resources, + storage=storage, ++ devices=devices, ++ num_units=num_units, + ) + return application + + async def addUnit(self, application, to): + """ + :param application string: + Application holds the application placeholder name for which a unit + is added. + + :param to string: + To holds the optional location where to add the unit, as a + placeholder pointing to another unit change or to a machine change. + """ + application = self.resolve(application) + placement = self.resolve(to) + if self._units_by_app.get(application): + # enough units for this application already exist; + # claim one, and carry on + # NB: this should probably honor placement, but the juju client + # doesn't, so we're not bothering, either + unit_name = self._units_by_app[application].pop() + log.debug('Reusing unit %s for %s', unit_name, application) + return self.model.units[unit_name] + + log.debug('Adding new unit for %s%s', application, + ' to %s' % placement if placement else '') + return await self.model.applications[application].add_unit( + count=1, + to=placement, + ) + ++ async def scale(self, application, scale): ++ """ ++ Handle a change of scale to a k8s application. ++ ++ :param string application: ++ Application holds the application placeholder name for which a unit ++ is added. ++ ++ :param int scale: ++ New scale value to use. ++ """ ++ application = self.resolve(application) ++ return await self.model.applications[application].scale(scale=scale) ++ + async def expose(self, application): + """ + :param application string: + Application holds the placeholder name of the application that must + be exposed. + """ + application = self.resolve(application) + log.info('Exposing %s', application) + return await self.model.applications[application].expose() + + async def setAnnotations(self, id_, entity_type, annotations): + """ + :param id_ string: + Id is the placeholder for the application or machine change + corresponding to the entity to be annotated. + + :param entity_type EntityType: + EntityType holds the type of the entity, "application" or + "machine". + + :param annotations map[string]string: + Annotations holds the annotations as key/value pairs. + """ + entity_id = self.resolve(id_) + try: + entity = self.model.state.get_entity(entity_type, entity_id) + except KeyError: + entity = await self.model._wait_for_new(entity_type, entity_id) + return await entity.set_annotations(annotations) + + +class CharmStore: + """ + Async wrapper around theblues.charmstore.CharmStore + """ - def __init__(self, loop): ++ def __init__(self, loop, cs_timeout=20): + self.loop = loop - self._cs = theblues.charmstore.CharmStore(timeout=5) ++ self._cs = theblues.charmstore.CharmStore(timeout=cs_timeout) + + def __getattr__(self, name): + """ + Wrap method calls in coroutines that use run_in_executor to make them + async. + """ + attr = getattr(self._cs, name) + if not callable(attr): + wrapper = partial(getattr, self._cs, name) + setattr(self, name, wrapper) + else: + async def coro(*args, **kwargs): + method = partial(attr, *args, **kwargs) + for attempt in range(1, 4): + try: + return await self.loop.run_in_executor(None, method) + except theblues.errors.ServerError: + if attempt == 3: + raise + await asyncio.sleep(1, loop=self.loop) + setattr(self, name, coro) + wrapper = coro + return wrapper + + +class CharmArchiveGenerator: + """ + Create a Zip archive of a local charm directory for upload to a controller. + + This is used automatically by + `Model.add_local_charm_dir <#juju.model.Model.add_local_charm_dir>`_. + """ + def __init__(self, path): + self.path = os.path.abspath(os.path.expanduser(path)) + + def make_archive(self, path): + """Create archive of directory and write to ``path``. + + :param path: Path to archive + + Ignored:: + - * build/\* - This is used for packing the charm itself and any ++ * build/* - This is used for packing the charm itself and any + similar tasks. - * \*/.\* - Hidden files are all ignored for now. This will most ++ * */.* - Hidden files are all ignored for now. This will most + likely be changed into a specific ignore list + (.bzr, etc) + + """ + zf = zipfile.ZipFile(path, 'w', zipfile.ZIP_DEFLATED) + for dirpath, dirnames, filenames in os.walk(self.path): + relative_path = dirpath[len(self.path) + 1:] + if relative_path and not self._ignore(relative_path): + zf.write(dirpath, relative_path) + for name in filenames: + archive_name = os.path.join(relative_path, name) + if not self._ignore(archive_name): + real_path = os.path.join(dirpath, name) + self._check_type(real_path) + if os.path.islink(real_path): + self._check_link(real_path) + self._write_symlink( + zf, os.readlink(real_path), archive_name) + else: + zf.write(real_path, archive_name) + zf.close() + return path + + def _check_type(self, path): + """Check the path + """ + s = os.stat(path) + if stat.S_ISDIR(s.st_mode) or stat.S_ISREG(s.st_mode): + return path + raise ValueError("Invalid Charm at % %s" % ( + path, "Invalid file type for a charm")) + + def _check_link(self, path): + link_path = os.readlink(path) + if link_path[0] == "/": + raise ValueError( + "Invalid Charm at %s: %s" % ( + path, "Absolute links are invalid")) + path_dir = os.path.dirname(path) + link_path = os.path.join(path_dir, link_path) + if not link_path.startswith(os.path.abspath(self.path)): + raise ValueError( + "Invalid charm at %s %s" % ( + path, "Only internal symlinks are allowed")) + + def _write_symlink(self, zf, link_target, link_path): + """Package symlinks with appropriate zipfile metadata.""" + info = zipfile.ZipInfo() + info.filename = link_path + info.create_system = 3 + # Magic code for symlinks / py2/3 compat + # 27166663808 = (stat.S_IFLNK | 0755) << 16 + info.external_attr = 2716663808 + zf.writestr(info, link_target) + + def _ignore(self, path): + if path == "build" or path.startswith("build/"): + return True + if path.startswith('.'): + return True diff --cc modules/libjuju/juju/provisioner.py index 91747a4,0000000..2886574 mode 100644,000000..100644 --- a/modules/libjuju/juju/provisioner.py +++ b/modules/libjuju/juju/provisioner.py @@@ -1,365 -1,0 +1,365 @@@ +from .client import client + +import paramiko +import os +import re +import tempfile +import shlex +from subprocess import ( + CalledProcessError, +) +import uuid + + +arches = [ - [re.compile("amd64|x86_64"), "amd64"], - [re.compile("i?[3-9]86"), "i386"], - [re.compile("(arm$)|(armv.*)"), "armhf"], - [re.compile("aarch64"), "arm64"], - [re.compile("ppc64|ppc64el|ppc64le"), "ppc64el"], - [re.compile("ppc64|ppc64el|ppc64le"), "s390x"], - ++ [re.compile(r"amd64|x86_64"), "amd64"], ++ [re.compile(r"i?[3-9]86"), "i386"], ++ [re.compile(r"(arm$)|(armv.*)"), "armhf"], ++ [re.compile(r"aarch64"), "arm64"], ++ [re.compile(r"ppc64|ppc64el|ppc64le"), "ppc64el"], ++ [re.compile(r"s390x?"), "s390x"], +] + + +def normalize_arch(rawArch): + """Normalize the architecture string.""" + for arch in arches: + if arch[0].match(rawArch): + return arch[1] + + +DETECTION_SCRIPT = """#!/bin/bash +set -e +os_id=$(grep '^ID=' /etc/os-release | tr -d '"' | cut -d= -f2) +if [ "$os_id" = 'centos' ]; then + os_version=$(grep '^VERSION_ID=' /etc/os-release | tr -d '"' | cut -d= -f2) + echo "centos$os_version" +else + lsb_release -cs +fi +uname -m +grep MemTotal /proc/meminfo +cat /proc/cpuinfo +""" + +INITIALIZE_UBUNTU_SCRIPT = """set -e +(id ubuntu &> /dev/null) || useradd -m ubuntu -s /bin/bash +umask 0077 +temp=$(mktemp) +echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > $temp +install -m 0440 $temp /etc/sudoers.d/90-juju-ubuntu +rm $temp +su ubuntu -c 'install -D -m 0600 /dev/null ~/.ssh/authorized_keys' +export authorized_keys="{}" +if [ ! -z "$authorized_keys" ]; then + su ubuntu -c 'echo $authorized_keys >> ~/.ssh/authorized_keys' +fi +""" + + +class SSHProvisioner: + """Provision a manually created machine via SSH.""" + user = "" + host = "" + private_key_path = "" + + def __init__(self, user, host, private_key_path): + self.host = host + self.user = user + self.private_key_path = private_key_path + + def _get_ssh_client(self, host, user, key): + """Return a connected Paramiko ssh object. + + :param str host: The host to connect to. + :param str user: The user to connect as. + :param str key: The private key to authenticate with. + + :return: object: A paramiko.SSHClient + :raises: :class:`paramiko.ssh_exception.SSHException` if the + connection failed + """ + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + + pkey = None + + # Read the private key into a paramiko.RSAKey + if os.path.exists(key): + with open(key, 'r') as f: + pkey = paramiko.RSAKey.from_private_key(f) + + ####################################################################### + # There is a bug in some versions of OpenSSH 4.3 (CentOS/RHEL5) where # + # the server may not send the SSH_MSG_USERAUTH_BANNER message except # + # when responding to an auth_none request. For example, paramiko will # + # attempt to use password authentication when a password is set, but # + # the server could deny that, instead requesting keyboard-interactive.# + # The hack to workaround this is to attempt a reconnect, which will # + # receive the right banner, and authentication can proceed. See the # + # following for more info: # + # https://github.com/paramiko/paramiko/issues/432 # + # https://github.com/paramiko/paramiko/pull/438 # + ####################################################################### + + try: + ssh.connect(host, port=22, username=user, pkey=pkey) + except paramiko.ssh_exception.SSHException as e: + if 'Error reading SSH protocol banner' == str(e): + # Once more, with feeling + ssh.connect(host, port=22, username=user, pkey=pkey) + else: + # Reraise the original exception + raise e + + return ssh + + def _run_command(self, ssh, cmd, pty=True): + """Run a command remotely via SSH. + + :param object ssh: The SSHClient + :param str cmd: The command to execute + :param list cmd: The `shlex.split` command to execute + :param bool pty: Whether to allocate a pty + + :return: tuple: The stdout and stderr of the command execution + :raises: :class:`CalledProcessError` if the command fails + """ + + if isinstance(cmd, str): + cmd = shlex.split(cmd) + + if type(cmd) is not list: + cmd = [cmd] + + cmds = ' '.join(cmd) + stdin, stdout, stderr = ssh.exec_command(cmds, get_pty=pty) + retcode = stdout.channel.recv_exit_status() + + if retcode > 0: + output = stderr.read().strip() + raise CalledProcessError(returncode=retcode, cmd=cmd, + output=output) + return ( + stdout.read().decode('utf-8').strip(), + stderr.read().decode('utf-8').strip() + ) + + def _init_ubuntu_user(self): + """Initialize the ubuntu user. + + :return: bool: If the initialization was successful + :raises: :class:`paramiko.ssh_exception.AuthenticationException` + if the authentication fails + """ + + # TODO: Test this on an image without the ubuntu user setup. + + auth_user = self.user ++ ssh = None + try: + # Run w/o allocating a pty, so we fail if sudo prompts for a passwd + ssh = self._get_ssh_client( + self.host, + "ubuntu", + self.private_key_path, + ) + + stdout, stderr = self._run_command(ssh, "sudo -n true", pty=False) + except paramiko.ssh_exception.AuthenticationException as e: + raise e + else: + auth_user = "ubuntu" + finally: + if ssh: + ssh.close() + + # if the above fails, run the init script as the authenticated user + + # Infer the public key + public_key = None + public_key_path = "{}.pub".format(self.private_key_path) + + if not os.path.exists(public_key_path): + raise FileNotFoundError( + "Public key '{}' doesn't exist.".format(public_key_path) + ) + + with open(public_key_path, "r") as f: + public_key = f.readline() + + script = INITIALIZE_UBUNTU_SCRIPT.format(public_key) + + try: + ssh = self._get_ssh_client( + self.host, + auth_user, + self.private_key_path, + ) + + self._run_command( + ssh, + ["sudo", "/bin/bash -c " + shlex.quote(script)], + pty=True + ) + except paramiko.ssh_exception.AuthenticationException as e: + raise e + finally: + ssh.close() + + return True + + def _detect_hardware_and_os(self, ssh): + """Detect the target hardware capabilities and OS series. + + :param object ssh: The SSHClient + :return: str: A raw string containing OS and hardware information. + """ + + info = { + 'series': '', + 'arch': '', + 'cpu-cores': '', + 'mem': '', + } + + stdout, stderr = self._run_command( + ssh, + ["sudo", "/bin/bash -c " + shlex.quote(DETECTION_SCRIPT)], + pty=True, + ) + + lines = stdout.split("\n") + info['series'] = lines[0].strip() + info['arch'] = normalize_arch(lines[1].strip()) + - memKb = re.split('\s+', lines[2])[1] ++ memKb = re.split(r'\s+', lines[2])[1] + + # Convert megabytes -> kilobytes + info['mem'] = round(int(memKb) / 1024) + + # Detect available CPUs + recorded = {} + for line in lines[3:]: + physical_id = "" + print(line) + + if line.find("physical id") == 0: + physical_id = line.split(":")[1].strip() + elif line.find("cpu cores") == 0: + cores = line.split(":")[1].strip() + + if physical_id not in recorded.keys(): - info['cpu-cores'] += cores - recorded[physical_id] = True ++ info['cpu-cores'] += cores ++ recorded[physical_id] = True + + return info + + def provision_machine(self): + """Perform the initial provisioning of the target machine. + + :return: bool: The client.AddMachineParams + :raises: :class:`paramiko.ssh_exception.AuthenticationException` + if the upload fails + """ + params = client.AddMachineParams() + + if self._init_ubuntu_user(): + try: + + ssh = self._get_ssh_client( + self.host, + self.user, + self.private_key_path + ) + + hw = self._detect_hardware_and_os(ssh) + params.series = hw['series'] + params.instance_id = "manual:{}".format(self.host) + params.nonce = "manual:{}:{}".format( + self.host, + str(uuid.uuid4()), # a nop for Juju w/manual machines + ) + params.hardware_characteristics = { + 'arch': hw['arch'], + 'mem': int(hw['mem']), + 'cpu-cores': int(hw['cpu-cores']), + } + params.addresses = [{ + 'value': self.host, + 'type': 'ipv4', + 'scope': 'public', + }] + + except paramiko.ssh_exception.AuthenticationException as e: + raise e + finally: + ssh.close() + + return params + + async def install_agent(self, connection, nonce, machine_id): + """ + :param object connection: Connection to Juju API + :param str nonce: The nonce machine specification + :param str machine_id: The id assigned to the machine + + :return: bool: If the initialization was successful + """ + + # The path where the Juju agent should be installed. + data_dir = "/var/lib/juju" + + # Disabling this prevents `apt-get update` from running initially, so + # charms will fail to deploy + disable_package_commands = False + + client_facade = client.ClientFacade.from_connection(connection) + results = await client_facade.ProvisioningScript( + data_dir, + disable_package_commands, + machine_id, + nonce, + ) + + self._run_configure_script(results.script) + + def _run_configure_script(self, script): + """Run the script to install the Juju agent on the target machine. + + :param str script: The script returned by the ProvisioningScript API + :raises: :class:`paramiko.ssh_exception.AuthenticationException` + if the upload fails + """ + + _, tmpFile = tempfile.mkstemp() + with open(tmpFile, 'w') as f: + f.write(script) + + try: + # get ssh client + ssh = self._get_ssh_client( + self.host, + "ubuntu", + self.private_key_path, + ) + + # copy the local copy of the script to the remote machine + sftp = paramiko.SFTPClient.from_transport(ssh.get_transport()) + sftp.put( + tmpFile, + tmpFile, + ) + + # run the provisioning script + stdout, stderr = self._run_command( + ssh, + "sudo /bin/bash {}".format(tmpFile), + ) + + except paramiko.ssh_exception.AuthenticationException as e: + raise e + finally: + os.remove(tmpFile) + ssh.close() diff --cc modules/libjuju/juju/unit.py index 3be27f2,0000000..e8ecd96 mode 100644,000000..100644 --- a/modules/libjuju/juju/unit.py +++ b/modules/libjuju/juju/unit.py @@@ -1,278 -1,0 +1,281 @@@ +import logging + +import pyrfc3339 + +from . import model +from .client import client + +log = logging.getLogger(__name__) + + +class Unit(model.ModelEntity): + @property + def agent_status(self): + """Returns the current agent status string. + + """ + return self.safe_data['agent-status']['current'] + + @property + def agent_status_since(self): + """Get the time when the `agent_status` was last updated. + + """ + return pyrfc3339.parse(self.safe_data['agent-status']['since']) + + @property + def agent_status_message(self): + """Get the agent status message. + + """ + return self.safe_data['agent-status']['message'] + + @property + def workload_status(self): + """Returns the current workload status string. + + """ + return self.safe_data['workload-status']['current'] + + @property + def workload_status_since(self): + """Get the time when the `workload_status` was last updated. + + """ + return pyrfc3339.parse(self.safe_data['workload-status']['since']) + + @property + def workload_status_message(self): + """Get the workload status message. + + """ + return self.safe_data['workload-status']['message'] + + @property + def machine(self): + """Get the machine object for this unit. + + """ + machine_id = self.safe_data['machine-id'] + if machine_id: + return self.model.machines.get(machine_id, None) + else: + return None + + @property + def public_address(self): + """ Get the public address. + + """ + return self.safe_data['public-address'] or None + + @property + def tag(self): + return 'unit-%s' % self.name.replace('/', '-') + + def add_storage(self, name, constraints=None): + """Add unit storage dynamically. + + :param str name: Storage name, as specified by the charm + :param str constraints: Comma-separated list of constraints in the + form 'POOL,COUNT,SIZE' + + """ + raise NotImplementedError() + + def collect_metrics(self): + """Collect metrics on this unit. + + """ + raise NotImplementedError() + + async def destroy(self): + """Destroy this unit. + + """ + app_facade = client.ApplicationFacade.from_connection(self.connection) + + log.debug( + 'Destroying %s', self.name) + + return await app_facade.DestroyUnits([self.name]) + remove = destroy + + def get_resources(self, details=False): + """Return resources for this unit. + + :param bool details: Include detailed info about resources used by each + unit + + """ + raise NotImplementedError() + + def resolved(self, retry=False): + """Mark unit errors resolved. + + :param bool retry: Re-execute failed hooks + + """ + raise NotImplementedError() + + async def run(self, command, timeout=None): + """Run command on this unit. + + :param str command: The command to run - :param int timeout: Time, in seconds, to wait before command is considered failed ++ :param int timeout: Time, in seconds, to wait before command is ++ considered failed + :returns: A :class:`juju.action.Action` instance. + + """ + action = client.ActionFacade.from_connection(self.connection) + + log.debug( + 'Running `%s` on %s', command, self.name) + + if timeout: + # Convert seconds to nanoseconds + timeout = int(timeout * 1000000000) + + res = await action.Run( + [], + command, + [], + timeout, + [self.name], + ) + return await self.model.wait_for_action(res.results[0].action.tag) + + async def run_action(self, action_name, **params): + """Run an action on this unit. + + :param str action_name: Name of action to run - :param \*\*params: Action parameters ++ :param **params: Action parameters + :returns: A :class:`juju.action.Action` instance. + + Note that this only enqueues the action. You will need to call + ``action.wait()`` on the resulting `Action` instance if you wish + to block until the action is complete. + + """ + action_facade = client.ActionFacade.from_connection(self.connection) + + log.debug('Starting action `%s` on %s', action_name, self.name) + + res = await action_facade.Enqueue([client.Action( + name=action_name, + parameters=params, + receiver=self.tag, + )]) + action = res.results[0].action + error = res.results[0].error + if error and error.code == 'not found': + raise ValueError('Action `%s` not found on %s' % (action_name, + self.name)) + elif error: + raise Exception('Unknown action error: %s' % error.serialize()) + action_id = action.tag[len('action-'):] + log.debug('Action started as %s', action_id) + # we mustn't use wait_for_action because that blocks until the + # action is complete, rather than just being in the model + return await self.model._wait_for_new('action', action_id) + + async def scp_to(self, source, destination, user='ubuntu', proxy=False, + scp_opts=''): + """Transfer files to this unit. + + :param str source: Local path of file(s) to transfer + :param str destination: Remote destination of transferred files + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server - :param str scp_opts: Additional options to the `scp` command ++ :param scp_opts: Additional options to the `scp` command ++ :type scp_opts: str or list + """ + await self.machine.scp_to(source, destination, user=user, proxy=proxy, + scp_opts=scp_opts) + + async def scp_from(self, source, destination, user='ubuntu', proxy=False, + scp_opts=''): + """Transfer files from this unit. + + :param str source: Remote path of file(s) to transfer + :param str destination: Local destination of transferred files + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server - :param str scp_opts: Additional options to the `scp` command ++ :param scp_opts: Additional options to the `scp` command ++ :type scp_opts: str or list + """ + await self.machine.scp_from(source, destination, user=user, + proxy=proxy, scp_opts=scp_opts) + + def set_meter_status(self): + """Set the meter status on this unit. + + """ + raise NotImplementedError() + + def ssh( + self, command, user=None, proxy=False, ssh_opts=None): + """Execute a command over SSH on this unit. + + :param str command: Command to execute + :param str user: Remote username + :param bool proxy: Proxy through the Juju API server + :param str ssh_opts: Additional options to the `ssh` command + + """ + raise NotImplementedError() + + def status_history(self, num=20, utc=False): + """Get status history for this unit. + + :param int num: Size of history backlog + :param bool utc: Display time as UTC in RFC3339 format + + """ + raise NotImplementedError() + + async def is_leader_from_status(self): + """ + Check to see if this unit is the leader. Returns True if so, and + False if it is not, or if leadership does not make sense + (e.g., there is no leader in this application.) + + This method is a kluge that calls FullStatus in the + ClientFacade to get its information. Once + https://bugs.launchpad.net/juju/+bug/1643691 is resolved, we + should add a simple .is_leader property, and deprecate this + method. + + """ + app = self.name.split("/")[0] + + c = client.ClientFacade.from_connection(self.connection) + + status = await c.FullStatus(None) + + # FullStatus may be more up to date than our model, and the + # unit may have gone away, or we may be doing something silly, + # like trying to fetch leadership for a subordinate, which + # will not be filed where we expect in the model. In those + # cases, we may simply return False, as a nonexistent or + # subordinate unit is not a leader. + if not status.applications.get(app): + return False + + if not status.applications[app].get('units'): + return False + + if not status.applications[app]['units'].get(self.name): + return False + + return status.applications[app]['units'][self.name].get('leader', + False) + + async def get_metrics(self): + """Get metrics for the unit. + + :return: Dictionary of metrics for this unit. + + """ + metrics = await self.model.get_metrics(self.tag) + return metrics[self.name] diff --cc modules/libjuju/juju/user.py index 01710d7,0000000..389d210 mode 100644,000000..100644 --- a/modules/libjuju/juju/user.py +++ b/modules/libjuju/juju/user.py @@@ -1,81 -1,0 +1,86 @@@ +import logging + +import pyrfc3339 + +from . import tag + +log = logging.getLogger(__name__) + + +class User(object): - def __init__(self, controller, user_info): ++ def __init__(self, controller, user_info, secret_key=None): + self.controller = controller + self._user_info = user_info ++ self._secret_key = secret_key + + @property + def tag(self): + return tag.user(self.username) + + @property + def username(self): + return self._user_info.username + + @property + def display_name(self): + return self._user_info.display_name + + @property + def last_connection(self): + return pyrfc3339.parse(self._user_info.last_connection) + + @property + def access(self): + return self._user_info.access + + @property + def date_created(self): + return self._user_info.date_created + + @property + def enabled(self): + return not self._user_info.disabled + + @property + def disabled(self): + return self._user_info.disabled + + @property + def created_by(self): + return self._user_info.created_by + ++ @property ++ def secret_key(self): ++ return self._secret_key ++ + async def set_password(self, password): + """Update this user's password. + """ + await self.controller.change_user_password(self.username, password) + self._user_info.password = password + + async def grant(self, acl='login'): + """Set access level of this user on the controller. + + :param str acl: Access control ('login', 'add-model', or 'superuser') + """ + if await self.controller.grant(self.username, acl): + self._user_info.access = acl + + async def revoke(self): + """Removes all access rights for this user from the controller. + """ + await self.controller.revoke(self.username) + self._user_info.access = '' + + async def disable(self): + """Disable this user. + """ + await self.controller.disable_user(self.username) + self._user_info.disabled = True + + async def enable(self): + """Re-enable this user. + """ + await self.controller.enable_user(self.username) + self._user_info.disabled = False diff --cc modules/libjuju/juju/utils.py index 3565fd6,0000000..1038ed1 mode 100644,000000..100644 --- a/modules/libjuju/juju/utils.py +++ b/modules/libjuju/juju/utils.py @@@ -1,113 -1,0 +1,165 @@@ +import asyncio +import os +from collections import defaultdict +from functools import partial +from pathlib import Path ++import base64 ++from pyasn1.type import univ, char ++from pyasn1.codec.der.encoder import encode + + +async def execute_process(*cmd, log=None, loop=None): + ''' + Wrapper around asyncio.create_subprocess_exec. + + ''' + p = await asyncio.create_subprocess_exec( + *cmd, + stdin=asyncio.subprocess.PIPE, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + loop=loop) + stdout, stderr = await p.communicate() + if log: + log.debug("Exec %s -> %d", cmd, p.returncode) + if stdout: + log.debug(stdout.decode('utf-8')) + if stderr: + log.debug(stderr.decode('utf-8')) + return p.returncode == 0 + + +def _read_ssh_key(): + ''' + Inner function for read_ssh_key, suitable for passing to our + Executor. + + ''' + default_data_dir = Path(Path.home(), ".local", "share", "juju") + juju_data = os.environ.get("JUJU_DATA", default_data_dir) + ssh_key_path = Path(juju_data, 'ssh', 'juju_id_rsa.pub') + with ssh_key_path.open('r') as ssh_key_file: + ssh_key = ssh_key_file.readlines()[0].strip() + return ssh_key + + +async def read_ssh_key(loop): + ''' + Attempt to read the local juju admin's public ssh key, so that it + can be passed on to a model. + + ''' + loop = loop or asyncio.get_event_loop() + return await loop.run_in_executor(None, _read_ssh_key) + + +class IdQueue: + """ + Wrapper around asyncio.Queue that maintains a separate queue for each ID. + """ + def __init__(self, maxsize=0, *, loop=None): + self._queues = defaultdict(partial(asyncio.Queue, maxsize, loop=loop)) + + async def get(self, id): + value = await self._queues[id].get() + del self._queues[id] + if isinstance(value, Exception): + raise value + return value + + async def put(self, id, value): + await self._queues[id].put(value) + + async def put_all(self, value): + for queue in self._queues.values(): + await queue.put(value) + + +async def block_until(*conditions, timeout=None, wait_period=0.5, loop=None): + """Return only after all conditions are true. + + """ + async def _block(): + while not all(c() for c in conditions): + await asyncio.sleep(wait_period, loop=loop) + await asyncio.wait_for(_block(), timeout, loop=loop) + + - async def run_with_interrupt(task, event, loop=None): ++async def run_with_interrupt(task, *events, loop=None): + """ - Awaits a task while allowing it to be interrupted by an `asyncio.Event`. ++ Awaits a task while allowing it to be interrupted by one or more ++ `asyncio.Event`s. + - If the task finishes without the event becoming set, the results of the - task will be returned. If the event becomes set, the task will be - cancelled ``None`` will be returned. ++ If the task finishes without the events becoming set, the results of the ++ task will be returned. If the event become set, the task will be cancelled ++ ``None`` will be returned. + + :param task: Task to run - :param event: An `asyncio.Event` which, if set, will interrupt `task` - and cause it to be cancelled. ++ :param events: One or more `asyncio.Event`s which, if set, will interrupt ++ `task` and cause it to be cancelled. + :param loop: Optional event loop to use other than the default. + """ + loop = loop or asyncio.get_event_loop() - event_task = loop.create_task(event.wait()) - done, pending = await asyncio.wait([task, event_task], ++ task = asyncio.ensure_future(task, loop=loop) ++ event_tasks = [loop.create_task(event.wait()) for event in events] ++ done, pending = await asyncio.wait([task] + event_tasks, + loop=loop, + return_when=asyncio.FIRST_COMPLETED) + for f in pending: - f.cancel() - exception = [f.exception() for f in done - if f is not event_task and f.exception()] - if exception: - raise exception[0] - result = [f.result() for f in done if f is not event_task] - if result: - return result[0] ++ f.cancel() # cancel unfinished tasks ++ for f in done: ++ f.exception() # prevent "exception was not retrieved" errors ++ if task in done: ++ return task.result() # may raise exception + else: + return None ++ ++ ++class Addrs(univ.SequenceOf): ++ componentType = char.PrintableString() ++ ++ ++class RegistrationInfo(univ.Sequence): ++ """ ++ ASN.1 representation of: ++ ++ type RegistrationInfo struct { ++ User string ++ ++ Addrs []string ++ ++ SecretKey []byte ++ ++ ControllerName string ++ } ++ """ ++ pass ++ ++ ++def generate_user_controller_access_token(username, controller_endpoints, secret_key, controller_name): ++ """" Implement in python what is currently done in GO ++ https://github.com/juju/juju/blob/a5ab92ec9b7f5da3678d9ac603fe52d45af24412/cmd/juju/user/utils.go#L16 ++ ++ :param username: name of the user to register ++ :param controller_endpoints: juju controller endpoints list in the format : ++ :param secret_key: base64 encoded string of the secret-key generated by juju ++ :param controller_name: name of the controller to register to. ++ """ ++ ++ # Secret key is returned as base64 encoded string in: ++ # https://websockets.readthedocs.io/en/stable/_modules/websockets/protocol.html#WebSocketCommonProtocol.recv ++ # Deconding it before marshalling into the ASN.1 message ++ secret_key = base64.b64decode(secret_key) ++ addr = Addrs() ++ for endpoint in controller_endpoints: ++ addr.append(endpoint) ++ ++ registration_string = RegistrationInfo() ++ registration_string.setComponentByPosition(0, char.PrintableString(username)) ++ registration_string.setComponentByPosition(1, addr) ++ registration_string.setComponentByPosition(2, univ.OctetString(secret_key)) ++ registration_string.setComponentByPosition(3, char.PrintableString(controller_name)) ++ registration_string = encode(registration_string) ++ remainder = len(registration_string) % 3 ++ registration_string += b"\0" * (3 - remainder) ++ return base64.urlsafe_b64encode(registration_string) diff --cc modules/libjuju/setup.py index 67e3707,0000000..7134677 mode 100644,000000..100644 --- a/modules/libjuju/setup.py +++ b/modules/libjuju/setup.py @@@ -1,60 -1,0 +1,61 @@@ +# Copyright 2016 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pathlib import Path +from setuptools import setup, find_packages + +here = Path(__file__).absolute().parent +readme = here / 'docs' / 'readme.rst' +changelog = here / 'docs' / 'changelog.rst' +long_description = '{}\n\n{}'.format( + readme.read_text(), + changelog.read_text() + ) +version = here / 'VERSION' + +setup( + name='juju', + version=version.read_text().strip(), + packages=find_packages( + exclude=["*.tests", "*.tests.*", "tests.*", "tests"]), + install_requires=[ + 'macaroonbakery>=1.1,<2.0', + 'pyRFC3339>=1.0,<2.0', + 'pyyaml>=3.0,<=4.2', + 'theblues>=0.3.8,<1.0', - 'websockets>=4.0,<7.0', ++ 'websockets>=7.0,<8.0', + 'paramiko>=2.4.0,<3.0.0', ++ 'pyasn1>=0.4.4', + ], + include_package_data=True, + maintainer='Juju Ecosystem Engineering', + maintainer_email='juju@lists.ubuntu.com', + description=('Python library for Juju'), + long_description=long_description, + url='https://github.com/juju/python-libjuju', + license='Apache 2', + classifiers=[ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + ], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --cc modules/libjuju/tests/base.py index 97eea53,0000000..600372c mode 100644,000000..100644 --- a/modules/libjuju/tests/base.py +++ b/modules/libjuju/tests/base.py @@@ -1,149 -1,0 +1,148 @@@ +import inspect +import subprocess +import uuid +from contextlib import contextmanager +from pathlib import Path + +import mock +from juju.client.jujudata import FileJujuData +from juju.controller import Controller + +import pytest + + +def is_bootstrapped(): + try: + result = subprocess.run(['juju', 'switch'], stdout=subprocess.PIPE) + return ( + result.returncode == 0 and + len(result.stdout.decode().strip()) > 0) + except FileNotFoundError: + return False + + - +bootstrapped = pytest.mark.skipif( + not is_bootstrapped(), + reason='bootstrapped Juju environment required') + +test_run_nonce = uuid.uuid4().hex[-4:] + + +class CleanController(): + """ + Context manager that automatically connects and disconnects from + the currently active controller. + + Note: Unlike CleanModel, this will not create a new controller for you, + and an active controller must already be available. + """ + def __init__(self): + self._controller = None + + async def __aenter__(self): + self._controller = Controller() + await self._controller.connect() + return self._controller + + async def __aexit__(self, exc_type, exc, tb): + await self._controller.disconnect() + + +class CleanModel(): + """ + Context manager that automatically connects to the currently active + controller, adds a fresh model, returns the connection to that model, + and automatically disconnects and cleans up the model. + + The new model is also set as the current default for the controller + connection. + """ + def __init__(self, bakery_client=None): + self._controller = None + self._model = None + self._model_uuid = None + self._bakery_client = bakery_client + + async def __aenter__(self): + model_nonce = uuid.uuid4().hex[-4:] + frame = inspect.stack()[1] + test_name = frame.function.replace('_', '-') + jujudata = TestJujuData() + self._controller = Controller( + jujudata=jujudata, + bakery_client=self._bakery_client, + ) + controller_name = jujudata.current_controller() + user_name = jujudata.accounts()[controller_name]['user'] + await self._controller.connect(controller_name) + + model_name = 'test-{}-{}-{}'.format( + test_run_nonce, + test_name, + model_nonce, + ) + self._model = await self._controller.add_model(model_name) + + # Change the JujuData instance so that it will return the new + # model as the current model name, so that we'll connect + # to it by default. + jujudata.set_model( + controller_name, + user_name + "/" + model_name, + self._model.info.uuid, + ) + + # save the model UUID in case test closes model + self._model_uuid = self._model.info.uuid + + return self._model + + async def __aexit__(self, exc_type, exc, tb): + await self._model.disconnect() + await self._controller.destroy_model(self._model_uuid) + await self._controller.disconnect() + + +class TestJujuData(FileJujuData): + def __init__(self): + self.__controller_name = None + self.__model_name = None + self.__model_uuid = None + super().__init__() + + def set_model(self, controller_name, model_name, model_uuid): + self.__controller_name = controller_name + self.__model_name = model_name + self.__model_uuid = model_uuid + + def current_model(self, *args, **kwargs): + return self.__model_name or super().current_model(*args, **kwargs) + + def models(self): + all_models = super().models() + if self.__model_name is None: + return all_models + all_models.setdefault(self.__controller_name, {}) + all_models[self.__controller_name].setdefault('models', {}) + cmodels = all_models[self.__controller_name]['models'] + cmodels[self.__model_name] = {'uuid': self.__model_uuid} + return all_models + + +class AsyncMock(mock.MagicMock): + async def __call__(self, *args, **kwargs): + return super().__call__(*args, **kwargs) + + +@contextmanager +def patch_file(filename): + """ + "Patch" a file so that its current contents are automatically restored + when the context is exited. + """ + filepath = Path(filename).expanduser() + data = filepath.read_bytes() + try: + yield + finally: + filepath.write_bytes(data) diff --cc modules/libjuju/tests/bundle/mini-bundle.yaml index e351a12,0000000..84d9a61 mode 100644,000000..100644 --- a/modules/libjuju/tests/bundle/mini-bundle.yaml +++ b/modules/libjuju/tests/bundle/mini-bundle.yaml @@@ -1,3 -1,0 +1,9 @@@ ++series: xenial +applications: - myapp: - charm: cs:xenial/ubuntu-0 ++ dummy-sink: ++ charm: cs:~juju-qa/dummy-sink ++ num_units: 1 ++ dummy-subordinate: ++ charm: cs:~juju-qa/dummy-subordinate ++relations: ++ - ['dummy-sink', 'dummy-subordinate'] diff --cc modules/libjuju/tests/integration/bundle/bundle-resource-rev.yaml index 0000000,0000000..c8feb83 new file mode 100644 --- /dev/null +++ b/modules/libjuju/tests/integration/bundle/bundle-resource-rev.yaml @@@ -1,0 -1,0 +1,7 @@@ ++series: xenial ++services: ++ ghost: ++ charm: "cs:ghost-19" ++ num_units: 1 ++ resources: ++ ghost-stable: 11 diff --cc modules/libjuju/tests/integration/cert.pem index 0000000,0000000..684029e new file mode 100644 --- /dev/null +++ b/modules/libjuju/tests/integration/cert.pem @@@ -1,0 -1,0 +1,33 @@@ ++-----BEGIN CERTIFICATE----- ++MIIFxDCCA6ygAwIBAgIJAPBHQW1VVLhYMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNV ++BAYTAlVTMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTEQMA4GA1UEBwwHUmFsZWln ++aDESMBAGA1UECgwJQ2Fub25pY2FsMSkwJwYDVQQDDCBweXRob24tbGlianVqdS5p ++bnRlZ3JhdGlvbi50ZXN0czAeFw0xODEyMTEyMDQyMThaFw0xOTEyMTEyMDQyMTha ++MHcxCzAJBgNVBAYTAlVTMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTEQMA4GA1UE ++BwwHUmFsZWlnaDESMBAGA1UECgwJQ2Fub25pY2FsMSkwJwYDVQQDDCBweXRob24t ++bGlianVqdS5pbnRlZ3JhdGlvbi50ZXN0czCCAiIwDQYJKoZIhvcNAQEBBQADggIP ++ADCCAgoCggIBANkkfNI4Q3eIIrXZF3xxnD9Bbp06jPeoEokUSrC98L5XwCtxs9Ma ++fWPqiSukPq3A0pPcRobFOu5o+pu6+1pFjcmtKICsp+CwHV52+IfozvNlhRMUFPb2 ++IxU86tgpMcBAM5wLz85DoNSu4EjOku0rB8Z0GMfvvuc7aYtDQoKJSScHGWWFTaJT ++mtXmmKKSPtyPZ5PCQOv2Qmg5ujs4RS3R8dq4WRAd5F8YzRBgmtPYRrjwgEjD7GTq ++Xlt+COqn5+RgWFIH0pQ1xHkslBzBByzsyjLJPdV/ugNIZk6GNOzLAw3ynl/9xGGh ++RAOrBsKVQPs3liZoGXVqKxHyNgWh8V58TgiFDuRZiZwQDV6cRkxOkGQIXohkS7uC ++5OXrAsyyVPrRoWfQMggxM1jH3H+93PoRqEsLypLxw53h9Seep4tOggw/hgOolLFg ++diAT/IU3yhESXnXpAA8G2rDKO32hw+vWuaGCbH6bShb+9ZfkAmLUiSVm9ClbkZRQ ++IaXmtBwsLS2IBxW51jrjSuXvqlBZc01pIUC2CT7aTrbftpA+w6i1bZpqjCukUSAx ++t4dRjzL/h/drp5xxlqXOZL9yjYl8vFul4LFKkpkJGIKESEksxULZR/3b+WA7oyiA ++Ph9UgnKU730dKVSfWbi/0tsCA/4HKIJ9qucCrfxyL8hizJ+1w9NZJ3ZbAgMBAAGj ++UzBRMB0GA1UdDgQWBBSv/7Fraw7XviWwlnPGc+CTJA0rKjAfBgNVHSMEGDAWgBSv ++/7Fraw7XviWwlnPGc+CTJA0rKjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB ++CwUAA4ICAQCluQ7qFgNoGPkAkdoDXN26OhQcfrCmjvPufurs8Fc4Yxumupz01Df+ ++zu3J2pG+tfThi37sRZsxN/jhtZOVgaXPSgpgB8Tz16YCK3KTEHXil/i6wp4JGmnQ ++VsOo8cGLEvcmFg98/l2Tu31IXaSm7Fc/VxVB0fhzvIa0xG+osU3Dy4GWhDQrkkJ8 ++MErTvEAb8QnY1y20ThPAZ5StBZ/ZLwPksuzkvJwGN8FI00k1RCznDNArzKouuZZt ++JdfjnFtT+nrP0XSAlphfI0o7Gbm6jqVLPIekp8iPJuAmk55biZ9rAJBu8DsHtBpQ ++cbpH+84y/xaC9svPgD9Un6dDDYXQ4QZL393oZW1RM4apR9gOz/8NxW2bJyPVxA3M ++nmHphZjyGrOLN/QjrZV93Dv65SIivzT2zYEztvK4rjui31J3VDeNEe7uMFGq5Pmq ++7HRrcPY2sMSOHkzOTFmd5qwaPD9EzkM5UT5YJDEE7YUjkR8LlxP5Xvo82HXxKl8D ++8Tk09HuBMWg69QjuVThBNJSWpIxTbQEfm/2j+fm1L1kE9N7+97y69eDTNdOxJK5D ++zaKoAjgoneZZzZN6fblfbQuAsDdJ2xLR0DTBlxA9Gv7OYbUpXm3eAyfYL4AmqvHI ++HtfgPeSH2+wQVteiVa7q0BIto75XE3m8+xIOQsAUEb04fcacEpKZlw== ++-----END CERTIFICATE----- diff --cc modules/libjuju/tests/integration/key.pem index 0000000,0000000..664123e new file mode 100644 --- /dev/null +++ b/modules/libjuju/tests/integration/key.pem @@@ -1,0 -1,0 +1,52 @@@ ++-----BEGIN PRIVATE KEY----- ++MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDZJHzSOEN3iCK1 ++2Rd8cZw/QW6dOoz3qBKJFEqwvfC+V8ArcbPTGn1j6okrpD6twNKT3EaGxTruaPqb ++uvtaRY3JrSiArKfgsB1edviH6M7zZYUTFBT29iMVPOrYKTHAQDOcC8/OQ6DUruBI ++zpLtKwfGdBjH777nO2mLQ0KCiUknBxllhU2iU5rV5piikj7cj2eTwkDr9kJoObo7 ++OEUt0fHauFkQHeRfGM0QYJrT2Ea48IBIw+xk6l5bfgjqp+fkYFhSB9KUNcR5LJQc ++wQcs7MoyyT3Vf7oDSGZOhjTsywMN8p5f/cRhoUQDqwbClUD7N5YmaBl1aisR8jYF ++ofFefE4IhQ7kWYmcEA1enEZMTpBkCF6IZEu7guTl6wLMslT60aFn0DIIMTNYx9x/ ++vdz6EahLC8qS8cOd4fUnnqeLToIMP4YDqJSxYHYgE/yFN8oREl516QAPBtqwyjt9 ++ocPr1rmhgmx+m0oW/vWX5AJi1IklZvQpW5GUUCGl5rQcLC0tiAcVudY640rl76pQ ++WXNNaSFAtgk+2k6237aQPsOotW2aaowrpFEgMbeHUY8y/4f3a6eccZalzmS/co2J ++fLxbpeCxSpKZCRiChEhJLMVC2Uf92/lgO6MogD4fVIJylO99HSlUn1m4v9LbAgP+ ++ByiCfarnAq38ci/IYsyftcPTWSd2WwIDAQABAoICAFbe9Rz5K2ynxxMvbej4XsUj ++vUgjw3/U+s1ik9sPsj/ERXpb+9BJ+b4+d3BBPl4vFU/YQVLrlv8IerJQ5PwhdW8o ++2lpYOLV4X9eKCzX8WscfZ1TRpO2EXVbCz0V5fZDnXn5gb1uazL4p1ErscfV2UJ8B ++lWRvstU5fKkdWH92wxBdE7j80qlNf1Vx8sCfd4yvxoVjoquEEt81sR6+DVcedf7F ++38PF4bZ16pxRub9k+C5G8VurHmjlJqi9zH1sfSZtsQfoX0OyGw9LWVoDk4ZSmTYm ++Mpm2hsmHbn6dzJCrS2aKGPhYQve4F8jL5GF2as/WVji5Tu4dcmu0lg480p61ZlXf ++Q58qw4uXMU2KfiuLKyTV8MlmktMhDiHAmzAbIXskdmV2BNlIwyudsVXT1QD0BKH5 ++I+8edW1OPLK72/kt9VT1paRbTiCL0NWk99QCL1VxPB4FupQQm1Hk2KnMrUfjFUOm ++9cuOP1S0HcHCMHN4+y0UCmn3phrWmfI/KlDZCxmSd8gvNwKkPSW5ONuYmZlpE5Wm ++s7FwRoAGGvSsjXOC3N6m48b0dQNLnMvSXQIRiDbnTzChNJ3q7y9u0o/dqATCtelx ++S7ouVKxHqSdy9G8WK0XQAFqny2dcoHZiiuxWboF9p1zEia43pdFVy/7g08KjSBQ1 ++vzVGhUDYtquqq0MociWBAoIBAQD6C8ZDBU8VWwOIPL+zX8/4MNp0PfcJrOwk1vF0 ++J0aPRRvqx0g6yhzjrCtWNrQnHV6Oc9FBg/NPAthAAQWYEwQr77RJWRtle/n7cH2A ++qFkAL0nYokti7TdFMe82a8hlnuo9GQl340t95j03/HDAtrqQ0xFi32Rpp54MgHLU ++FW2AYTv7CLV18p7yHIMdn0ESORPxlc/hYuuyL6ZPm/7DF/bbieY1+ZVAzn1ls17m ++dQctagpInRC2EDL17lQK86Mh7PGdVTIaJMFvzdyuIn8qswe1n3FA0OCL7VBfMjE8 ++caUZ3kfGfeNKtkUvGALoXploZhDTmfDs5XQFIoMvwi87lClBAoIBAQDeUCQMyPUC ++TcfDKmeKAiGjm4Amtb+rvA3SbPSJvteOaohyqKFswUf9fNCrJim1QVpQ+PtArlAx ++WK9X8g44+OOWx2moLxlptzjzsYEXJYzUtIjuFE10xiGJEvthmWAZ+EB7Gexu7696 ++M4LcWkAivCAwcM5e2Gr3DtMMS4E9fxNZfEn7RNFtTs6Cit/R2VITlbYnECSU13FY ++DI37g8umCR01pTZ/7VVUwVMeq/irFKwTfkHoF2Fyxbp8CT91ydRsYCBs395xcEH1 ++2rblBXUlGj01eVZtTX2HVSS78o/ak+Q3WJQvh1Hds8yS7QdirkOpmGGzvwpIhjzB ++ztHsgjbFt3ybAoIBAA1HAsgcSA7CPnXFhAhqVgi/z1nM0Ila/U8XesrIKx8AdHML ++EfLNOKt+QO7bCMXq8VJvI/VupETVydXcOAfTOq16lQAwExxYcPXBC2kBh3hTCoDO ++XWJrZjvuYt1o68M5pQaJhc8v6ppM14NZjEMvcMiv7IRriFFz7RiM2YwZdy8R+rVh ++yQDyWS5SBURVaIcnML/rTJaTQiC8FwCzL9v8MceGkwrareo7DL2RwMBMBo2Ky/D/ ++JhwE0C/u79eFCGyMwGeyVm689OiS7dzxR/9kckxaoxDmBoZnm5TyfVrQTgwJmZYY ++qTEWbKYLiFv+afb5NHuH+RsbNAXxxzWKAigPvgECggEAYD8H7HUQBchQxMDWBJy5 ++nZBT4e5rpdkLjt9W20/BGMosep9hC6l+FlN0L7Sc9/jsNgQlGrKcy1Be0U9dMvMl ++7QA2UPbbJLaLNI3TmobKOshSQ+iMRBMHL8YFCRMS1QtyNxlZEAo6yUgFzopQG/mg ++YfhkkBFX9c/4NOl3cX1TjjlN+jeoB4/HviKLldllPE9jhfPqMno3euwsiAheIWru ++t2vodWf1unTcHHpNdRvFB8dwlx+QM9VA0DRcwgz4J1dSknA1aJ02IU9oQSyks8Rx ++XXZDoZybzPxio+/2saW3dvKlbRJDsh0GY1G1EdbqOkFbgyshM5bSNQHqRl91gRHY ++IwKCAQEApF790G7J1IgNrLBxLlzEkVcv2Az8QDHviC8MxdVerGj62E5fGUb44Z+p ++SM2vjjtL7yeTPuH0K7bbVtDMZoj3l81BHY6OnmFTLPSlMnUYXs7aVjbIK3EMQtHa ++EyNOiwNtIOAUMqQ3C/KXWxdO0J8/kY6b7cvZwj5zDLYt+4j8BN8w8EL0Kgxw9Bd/ ++DL++Nz3IqoOoPF0aK7hVTklVzONIdaGL2OjlyESKZOWJR1pypLC9+nUAAFbtPN5Q ++8xyG3Rqoo7j697M50LP4ZMCE8WK/uZth4LPU9KWJAJ3FHrKki0qB1zbYXS4OMFbj ++hg+Fb1z8af0WL9PCAwsWQMTaSx88tQ== ++-----END PRIVATE KEY----- diff --cc modules/libjuju/tests/integration/test_connection.py index 79ad9d0,0000000..6647a03 mode 100644,000000..100644 --- a/modules/libjuju/tests/integration/test_connection.py +++ b/modules/libjuju/tests/integration/test_connection.py @@@ -1,69 -1,0 +1,236 @@@ +import asyncio ++import http ++import logging ++import socket ++import ssl ++from contextlib import closing ++from pathlib import Path + +from juju.client import client +from juju.client.connection import Connection ++from juju.controller import Controller ++from juju.utils import run_with_interrupt + +import pytest ++import websockets + +from .. import base + + ++logger = logging.getLogger(__name__) ++ ++ +@base.bootstrapped +@pytest.mark.asyncio +async def test_monitor(event_loop): - + async with base.CleanModel() as model: + conn = model.connection() + assert conn.monitor.status == 'connected' + await conn.close() + + assert conn.monitor.status == 'disconnected' + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_monitor_catches_error(event_loop): + + async with base.CleanModel() as model: + conn = model.connection() + + assert conn.monitor.status == 'connected' + try: + async with conn.monitor.reconnecting: + await conn.ws.close() + await asyncio.sleep(1) + assert conn.monitor.status == 'error' + finally: + await conn.close() + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_full_status(event_loop): + async with base.CleanModel() as model: + await model.deploy( + 'ubuntu-0', + application_name='ubuntu', + series='trusty', + channel='stable', + ) + + c = client.ClientFacade.from_connection(model.connection()) + + await c.FullStatus(None) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_reconnect(event_loop): + async with base.CleanModel() as model: + kwargs = model.connection().connect_params() + conn = await Connection.connect(**kwargs) + try: + await asyncio.sleep(0.1) + assert conn.is_open + await conn.ws.close() + assert not conn.is_open + await model.block_until(lambda: conn.is_open, timeout=3) + finally: + await conn.close() ++ ++ ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_redirect(event_loop): ++ controller = Controller() ++ await controller.connect() ++ kwargs = controller.connection().connect_params() ++ await controller.disconnect() ++ ++ # websockets.server.logger.setLevel(logging.DEBUG) ++ # websockets.client.logger.setLevel(logging.DEBUG) ++ # # websockets.protocol.logger.setLevel(logging.DEBUG) ++ # logger.setLevel(logging.DEBUG) ++ ++ destination = 'wss://{}/api'.format(kwargs['endpoint']) ++ redirect_statuses = [ ++ http.HTTPStatus.MOVED_PERMANENTLY, ++ http.HTTPStatus.FOUND, ++ http.HTTPStatus.SEE_OTHER, ++ http.HTTPStatus.TEMPORARY_REDIRECT, ++ http.HTTPStatus.PERMANENT_REDIRECT, ++ ] ++ test_server_cert = Path(__file__).with_name('cert.pem') ++ kwargs['cacert'] += '\n' + test_server_cert.read_text() ++ server = RedirectServer(destination, event_loop) ++ try: ++ for status in redirect_statuses: ++ logger.debug('test: starting {}'.format(status)) ++ server.start(status) ++ await run_with_interrupt(server.running.wait(), ++ server.terminated) ++ if server.exception: ++ raise server.exception ++ assert not server.terminated.is_set() ++ logger.debug('test: started') ++ kwargs_copy = dict(kwargs, ++ endpoint='localhost:{}'.format(server.port)) ++ logger.debug('test: connecting') ++ conn = await Connection.connect(**kwargs_copy) ++ logger.debug('test: connected') ++ await conn.close() ++ logger.debug('test: stopping') ++ server.stop() ++ await server.stopped.wait() ++ logger.debug('test: stopped') ++ finally: ++ server.terminate() ++ await server.terminated.wait() ++ ++ ++class RedirectServer: ++ def __init__(self, destination, loop): ++ self.destination = destination ++ self.loop = loop ++ self._start = asyncio.Event() ++ self._stop = asyncio.Event() ++ self._terminate = asyncio.Event() ++ self.running = asyncio.Event() ++ self.stopped = asyncio.Event() ++ self.terminated = asyncio.Event() ++ if hasattr(ssl, 'PROTOCOL_TLS_SERVER'): ++ # python 3.6+ ++ protocol = ssl.PROTOCOL_TLS_SERVER ++ elif hasattr(ssl, 'PROTOCOL_TLS'): ++ # python 3.5.3+ ++ protocol = ssl.PROTOCOL_TLS ++ else: ++ # python 3.5.2 ++ protocol = ssl.PROTOCOL_TLSv1_2 ++ self.ssl_context = ssl.SSLContext(protocol) ++ crt_file = Path(__file__).with_name('cert.pem') ++ key_file = Path(__file__).with_name('key.pem') ++ self.ssl_context.load_cert_chain(str(crt_file), str(key_file)) ++ self.status = None ++ self.port = None ++ self._task = self.loop.create_task(self.run()) ++ ++ def start(self, status): ++ self.status = status ++ self.port = self._find_free_port() ++ self._start.set() ++ ++ def stop(self): ++ self._stop.set() ++ ++ def terminate(self): ++ self._terminate.set() ++ self.stop() ++ ++ @property ++ def exception(self): ++ try: ++ return self._task.exception() ++ except (asyncio.CancelledError, asyncio.InvalidStateError): ++ return None ++ ++ async def run(self): ++ logger.debug('server: active') ++ ++ async def hello(websocket, path): ++ await websocket.send('hello') ++ ++ async def redirect(path, request_headers): ++ return self.status, {'Location': self.destination}, b"" ++ ++ try: ++ while not self._terminate.is_set(): ++ await run_with_interrupt(self._start.wait(), ++ self._terminate, ++ loop=self.loop) ++ if self._terminate.is_set(): ++ break ++ self._start.clear() ++ logger.debug('server: starting {}'.format(self.status)) ++ try: ++ async with websockets.serve(ws_handler=hello, ++ process_request=redirect, ++ host='localhost', ++ port=self.port, ++ ssl=self.ssl_context, ++ loop=self.loop): ++ self.stopped.clear() ++ self.running.set() ++ logger.debug('server: started') ++ while not self._stop.is_set(): ++ await run_with_interrupt( ++ asyncio.sleep(1, loop=self.loop), ++ self._stop, ++ loop=self.loop) ++ logger.debug('server: tick') ++ logger.debug('server: stopping') ++ except asyncio.CancelledError: ++ break ++ finally: ++ self.stopped.set() ++ self._stop.clear() ++ self.running.clear() ++ logger.debug('server: stopped') ++ logger.debug('server: terminating') ++ except asyncio.CancelledError: ++ pass ++ finally: ++ self._start.clear() ++ self._stop.clear() ++ self._terminate.clear() ++ self.stopped.set() ++ self.running.clear() ++ self.terminated.set() ++ logger.debug('server: terminated') ++ ++ def _find_free_port(self): ++ with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: ++ s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ++ s.bind(('', 0)) ++ return s.getsockname()[1] diff --cc modules/libjuju/tests/integration/test_controller.py index 93e2883,0000000..6423a98 mode 100644,000000..100644 --- a/modules/libjuju/tests/integration/test_controller.py +++ b/modules/libjuju/tests/integration/test_controller.py @@@ -1,200 -1,0 +1,228 @@@ +import asyncio +import subprocess +import uuid + +from juju.client.connection import Connection +from juju.client.jujudata import FileJujuData +from juju.controller import Controller +from juju.errors import JujuAPIError + +import pytest + +from .. import base + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_add_remove_user(event_loop): + async with base.CleanController() as controller: + username = 'test{}'.format(uuid.uuid4()) + user = await controller.get_user(username) + assert user is None + user = await controller.add_user(username) + assert user is not None ++ assert user.secret_key is not None + assert user.username == username + users = await controller.get_users() + assert any(u.username == username for u in users) + await controller.remove_user(username) + user = await controller.get_user(username) + assert user is None + users = await controller.get_users() + assert not any(u.username == username for u in users) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_disable_enable_user(event_loop): + async with base.CleanController() as controller: + username = 'test-disable{}'.format(uuid.uuid4()) + user = await controller.add_user(username) + + await user.disable() + assert not user.enabled + assert user.disabled + + fresh = await controller.get_user(username) # fetch fresh copy + assert not fresh.enabled + assert fresh.disabled + + await user.enable() + assert user.enabled + assert not user.disabled + + fresh = await controller.get_user(username) # fetch fresh copy + assert fresh.enabled + assert not fresh.disabled + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_change_user_password(event_loop): + async with base.CleanController() as controller: + username = 'test-password{}'.format(uuid.uuid4()) + user = await controller.add_user(username) + await user.set_password('password') + # Check that we can connect with the new password. + new_connection = None + try: + kwargs = controller.connection().connect_params() + kwargs['username'] = username + kwargs['password'] = 'password' + new_connection = await Connection.connect(**kwargs) + except JujuAPIError: + raise AssertionError('Unable to connect with new password') + finally: + if new_connection: + await new_connection.close() + + ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_reset_user_password(event_loop): ++ async with base.CleanController() as controller: ++ username = 'test{}'.format(uuid.uuid4()) ++ user = await controller.add_user(username) ++ origin_secret_key = user.secret_key ++ await user.set_password('password') ++ await controller.reset_user_password(username) ++ user = await controller.get_user(username) ++ new_secret_key = user.secret_key ++ # Check secret key is different after the reset. ++ assert origin_secret_key != new_secret_key ++ # Check that we can't connect with the old password. ++ new_connection = None ++ try: ++ kwargs = controller.connection().connect_params() ++ kwargs['username'] = username ++ kwargs['password'] = 'password' ++ new_connection = await Connection.connect(**kwargs) ++ except JujuAPIError: ++ pass ++ finally: ++ # No connection with old password ++ assert new_connection is None ++ ++ +@base.bootstrapped +@pytest.mark.asyncio +async def test_grant_revoke(event_loop): + async with base.CleanController() as controller: + username = 'test-grant{}'.format(uuid.uuid4()) + user = await controller.add_user(username) + await user.grant('superuser') + assert user.access == 'superuser' + fresh = await controller.get_user(username) # fetch fresh copy + assert fresh.access == 'superuser' + await user.grant('login') # already has 'superuser', so no-op + assert user.access == 'superuser' + fresh = await controller.get_user(username) # fetch fresh copy + assert fresh.access == 'superuser' + await user.revoke() - assert user.access is '' ++ assert user.access == '' + fresh = await controller.get_user(username) # fetch fresh copy - assert fresh.access is '' ++ assert fresh.access == '' + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_list_models(event_loop): + async with base.CleanController() as controller: + async with base.CleanModel() as model: + result = await controller.list_models() + assert model.info.name in result + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_get_model(event_loop): + async with base.CleanController() as controller: + by_name, by_uuid = None, None + model_name = 'test-{}'.format(uuid.uuid4()) + model = await controller.add_model(model_name) + model_uuid = model.info.uuid + await model.disconnect() + try: + by_name = await controller.get_model(model_name) + by_uuid = await controller.get_model(model_uuid) + assert by_name.info.name == model_name + assert by_name.info.uuid == model_uuid + assert by_uuid.info.name == model_name + assert by_uuid.info.uuid == model_uuid + finally: + if by_name: + await by_name.disconnect() + if by_uuid: + await by_uuid.disconnect() + await controller.destroy_model(model_name) + + +async def _wait_for_model(controller, model_name): + while model_name not in await controller.list_models(): + await asyncio.sleep(0.5, loop=controller.loop) + + +async def _wait_for_model_gone(controller, model_name): + while model_name in await controller.list_models(): + await asyncio.sleep(0.5, loop=controller.loop) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_destroy_model_by_name(event_loop): + async with base.CleanController() as controller: + model_name = 'test-{}'.format(uuid.uuid4()) + model = await controller.add_model(model_name) + await model.disconnect() + await asyncio.wait_for(_wait_for_model(controller, + model_name), + timeout=60) + await controller.destroy_model(model_name) + await asyncio.wait_for(_wait_for_model_gone(controller, + model_name), + timeout=60) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_add_destroy_model_by_uuid(event_loop): + async with base.CleanController() as controller: + model_name = 'test-{}'.format(uuid.uuid4()) + model = await controller.add_model(model_name) + model_uuid = model.info.uuid + await model.disconnect() + await asyncio.wait_for(_wait_for_model(controller, + model_name), + timeout=60) + await controller.destroy_model(model_uuid) + await asyncio.wait_for(_wait_for_model_gone(controller, + model_name), + timeout=60) + + +# this test must be run serially because it modifies the login password +@pytest.mark.serial +@base.bootstrapped +@pytest.mark.asyncio +async def test_macaroon_auth(event_loop): + jujudata = FileJujuData() + account = jujudata.accounts()[jujudata.current_controller()] + with base.patch_file('~/.local/share/juju/accounts.yaml'): + if 'password' in account: + # force macaroon auth by "changing" password to current password + result = subprocess.run( + ['juju', 'change-user-password'], + input='{0}\n{0}\n'.format(account['password']), + universal_newlines=True, + stderr=subprocess.PIPE) + assert result.returncode == 0, ('Failed to change password: ' + '{}'.format(result.stderr)) + controller = Controller() + try: + await controller.connect() + assert controller.is_connected() + finally: + if controller.is_connected(): + await controller.disconnect() + async with base.CleanModel(): + pass # create and login to model works diff --cc modules/libjuju/tests/integration/test_machine.py index 9a5f075,0000000..070208a mode 100644,000000..100644 --- a/modules/libjuju/tests/integration/test_machine.py +++ b/modules/libjuju/tests/integration/test_machine.py @@@ -1,65 -1,0 +1,65 @@@ +import asyncio +from tempfile import NamedTemporaryFile + +import pytest + +from .. import base + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_status(event_loop): + async with base.CleanModel() as model: + await model.deploy( + 'ubuntu-0', + application_name='ubuntu', + series='trusty', + channel='stable', + ) + + await asyncio.wait_for( + model.block_until(lambda: len(model.machines)), + timeout=240) + machine = model.machines['0'] + + assert machine.status in ('allocating', 'pending') + assert machine.agent_status == 'pending' + assert not machine.agent_version + + # there is some inconsistency in the capitalization of status_message + # between different providers + await asyncio.wait_for( + model.block_until( + lambda: (machine.status == 'running' and + machine.status_message.lower() == 'running' and + machine.agent_status == 'started')), + timeout=480) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_scp(event_loop): + # ensure that asyncio.subprocess will work; + try: + asyncio.get_child_watcher().attach_loop(event_loop) + except RuntimeError: + pytest.skip('test_scp will always fail outside of MainThread') + async with base.CleanModel() as model: + await model.add_machine() + await asyncio.wait_for( + model.block_until(lambda: model.machines), + timeout=240) + machine = model.machines['0'] + await asyncio.wait_for( + model.block_until(lambda: (machine.status == 'running' and + machine.agent_status == 'started')), + timeout=480) + + with NamedTemporaryFile() as f: + f.write(b'testcontents') + f.flush() - await machine.scp_to(f.name, 'testfile') ++ await machine.scp_to(f.name, 'testfile', scp_opts='-p') + + with NamedTemporaryFile() as f: - await machine.scp_from('testfile', f.name) ++ await machine.scp_from('testfile', f.name, scp_opts='-p') + assert f.read() == b'testcontents' diff --cc modules/libjuju/tests/integration/test_model.py index 1cba79a,0000000..58766b4 mode 100644,000000..100644 --- a/modules/libjuju/tests/integration/test_model.py +++ b/modules/libjuju/tests/integration/test_model.py @@@ -1,413 -1,0 +1,485 @@@ +import asyncio +import mock +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path ++import paramiko + +from juju.client.client import ConfigValue, ApplicationFacade +from juju.model import Model, ModelObserver +from juju.utils import block_until, run_with_interrupt +from juju.errors import JujuError + +import os +import pylxd +import time +import uuid + +import pytest + +from .. import base + + +MB = 1 +GB = 1024 +SSH_KEY = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsYMJGNGG74HAJha3n2CFmWYsOOaORnJK6VqNy86pj0MIpvRXBzFzVy09uPQ66GOQhTEoJHEqE77VMui7+62AcMXT+GG7cFHcnU8XVQsGM6UirCcNyWNysfiEMoAdZScJf/GvoY87tMEszhZIUV37z8PUBx6twIqMdr31W1J0IaPa+sV6FEDadeLaNTvancDcHK1zuKsL39jzAg7+LYjKJfEfrsQP+lj/EQcjtKqlhVS5kzsJVfx8ZEd0xhW5G7N6bCdKNalS8mKCMaBXJpijNQ82AiyqCIDCRrre2To0/i7pTjRiL0U9f9mV3S4NJaQaokR050w/ZLySFf6F7joJT mathijs@Qrama-Mathijs' # noqa + + +@base.bootstrapped +@pytest.mark.asyncio - async def test_deploy_local_bundle(event_loop): ++async def test_deploy_local_bundle_dir(event_loop): + tests_dir = Path(__file__).absolute().parent.parent + bundle_path = tests_dir / 'bundle' + mini_bundle_file_path = bundle_path / 'mini-bundle.yaml' + + async with base.CleanModel() as model: + await model.deploy(str(bundle_path)) + await model.deploy(str(mini_bundle_file_path)) + - for app in ('wordpress', 'mysql', 'myapp'): - assert app in model.applications ++ wordpress = model.applications.get('wordpress') ++ mysql = model.applications.get('mysql') ++ assert wordpress and mysql ++ await block_until(lambda: (len(wordpress.units) == 1 and ++ len(mysql.units) == 1), ++ timeout=60 * 4) ++ ++ ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_deploy_local_bundle_file(event_loop): ++ tests_dir = Path(__file__).absolute().parent.parent ++ bundle_path = tests_dir / 'bundle' ++ mini_bundle_file_path = bundle_path / 'mini-bundle.yaml' ++ ++ async with base.CleanModel() as model: ++ await model.deploy(str(mini_bundle_file_path)) ++ ++ dummy_sink = model.applications.get('dummy-sink') ++ dummy_subordinate = model.applications.get('dummy-subordinate') ++ assert dummy_sink and dummy_subordinate ++ await block_until(lambda: (len(dummy_sink.units) == 1 and ++ len(dummy_subordinate.units) == 1), ++ timeout=60 * 4) ++ ++ ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_deploy_invalid_bundle(event_loop): ++ tests_dir = Path(__file__).absolute().parent.parent ++ bundle_path = tests_dir / 'bundle' / 'invalid.yaml' ++ async with base.CleanModel() as model: ++ with pytest.raises(JujuError): ++ await model.deploy(str(bundle_path)) ++ ++ ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_deploy_local_charm(event_loop): ++ from pathlib import Path ++ tests_dir = Path(__file__).absolute().parent.parent ++ charm_path = tests_dir / 'charm' ++ ++ async with base.CleanModel() as model: ++ await model.deploy(str(charm_path)) ++ assert 'charm' in model.applications + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_deploy_invalid_bundle(event_loop): + tests_dir = Path(__file__).absolute().parent.parent + bundle_path = tests_dir / 'bundle' / 'invalid.yaml' + async with base.CleanModel() as model: + with pytest.raises(JujuError): + await model.deploy(str(bundle_path)) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_deploy_local_charm(event_loop): + from pathlib import Path + tests_dir = Path(__file__).absolute().parent.parent + charm_path = tests_dir / 'charm' + + async with base.CleanModel() as model: + await model.deploy(str(charm_path)) + assert 'charm' in model.applications + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_deploy_bundle(event_loop): + async with base.CleanModel() as model: + await model.deploy('bundle/wiki-simple') + + for app in ('wiki', 'mysql'): + assert app in model.applications + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_deploy_channels_revs(event_loop): + async with base.CleanModel() as model: + charm = 'cs:~johnsca/libjuju-test' + stable = await model.deploy(charm, 'a1') + edge = await model.deploy(charm, 'a2', channel='edge') + rev = await model.deploy(charm + '-2', 'a3') + + assert [a.charm_url for a in (stable, edge, rev)] == [ + 'cs:~johnsca/libjuju-test-1', + 'cs:~johnsca/libjuju-test-2', + 'cs:~johnsca/libjuju-test-2', + ] + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_add_machine(event_loop): + from juju.machine import Machine + + async with base.CleanModel() as model: + # add a new default machine + machine1 = await model.add_machine() + + # add a machine with constraints, disks, and series + machine2 = await model.add_machine( + constraints={ + 'mem': 256 * MB, + }, + disks=[{ + 'pool': 'rootfs', + 'size': 10 * GB, + 'count': 1, + }], + series='xenial', + ) + + # add a lxd container to machine2 + machine3 = await model.add_machine( + 'lxd:{}'.format(machine2.id)) + + for m in (machine1, machine2, machine3): + assert isinstance(m, Machine) + + assert len(model.machines) == 3 + + await machine3.destroy(force=True) + await machine2.destroy(force=True) + res = await machine1.destroy(force=True) + + assert res is None + assert len(model.machines) == 0 + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_add_manual_machine_ssh(event_loop): + + # Verify controller is localhost + async with base.CleanController() as controller: + cloud = await controller.get_cloud() + if cloud != "localhost": + pytest.skip('Skipping because test requires lxd.') + + async with base.CleanModel() as model: + private_key_path = os.path.expanduser( + "~/.local/share/juju/ssh/juju_id_rsa" + ) + public_key_path = os.path.expanduser( + "~/.local/share/juju/ssh/juju_id_rsa.pub" + ) + - # Use the self-signed cert generated by lxc on first run - crt = os.path.expanduser('~/snap/lxd/current/.config/lxc/client.crt') - assert os.path.exists(crt) - - key = os.path.expanduser('~/snap/lxd/current/.config/lxc/client.key') - assert os.path.exists(key) - - client = pylxd.Client( - endpoint="https://127.0.0.1:8443", - cert=(crt, key), - verify=False, - ) ++ # connect using the local unix socket ++ client = pylxd.Client() + + test_name = "test-{}-add-manual-machine-ssh".format( + uuid.uuid4().hex[-4:] + ) + + # create profile w/cloud-init and juju ssh key + public_key = "" + with open(public_key_path, "r") as f: + public_key = f.readline() + + profile = client.profiles.create( + test_name, - config={'user.user-data': '#cloud-config\nssh_authorized_keys:\n- {}'.format(public_key)}, ++ config={'user.user-data': '#cloud-config\n' ++ 'ssh_authorized_keys:\n' ++ '- {}'.format(public_key)}, + devices={ + 'root': {'path': '/', 'pool': 'default', 'type': 'disk'}, + 'eth0': { + 'nictype': 'bridged', + 'parent': 'lxdbr0', + 'type': 'nic' + } + } + ) + + # create lxc machine + config = { + 'name': test_name, + 'source': { + 'type': 'image', + 'alias': 'xenial', + 'mode': 'pull', + 'protocol': 'simplestreams', + 'server': 'https://cloud-images.ubuntu.com/releases', + }, + 'profiles': [test_name], + } + container = client.containers.create(config, wait=True) + container.start(wait=True) + + def wait_for_network(container, timeout=30): + """Wait for eth0 to have an ipv4 address.""" + starttime = time.time() + while(time.time() < starttime + timeout): + time.sleep(1) + if 'eth0' in container.state().network: + addresses = container.state().network['eth0']['addresses'] + if len(addresses) > 0: + if addresses[0]['family'] == 'inet': + return addresses[0] + return None + + host = wait_for_network(container) ++ assert host, 'Failed to get address for machine' + + # HACK: We need to give sshd a chance to bind to the interface, + # and pylxd's container.execute seems to be broken and fails and/or + # hangs trying to properly check if the service is up. + time.sleep(5) + - if host: - # add a new manual machine - machine1 = await model.add_machine(spec='ssh:{}@{}:{}'.format( - "ubuntu", - host['address'], - private_key_path, - )) ++ for attempt in range(1, 4): ++ try: ++ # add a new manual machine ++ machine1 = await model.add_machine(spec='ssh:{}@{}:{}'.format( ++ "ubuntu", ++ host['address'], ++ private_key_path, ++ )) ++ except paramiko.ssh_exception.NoValidConnectionsError: ++ if attempt == 3: ++ raise ++ # retry the ssh connection a few times if it fails ++ time.sleep(attempt * 5) ++ else: ++ break + + assert len(model.machines) == 1 + + res = await machine1.destroy(force=True) + + assert res is None + assert len(model.machines) == 0 + + container.stop(wait=True) + container.delete(wait=True) + + profile.delete() + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_relate(event_loop): + from juju.relation import Relation + + async with base.CleanModel() as model: + await model.deploy( + 'ubuntu', + application_name='ubuntu', + series='trusty', + channel='stable', + ) + await model.deploy( + 'nrpe', + application_name='nrpe', + series='trusty', + channel='stable', + # subordinates must be deployed without units + num_units=0, + ) + + relation_added = asyncio.Event() + timeout = asyncio.Event() + + class TestObserver(ModelObserver): + async def on_relation_add(self, delta, old, new, model): + if set(new.key.split()) == {'nrpe:general-info', + 'ubuntu:juju-info'}: + relation_added.set() + event_loop.call_later(2, timeout.set) + + model.add_observer(TestObserver()) + + real_app_facade = ApplicationFacade.from_connection(model.connection()) + mock_app_facade = mock.MagicMock() + + async def mock_AddRelation(*args): + # force response delay from AddRelation to test race condition + # (see https://github.com/juju/python-libjuju/issues/191) + result = await real_app_facade.AddRelation(*args) + await relation_added.wait() + return result + + mock_app_facade.AddRelation = mock_AddRelation + + with mock.patch.object(ApplicationFacade, 'from_connection', + return_value=mock_app_facade): + my_relation = await run_with_interrupt(model.add_relation( + 'ubuntu', + 'nrpe', - ), timeout, event_loop) ++ ), timeout, loop=event_loop) + + assert isinstance(my_relation, Relation) + + +async def _deploy_in_loop(new_loop, model_name, jujudata): + new_model = Model(new_loop, jujudata=jujudata) + await new_model.connect(model_name) + try: + await new_model.deploy('cs:xenial/ubuntu') + assert 'ubuntu' in new_model.applications + finally: + await new_model.disconnect() + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_explicit_loop_threaded(event_loop): + async with base.CleanModel() as model: + model_name = model.info.name + new_loop = asyncio.new_event_loop() + with ThreadPoolExecutor(1) as executor: + f = executor.submit( + new_loop.run_until_complete, - _deploy_in_loop(new_loop, model_name, model._connector.jujudata)) ++ _deploy_in_loop(new_loop, ++ model_name, ++ model._connector.jujudata)) + f.result() + await model._wait_for_new('application', 'ubuntu') + assert 'ubuntu' in model.applications + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_store_resources_charm(event_loop): + async with base.CleanModel() as model: + ghost = await model.deploy('cs:ghost-19') + assert 'ghost' in model.applications + terminal_statuses = ('active', 'error', 'blocked') + await model.block_until( + lambda: ( + len(ghost.units) > 0 and + ghost.units[0].workload_status in terminal_statuses) + ) + # ghost will go in to blocked (or error, for older + # charm revs) if the resource is missing + assert ghost.units[0].workload_status == 'active' + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_store_resources_bundle(event_loop): + async with base.CleanModel() as model: + bundle = str(Path(__file__).parent / 'bundle') + await model.deploy(bundle) + assert 'ghost' in model.applications + ghost = model.applications['ghost'] + terminal_statuses = ('active', 'error', 'blocked') + await model.block_until( + lambda: ( + len(ghost.units) > 0 and + ghost.units[0].workload_status in terminal_statuses) + ) + # ghost will go in to blocked (or error, for older + # charm revs) if the resource is missing + assert ghost.units[0].workload_status == 'active' ++ resources = await ghost.get_resources() ++ assert resources['ghost-stable'].revision >= 12 ++ ++ ++@base.bootstrapped ++@pytest.mark.asyncio ++async def test_store_resources_bundle_revs(event_loop): ++ async with base.CleanModel() as model: ++ bundle = str(Path(__file__).parent / 'bundle/bundle-resource-rev.yaml') ++ await model.deploy(bundle) ++ assert 'ghost' in model.applications ++ ghost = model.applications['ghost'] ++ terminal_statuses = ('active', 'error', 'blocked') ++ await model.block_until( ++ lambda: ( ++ len(ghost.units) > 0 and ++ ghost.units[0].workload_status in terminal_statuses) ++ ) ++ # ghost will go in to blocked (or error, for older ++ # charm revs) if the resource is missing ++ assert ghost.units[0].workload_status == 'active' ++ resources = await ghost.get_resources() ++ assert resources['ghost-stable'].revision == 11 + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_ssh_key(event_loop): + async with base.CleanModel() as model: + await model.add_ssh_key('admin', SSH_KEY) + result = await model.get_ssh_key(True) + result = result.serialize()['results'][0].serialize()['result'] + assert SSH_KEY in result + await model.remove_ssh_key('admin', SSH_KEY) + result = await model.get_ssh_key(True) + result = result.serialize()['results'][0].serialize()['result'] + assert result is None + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_get_machines(event_loop): + async with base.CleanModel() as model: + result = await model.get_machines() + assert isinstance(result, list) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_watcher_reconnect(event_loop): + async with base.CleanModel() as model: + await model.connection().ws.close() + await block_until(model.is_connected, timeout=3) + + +@base.bootstrapped +@pytest.mark.asyncio +async def test_config(event_loop): + async with base.CleanModel() as model: + await model.set_config({ + 'extra-info': 'booyah', + 'test-mode': ConfigValue(value=True), + }) + result = await model.get_config() + assert 'extra-info' in result + assert result['extra-info'].source == 'model' + assert result['extra-info'].value == 'booyah' + ++ +@base.bootstrapped +@pytest.mark.asyncio +async def test_set_constraints(event_loop): + async with base.CleanModel() as model: + await model.set_constraints({'cpu-power': 1}) + cons = await model.get_constraints() + assert cons['cpu_power'] == 1 + +# @base.bootstrapped +# @pytest.mark.asyncio +# async def test_grant(event_loop) +# async with base.CleanController() as controller: +# await controller.add_user('test-model-grant') +# await controller.grant('test-model-grant', 'superuser') +# async with base.CleanModel() as model: +# await model.grant('test-model-grant', 'admin') +# assert model.get_user('test-model-grant')['access'] == 'admin' +# await model.grant('test-model-grant', 'login') +# assert model.get_user('test-model-grant')['access'] == 'login' diff --cc modules/libjuju/tests/unit/test_controller.py index 44f488f,0000000..b95b5ee mode 100644,000000..100644 --- a/modules/libjuju/tests/unit/test_controller.py +++ b/modules/libjuju/tests/unit/test_controller.py @@@ -1,110 -1,0 +1,140 @@@ +import asynctest +import mock +from pathlib import Path +from tempfile import NamedTemporaryFile + +from juju.controller import Controller +from juju.client import client + +from .. import base + + +class TestControllerConnect(asynctest.TestCase): + @asynctest.patch('juju.client.connector.Connector.connect_controller') + async def test_no_args(self, mock_connect_controller): + c = Controller() + await c.connect() + mock_connect_controller.assert_called_once_with(None) + + @asynctest.patch('juju.client.connector.Connector.connect_controller') + async def test_with_controller_name(self, mock_connect_controller): + c = Controller() + await c.connect(controller_name='foo') + mock_connect_controller.assert_called_once_with('foo') + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_no_auth(self, mock_connect): + c = Controller() + with self.assertRaises(TypeError): + await c.connect(endpoint='0.1.2.3:4566') + self.assertEqual(mock_connect.call_count, 0) + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_userpass(self, mock_connect): + c = Controller() + with self.assertRaises(TypeError): + await c.connect(endpoint='0.1.2.3:4566', username='dummy') + await c.connect(endpoint='0.1.2.3:4566', + username='user', + password='pass') + mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566', + username='user', + password='pass') + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_bakery_client(self, mock_connect): + c = Controller() + await c.connect(endpoint='0.1.2.3:4566', bakery_client='bakery') + mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566', + bakery_client='bakery') + + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_endpoint_and_macaroons(self, mock_connect): + c = Controller() + await c.connect(endpoint='0.1.2.3:4566', + macaroons=['macaroon']) + mock_connect.assert_called_with(endpoint='0.1.2.3:4566', + macaroons=['macaroon']) + await c.connect(endpoint='0.1.2.3:4566', + bakery_client='bakery', + macaroons=['macaroon']) + mock_connect.assert_called_with(endpoint='0.1.2.3:4566', + bakery_client='bakery', + macaroons=['macaroon']) + + @asynctest.patch('juju.client.connector.Connector.connect_controller') + @asynctest.patch('juju.client.connector.Connector.connect') + async def test_with_posargs(self, mock_connect, mock_connect_controller): + c = Controller() + await c.connect('foo') + mock_connect_controller.assert_called_once_with('foo') + with self.assertRaises(TypeError): + await c.connect('endpoint', 'user') + await c.connect('endpoint', 'user', 'pass') + mock_connect.assert_called_once_with(endpoint='endpoint', + username='user', + password='pass') + await c.connect('endpoint', 'user', 'pass', 'cacert', 'bakery', + 'macaroons', 'loop', 'max_frame_size') + mock_connect.assert_called_with(endpoint='endpoint', + username='user', + password='pass', + cacert='cacert', + bakery_client='bakery', + macaroons='macaroons', + loop='loop', + max_frame_size='max_frame_size') + + @asynctest.patch('juju.client.client.CloudFacade') - async def test_file_cred(self, mock_cf): ++ async def test_file_cred_v2(self, mock_cf): + with NamedTemporaryFile() as tempfile: + tempfile.close() + temppath = Path(tempfile.name) + temppath.write_text('cred-test') + cred = client.CloudCredential(auth_type='jsonfile', + attrs={'file': tempfile.name}) + jujudata = mock.MagicMock() + c = Controller(jujudata=jujudata) + c._connector = base.AsyncMock() + up_creds = base.AsyncMock() - mock_cf.from_connection().UpdateCredentials = up_creds ++ cloud_facade = mock_cf.from_connection() ++ cloud_facade.version = 2 ++ cloud_facade.UpdateCredentials = up_creds + await c.add_credential( + name='name', + credential=cred, + cloud='cloud', + owner='owner', + ) + assert up_creds.called + new_cred = up_creds.call_args[0][0][0].credential + assert cred.attrs['file'] == tempfile.name + assert new_cred.attrs['file'] == 'cred-test' ++ ++ @asynctest.patch('juju.client.client.CloudFacade') ++ async def test_file_cred_v3(self, mock_cf): ++ with NamedTemporaryFile() as tempfile: ++ tempfile.close() ++ temppath = Path(tempfile.name) ++ temppath.write_text('cred-test') ++ cred = client.CloudCredential(auth_type='jsonfile', ++ attrs={'file': tempfile.name}) ++ jujudata = mock.MagicMock() ++ c = Controller(jujudata=jujudata) ++ c._connector = base.AsyncMock() ++ up_creds = base.AsyncMock() ++ cloud_facade = mock_cf.from_connection() ++ cloud_facade.version = 3 ++ cloud_facade.UpdateCredentialsCheckModels = up_creds ++ await c.add_credential( ++ name='name', ++ credential=cred, ++ cloud='cloud', ++ owner='owner', ++ force=True, ++ ) ++ assert up_creds.called ++ assert up_creds.call_args[1]['force'] ++ new_cred = up_creds.call_args[1]['credentials'][0].credential ++ assert cred.attrs['file'] == tempfile.name ++ assert new_cred.attrs['file'] == 'cred-test' diff --cc modules/libjuju/tests/unit/test_registration_string.py index 0000000,0000000..f4fea44 new file mode 100644 --- /dev/null +++ b/modules/libjuju/tests/unit/test_registration_string.py @@@ -1,0 -1,0 +1,18 @@@ ++# ++# Test our placement helper ++# ++ ++import unittest ++ ++from juju.utils import generate_user_controller_access_token ++ ++ ++class TestRegistrationString(unittest.TestCase): ++ def test_generate_user_controller_access_token(self): ++ controller_name = "localhost-localhost" ++ endpoints = ["192.168.1.1:17070", "192.168.1.2:17070", "192.168.1.3:17070"] ++ username = "test-01234" ++ secret_key = "paNZrqOw51ONk1kTER6rkm4hdPcg5VgC/dzXYxtUZaM=" ++ reg_string = generate_user_controller_access_token(username, endpoints, secret_key, controller_name) ++ assert reg_string == b"MH4TCnRlc3QtMDEyMzQwORMRMTkyLjE2OC4xLjE6MTcwNzATETE5Mi4xNjguMS4yOjE3MDcwExExOTIuMTY4" \ ++ b"LjEuMzoxNzA3MAQgpaNZrqOw51ONk1kTER6rkm4hdPcg5VgC_dzXYxtUZaMTE2xvY2FsaG9zdC1sb2NhbGhvc3QA" diff --cc modules/libjuju/tox.ini index e0d6a31,0000000..350a1fc mode 100644,000000..100644 --- a/modules/libjuju/tox.ini +++ b/modules/libjuju/tox.ini @@@ -1,66 -1,0 +1,66 @@@ +# Tox (http://tox.testrun.org/) is a tool for running tests +# in multiple virtualenvs. This configuration file will run the +# test suite on all supported python versions. To use it, "pip install tox" +# and then run "tox" from this directory. + +[tox] +envlist = lint,py3 +skipsdist=True + +[pytest] +markers = + serial: mark a test that must run by itself + +[testenv] +basepython=python3 +usedevelop=True +# for testing with other python versions +commands = py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs} +passenv = + HOME + TEST_AGENTS +deps = ++ asynctest ++ ipdb ++ mock + pytest + pytest-asyncio + pytest-xdist - mock - asynctest - ipdb ++ Twine ++ # use fork to pick up fix for https://github.com/aaugustin/websockets/pull/528 ++ git+https://github.com/johnsca/websockets@bug/client-redirects#egg=websockets + +[testenv:py3] +# default tox env excludes integration and serial tests +commands = + # These need to be installed in a specific order + pip install urllib3==1.22 + pip install pylxd + py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs} + +[testenv:lint] +envdir = {toxworkdir}/py3 +commands = - flake8 --ignore E501 {posargs} juju tests - deps = - flake8 - - [testenv:lint] - envdir = {toxworkdir}/py35 - commands = - flake8 --ignore E501 {posargs} juju ++ flake8 --ignore E501,W504 {posargs} juju tests +deps = + flake8 + +[testenv:integration] +envdir = {toxworkdir}/py3 - commands = py.test --tb native -ra -v -s -n auto -k 'integration' -m 'not serial' {posargs} ++commands = ++ # These need to be installed in a specific order ++ pip install urllib3==1.22 ++ pip install pylxd ++ py.test --tb native -ra -v -s -n auto -k 'integration' -m 'not serial' {posargs} + +[testenv:serial] +# tests that can't be run in parallel +envdir = {toxworkdir}/py3 +commands = py.test --tb native -ra -v -s {posargs:-m 'serial'} + +[testenv:example] +envdir = {toxworkdir}/py3 +commands = python {posargs} + +[flake8] +exclude = juju/client/_*