--- /dev/null
+*.sw[mnop]
+.venv/
+*.pyc
+*.py~
+docs/_build/
+__pycache__/
+.tox/
+*.egg-info/
+.cache/
+.\#*
+dist/
+dev/
+.pytest_cache
+pytestdebug.log
++.vscode/
--- /dev/null
- LXD_PASSWORD="password"
+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="}}'
- - sudo lxd waitready --timeout 30
- - sudo lxc storage create default dir
- - sudo lxd init --auto --trust-password="${LXD_PASSWORD}" --network-address='[::]' --network-port=8443
+ 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:
- # 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
++ # Run lint before performing more expensive operations (fail fast/early)
++ - tox -e lint
+
- - 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}'"
++ # 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 -E sudo -u $USER -E juju bootstrap localhost test --config 'identity-url=https://api.staging.jujucharms.com/identity' --config 'allow-model-access=true'
++ # 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:
++ - juju bootstrap localhost test --config 'identity-url=https://api.staging.jujucharms.com/identity' --config 'allow-model-access=true'
+ - tox -e py3,integration,serial
--- /dev/null
- client:
+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
+
- $(PY) setup.py sdist upload
++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
++ 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
--- /dev/null
- <<<<<<< HEAD
- 0.7.3
- =======
- 0.9.1
- >>>>>>> 8a2d5bc35a302a970244b3c307a4f47deac0af63
++0.11.3
--- /dev/null
- <<<<<<< HEAD
- =======
+Changelog
+---------
+
- >>>>>>> 8a2d5bc35a302a970244b3c307a4f47deac0af63
++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
+
- <<<<<<< 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.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/)
+
+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
--- /dev/null
- def get_resources(self, details=False):
+# 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 '<application>[:<relation_name>]'
+
+ """
+ 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 '<application>[:<relation_name>]'
+
+ """
+ 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
+
- :param bool details: Include detailed info about resources used by each
- unit
-
++ async def get_resources(self):
+ """Return resources for this application.
+
- raise NotImplementedError()
++ Returns a dict mapping resource name to
++ :class:`~juju._definitions.CharmResource` instances.
+ """
- :param list to_default: A list of config options to be reset to their default value.
++ 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.
+ """
+ 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)
--- /dev/null
- from juju.client import _client1, _client2, _client3, _client4, _client5
- from juju.client._definitions import * # noqa
+# DO NOT CHANGE THIS FILE! This file is auto-generated by facade.py.
+# Changes will be overwritten/lost when the file is regenerated.
+
- "1": _client1,
++from juju.client._definitions import *
++
++from juju.client import _client2, _client1, _client3, _client4, _client5, _client8, _client7, _client9
++
+
+CLIENTS = {
- "5": _client5
+ "2": _client2,
++ "1": _client1,
+ "3": _client3,
+ "4": _client4,
- """
- Given a facade name and version, attempt to pull that facade out
- of the correct client<version>.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))
++ "5": _client5,
++ "8": _client8,
++ "7": _client7,
++ "9": _client9
+}
+
+
+def lookup_facade(name, version):
- raise Exception('No facade {} in facades {}'.format(facade_name, connection.facades))
++ """
++ Given a facade name and version, attempt to pull that facade out
++ of the correct client<version>.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))
+
+ 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
--- /dev/null
-
+# 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'}
- msg = dict(type='AgentTools', request='UpdateToolsAvailable', version=1, params=_params)
++
+
+ @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)
+
+ 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'}
- Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
++
+
+ @ReturnMapping(AllWatcherNextResults)
+ async def Next(self):
+ '''
+
- msg = dict(type='AllWatcher', request='Next', version=1, params=_params)
++ Returns -> typing.Sequence[~Delta]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='AllWatcher', request='Stop', 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)
+
+ 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'}
- msg = dict(type='ApplicationRelationsWatcher', request='Next', version=1, params=_params)
++
+
+ @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='Stop', 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)
+
+ 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'}
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++
+
+ @ReturnMapping(ErrorResults)
+ async def Rescale(self, entities):
+ '''
- msg = dict(type='ApplicationScaler', request='Rescale', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ 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):
+ '''
+
- msg = dict(type='ApplicationScaler', request='Watch', version=1, params=_params)
++ 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)
+
+ 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'}
- msg = dict(type='Backups', request='Create', version=1, params=_params)
++
+
+ @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='FinishRestore', 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='Info', 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()
- Returns -> typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
++ 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):
+ '''
+
- msg = dict(type='Backups', request='List', version=1, params=_params)
++ Returns -> typing.Sequence[~BackupsMetadataResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Backups', request='PrepareRestore', 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='Remove', 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='Restore', 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)
+ _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'}
- Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
++
+
+ @ReturnMapping(BundleChangesResults)
+ async def GetChanges(self, yaml):
+ '''
+ yaml : str
- msg = dict(type='Bundle', request='GetChanges', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class ClientFacade(Type):
- name = 'Client'
++ msg = dict(type='Bundle',
++ request='GetChanges',
++ version=1,
++ params=_params)
+ _params['yaml'] = yaml
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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,
++class CAASAgentFacade(Type):
++ name = 'CAASAgent'
+ version = 1
- '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'],
++ schema = {'definitions': {'CloudCredential': {'additionalProperties': False,
++ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+ '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'],
++ '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'},
- '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'],
++ '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'},
- '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,
++ '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'},
- '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'},
++ 'ConfigResult': {'additionalProperties': False,
++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ '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': {'$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'},
- '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'],
+ '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'},
- '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'],
++ 'LifeResult': {'additionalProperties': False,
++ 'properties': {'error': {'$ref': '#/definitions/Error'},
++ 'life': {'type': 'string'}},
++ 'required': ['life'],
+ 'type': 'object'},
- 'ModelConfigResults': {'additionalProperties': False,
- 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
- 'type': 'object'}},
- 'required': ['config'],
++ 'LifeResults': {'additionalProperties': False,
++ 'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
++ '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'],
++ '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'},
- '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'],
++ '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'},
- 'ModelSLAInfo': {'additionalProperties': False,
- 'properties': {'level': {'type': 'string'},
- 'owner': {'type': 'string'}},
- 'required': ['level', 'owner'],
++ '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'},
- 'ModelSet': {'additionalProperties': False,
- 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'}},
- 'required': ['config'],
++ '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'},
- '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'],
++ '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'},
- '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'},
++ 'LifeResult': {'additionalProperties': False,
++ 'properties': {'error': {'$ref': '#/definitions/Error'},
++ 'life': {'type': 'string'}},
++ 'required': ['life'],
+ 'type': 'object'},
- 'Placement': {'additionalProperties': False,
- 'properties': {'directive': {'type': 'string'},
- 'scope': {'type': 'string'}},
- 'required': ['scope', 'directive'],
++ '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'},
- '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'],
++ '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'},
- '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'}},
++ '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'},
- 'ResolveCharmResults': {'additionalProperties': False,
- 'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'},
- 'type': 'array'}},
- 'required': ['urls'],
++ 'StringsWatchResult': {'additionalProperties': False,
++ 'properties': {'changes': {'items': {'type': 'string'},
++ 'type': 'array'},
++ 'error': {'$ref': '#/definitions/Error'},
++ 'watcher-id': {'type': 'string'}},
++ 'required': ['watcher-id'],
+ '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'],
++ 'StringsWatchResults': {'additionalProperties': False,
++ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
++ 'type': 'array'}},
++ 'required': ['results'],
+ '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'],
++ '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'},
- 'StatusHistoryResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'history': {'$ref': '#/definitions/History'}},
- 'required': ['history'],
++ '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'},
- 'StatusHistoryResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'},
++ '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'},
- 'StatusParams': {'additionalProperties': False,
- 'properties': {'patterns': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['patterns'],
- 'type': 'object'},
++ 'InstanceTypesResults': {'additionalProperties': False,
++ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'},
+ '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'},
- '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'],
++ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ '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'}},
++ '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'}},
- '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'}},
++ 'properties': {'Cloud': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
++ 'Result': {'$ref': '#/definitions/CloudResults'}},
++ 'type': 'object'},
++ 'Clouds': {'properties': {'Result': {'$ref': '#/definitions/CloudsResult'}},
+ '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'},
++ 'Credential': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
++ 'Result': {'$ref': '#/definitions/CloudCredentialResults'}},
+ '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'}},
++ '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'},
-
++ '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):
+
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++
++ @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):
+ '''
+
- msg = dict(type='Client', request='APIHostPorts', version=1, params=_params)
++ Returns -> typing.Mapping[str, ~Cloud]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def AbortCurrentUpgrade(self):
++ msg = dict(type='Cloud',
++ request='Clouds',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> None
++ @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):
+ '''
+
- msg = dict(type='Client', request='AbortCurrentUpgrade', version=1, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def AddCharm(self, channel, url):
++ msg = dict(type='Cloud',
++ request='DefaultCloud',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- channel : str
- url : str
- Returns -> None
++ @ReturnMapping(InstanceTypesResults)
++ async def InstanceTypes(self, constraints):
+ '''
- msg = dict(type='Client', request='AddCharm', version=1, params=_params)
- _params['channel'] = channel
- _params['url'] = url
++ constraints : typing.Sequence[~CloudInstanceTypesConstraint]
++ Returns -> typing.Sequence[~InstanceTypesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def AddCharmWithAuthorization(self, channel, macaroon, url):
++ msg = dict(type='Cloud',
++ request='InstanceTypes',
++ version=1,
++ params=_params)
++ _params['constraints'] = constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- channel : str
- macaroon : Macaroon
- url : str
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def RevokeCredentials(self, entities):
+ '''
- msg = dict(type='Client', request='AddCharmWithAuthorization', version=1, params=_params)
- _params['channel'] = channel
- _params['macaroon'] = macaroon
- _params['url'] = url
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(AddMachinesResults)
- async def AddMachines(self, params):
++ msg = dict(type='Cloud',
++ request='RevokeCredentials',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
++ @ReturnMapping(ErrorResults)
++ async def UpdateCredentials(self, credentials):
+ '''
- msg = dict(type='Client', request='AddMachines', version=1, params=_params)
- _params['params'] = params
++ credentials : typing.Sequence[~UpdateCloudCredential]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(AddMachinesResults)
- async def AddMachinesV2(self, 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
+
+
+
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
++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):
+ '''
- msg = dict(type='Client', request='AddMachinesV2', version=1, params=_params)
- _params['params'] = params
++ changes : typing.Sequence[~IngressNetworksChangeEvent]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(AgentVersionResult)
- async def AgentVersion(self):
++ msg = dict(type='CrossModelRelations',
++ request='PublishIngressNetworkChanges',
++ version=1,
++ params=_params)
++ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> Number
++ @ReturnMapping(ErrorResults)
++ async def PublishRelationChanges(self, changes):
+ '''
- msg = dict(type='Client', request='AgentVersion', version=1, params=_params)
-
++ changes : typing.Sequence[~RemoteRelationChangeEvent]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(BytesResult)
- async def CACert(self):
++ msg = dict(type='CrossModelRelations',
++ request='PublishRelationChanges',
++ version=1,
++ params=_params)
++ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Sequence<+T_co>[int]
++ @ReturnMapping(RegisterRemoteRelationResults)
++ async def RegisterRemoteRelations(self, relations):
+ '''
- msg = dict(type='Client', request='CACert', version=1, params=_params)
-
++ relations : typing.Sequence[~RegisterRemoteRelationArg]
++ Returns -> typing.Sequence[~RegisterRemoteRelationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def DestroyMachines(self, force, machine_names):
++ msg = dict(type='CrossModelRelations',
++ request='RegisterRemoteRelations',
++ version=1,
++ params=_params)
++ _params['relations'] = relations
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- force : bool
- machine_names : typing.Sequence<+T_co>[str]
- Returns -> None
++ @ReturnMapping(SettingsResults)
++ async def RelationUnitSettings(self, relation_units):
+ '''
- msg = dict(type='Client', request='DestroyMachines', version=1, params=_params)
- _params['force'] = force
- _params['machine-names'] = machine_names
++ relation_units : typing.Sequence[~RemoteRelationUnit]
++ Returns -> typing.Sequence[~SettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(FindToolsResult)
- async def FindTools(self, arch, major, minor, number, series):
++ msg = dict(type='CrossModelRelations',
++ request='RelationUnitSettings',
++ version=1,
++ params=_params)
++ _params['relation-units'] = relation_units
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- arch : str
- major : int
- minor : int
- number : Number
- series : str
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>]
++ @ReturnMapping(StringsWatchResults)
++ async def WatchEgressAddressesForRelations(self, args):
+ '''
- 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
++ args : typing.Sequence[~RemoteEntityArg]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(FullStatus)
- async def FullStatus(self, patterns):
++ msg = dict(type='CrossModelRelations',
++ request='WatchEgressAddressesForRelations',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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>]
++ @ReturnMapping(OfferStatusWatchResults)
++ async def WatchOfferStatus(self, args):
+ '''
- msg = dict(type='Client', request='FullStatus', version=1, params=_params)
- _params['patterns'] = patterns
++ args : typing.Sequence[~OfferArg]
++ Returns -> typing.Sequence[~OfferStatusWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(BundleChangesResults)
- async def GetBundleChanges(self, yaml):
++ msg = dict(type='CrossModelRelations',
++ request='WatchOfferStatus',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- yaml : str
- Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
++ @ReturnMapping(RelationUnitsWatchResults)
++ async def WatchRelationUnits(self, args):
+ '''
- msg = dict(type='Client', request='GetBundleChanges', version=1, params=_params)
- _params['yaml'] = yaml
++ args : typing.Sequence[~RemoteEntityArg]
++ Returns -> typing.Sequence[~RelationUnitsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(GetConstraintsResults)
- async def GetModelConstraints(self):
++ msg = dict(type='CrossModelRelations',
++ request='WatchRelationUnits',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> Value
++ @ReturnMapping(RelationStatusWatchResults)
++ async def WatchRelationsSuspendedStatus(self, args):
+ '''
- msg = dict(type='Client', request='GetModelConstraints', version=1, params=_params)
-
++ args : typing.Sequence[~RemoteEntityArg]
++ Returns -> typing.Sequence[~RelationLifeSuspendedStatusWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
-
++ msg = dict(type='CrossModelRelations',
++ request='WatchRelationsSuspendedStatus',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(ModelConfigResults)
- async def ModelGet(self):
++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'}
+
+
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
++ @ReturnMapping(StringsResult)
++ async def APIAddresses(self):
+ '''
+
- msg = dict(type='Client', request='ModelGet', version=1, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ModelInfo)
- async def ModelInfo(self):
- '''
-
- Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
++ msg = dict(type='Deployer',
++ request='APIAddresses',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- # 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(APIHostPortsResult)
++ async def APIHostPorts(self):
+ '''
-
-
- @ReturnMapping(None)
- async def ModelSet(self, config):
- '''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- Returns -> None
+
- msg = dict(type='Client', request='ModelSet', version=1, params=_params)
- _params['config'] = config
- reply = await self.rpc(msg)
- return reply
-
++ Returns -> typing.Sequence[~HostPort]
+ '''
+ # map input types to rpc msg
+ _params = dict()
-
- @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
++ msg = dict(type='Deployer',
++ request='APIHostPorts',
++ version=1,
++ params=_params)
+
- @ReturnMapping(ModelUserInfoResults)
- async def ModelUserInfo(self):
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult>
++ @ReturnMapping(DeployerConnectionValues)
++ async def ConnectionInfo(self):
+ '''
+
- msg = dict(type='Client', request='ModelUserInfo', version=1, params=_params)
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(PrivateAddressResults)
- async def PrivateAddress(self, target):
++ msg = dict(type='Deployer',
++ request='ConnectionInfo',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- target : str
- Returns -> str
++ @ReturnMapping(LifeResults)
++ async def Life(self, entities):
+ '''
- msg = dict(type='Client', request='PrivateAddress', version=1, params=_params)
- _params['target'] = target
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ProvisioningScriptResult)
- async def ProvisioningScript(self, data_dir, disable_package_commands, machine_id, nonce):
++ msg = dict(type='Deployer',
++ request='Life',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- data_dir : str
- disable_package_commands : bool
- machine_id : str
- nonce : str
- Returns -> str
++ @ReturnMapping(StringResult)
++ async def ModelUUID(self):
+ '''
- 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
++
++ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(PublicAddressResults)
- async def PublicAddress(self, target):
++ msg = dict(type='Deployer',
++ request='ModelUUID',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- target : str
- Returns -> str
++ @ReturnMapping(ErrorResults)
++ async def Remove(self, entities):
+ '''
- msg = dict(type='Client', request='PublicAddress', version=1, params=_params)
- _params['target'] = target
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ResolveCharmResults)
- async def ResolveCharms(self, references):
++ msg = dict(type='Deployer',
++ request='Remove',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- references : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult>
++ @ReturnMapping(ErrorResults)
++ async def SetPasswords(self, changes):
+ '''
- msg = dict(type='Client', request='ResolveCharms', version=1, params=_params)
- _params['references'] = references
++ changes : typing.Sequence[~EntityPassword]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Resolved(self, retry, unit_name):
++ msg = dict(type='Deployer',
++ request='SetPasswords',
++ version=1,
++ params=_params)
++ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- retry : bool
- unit_name : str
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def SetStatus(self, entities):
+ '''
- msg = dict(type='Client', request='Resolved', version=1, params=_params)
- _params['retry'] = retry
- _params['unit-name'] = unit_name
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def RetryProvisioning(self, entities):
++ msg = dict(type='Deployer',
++ request='SetStatus',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def UpdateStatus(self, entities):
+ '''
- msg = dict(type='Client', request='RetryProvisioning', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringResult)
- async def SLALevel(self):
++ msg = dict(type='Deployer',
++ request='UpdateStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[_ForwardRef('Error'), str]
++ @ReturnMapping(NotifyWatchResult)
++ async def WatchAPIHostPorts(self):
+ '''
+
- msg = dict(type='Client', request='SLALevel', version=1, params=_params)
++ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def SetModelAgentVersion(self, version):
++ msg = dict(type='Deployer',
++ request='WatchAPIHostPorts',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- version : Number
- Returns -> None
++ @ReturnMapping(StringsWatchResults)
++ async def WatchUnits(self, entities):
+ '''
- msg = dict(type='Client', request='SetModelAgentVersion', version=1, params=_params)
- _params['version'] = version
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
-
++ msg = dict(type='Deployer',
++ request='WatchUnits',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(None)
- async def SetSLALevel(self, creds, level):
++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'}
+
+
- creds : typing.Sequence<+T_co>[int]
- level : str
- Returns -> None
++ @ReturnMapping(ExternalControllerInfoResults)
++ async def ExternalControllerInfo(self, entities):
+ '''
- msg = dict(type='Client', request='SetSLALevel', version=1, params=_params)
- _params['creds'] = creds
- _params['level'] = level
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ExternalControllerInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StatusHistoryResults)
- async def StatusHistory(self, requests):
++ msg = dict(type='ExternalControllerUpdater',
++ request='ExternalControllerInfo',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
- Returns -> typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult>
++ @ReturnMapping(ErrorResults)
++ async def SetExternalControllerInfo(self, controllers):
+ '''
- msg = dict(type='Client', request='StatusHistory', version=1, params=_params)
- _params['requests'] = requests
++ controllers : typing.Sequence[~SetExternalControllerInfoParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(AllWatcherId)
- async def WatchAll(self):
++ msg = dict(type='ExternalControllerUpdater',
++ request='SetExternalControllerInfo',
++ version=1,
++ params=_params)
++ _params['controllers'] = controllers
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> str
++ @ReturnMapping(StringsWatchResults)
++ async def WatchExternalControllers(self):
+ '''
+
- msg = dict(type='Client', request='WatchAll', version=1, params=_params)
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class CloudFacade(Type):
- name = 'Cloud'
++ msg = dict(type='ExternalControllerUpdater',
++ request='WatchExternalControllers',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'],
++class FanConfigurerFacade(Type):
++ name = 'FanConfigurer'
+ version = 1
- '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'},
++ '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'},
- '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'},
++ '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'},
- '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'}},
++ 'FirewallRule': {'additionalProperties': False,
++ 'properties': {'known-service': {'type': 'string'},
++ 'whitelist-cidrs': {'items': {'type': 'string'},
+ 'type': 'array'}},
- 'RevokeCredentials': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
++ 'required': ['known-service'],
+ 'type': 'object'},
- 'UpdateCredentials': {'properties': {'Params': {'$ref': '#/definitions/UpdateCloudCredentials'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
++ 'FirewallRuleArgs': {'additionalProperties': False,
++ 'properties': {'args': {'items': {'$ref': '#/definitions/FirewallRule'},
++ 'type': 'array'}},
++ 'required': ['args'],
+ 'type': 'object'},
- 'UserCredentials': {'properties': {'Params': {'$ref': '#/definitions/UserClouds'},
- 'Result': {'$ref': '#/definitions/StringsResults'}},
- 'type': 'object'}},
++ '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'},
-
-
- @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
-
++ 'SetFirewallRules': {'properties': {'Params': {'$ref': '#/definitions/FirewallRuleArgs'},
++ 'Result': {'$ref': '#/definitions/ErrorResults'}},
++ 'type': 'object'}},
+ 'type': 'object'}
- @ReturnMapping(CloudsResult)
- async def Clouds(self):
+
+
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud>
++ @ReturnMapping(ListFirewallRulesResults)
++ async def ListFirewallRules(self):
+ '''
+
- msg = dict(type='Cloud', request='Clouds', version=1, params=_params)
++ Returns -> typing.Sequence[~FirewallRule]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(CloudCredentialResults)
- async def Credential(self, entities):
++ msg = dict(type='FirewallRules',
++ request='ListFirewallRules',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult>
++ @ReturnMapping(ErrorResults)
++ async def SetFirewallRules(self, args):
+ '''
- msg = dict(type='Cloud', request='Credential', version=1, params=_params)
- _params['entities'] = entities
++ args : typing.Sequence[~FirewallRule]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringResult)
- async def DefaultCloud(self):
- '''
++ msg = dict(type='FirewallRules',
++ request='SetFirewallRules',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[_ForwardRef('Error'), str]
++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'}
+
- msg = dict(type='Cloud', request='DefaultCloud', version=1, params=_params)
-
++
++ @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()
- @ReturnMapping(InstanceTypesResults)
- async def InstanceTypes(self, constraints):
++ msg = dict(type='HostKeyReporter',
++ request='ReportKeys',
++ version=1,
++ params=_params)
++ _params['entity-keys'] = entity_keys
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
++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):
+ '''
- msg = dict(type='Cloud', request='InstanceTypes', version=1, params=_params)
- _params['constraints'] = constraints
++ ssh_keys : typing.Sequence[str]
++ user : str
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def RevokeCredentials(self, entities):
++ 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)
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def DeleteKeys(self, ssh_keys, user):
+ '''
- msg = dict(type='Cloud', request='RevokeCredentials', version=1, params=_params)
- _params['entities'] = entities
++ ssh_keys : typing.Sequence[str]
++ user : str
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def UpdateCredentials(self, credentials):
++ 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)
- credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def ImportKeys(self, ssh_keys, user):
+ '''
- msg = dict(type='Cloud', request='UpdateCredentials', version=1, params=_params)
- _params['credentials'] = credentials
++ ssh_keys : typing.Sequence[str]
++ user : str
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def UserCredentials(self, user_clouds):
++ 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)
- user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ async def ListKeys(self, entities, mode):
+ '''
- msg = dict(type='Cloud', request='UserCredentials', version=1, params=_params)
- _params['user-clouds'] = user_clouds
++ entities : Entities
++ mode : bool
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class DeployerFacade(Type):
- name = 'Deployer'
++ msg = dict(type='KeyManager',
++ request='ListKeys',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
++ _params['mode'] = mode
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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,
++class KeyUpdaterFacade(Type):
++ name = 'KeyUpdater'
+ version = 1
- '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'},
++ 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'},
- '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'},
+ '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'},
- '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'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ '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'}},
++ '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'},
- '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'}},
++ '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'},
-
-
- @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
-
++ 'WatchAuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
++ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
++ 'type': 'object'}},
+ 'type': 'object'}
- @ReturnMapping(APIHostPortsResult)
- async def APIHostPorts(self):
+
+
-
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++ @ReturnMapping(StringsResults)
++ async def AuthorisedKeys(self, entities):
+ '''
- msg = dict(type='Deployer', request='APIHostPorts', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(BytesResult)
- async def CACert(self):
++ msg = dict(type='KeyUpdater',
++ request='AuthorisedKeys',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Sequence<+T_co>[int]
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchAuthorisedKeys(self, entities):
+ '''
- msg = dict(type='Deployer', request='CACert', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
-
++ msg = dict(type='KeyUpdater',
++ request='WatchAuthorisedKeys',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++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):
+ '''
- msg = dict(type='Deployer', request='Life', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringResult)
- async def ModelUUID(self):
++ msg = dict(type='LifeFlag',
++ request='Life',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Union[_ForwardRef('Error'), str]
++ @ReturnMapping(NotifyWatchResults)
++ async def Watch(self, entities):
+ '''
- msg = dict(type='Deployer', request='ModelUUID', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
-
++ msg = dict(type='LifeFlag',
++ request='Watch',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(ErrorResults)
- async def SetPasswords(self, changes):
++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'}
+
+
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(LogForwardingGetLastSentResults)
++ async def GetLastSent(self, ids):
+ '''
- msg = dict(type='Deployer', request='SetPasswords', version=1, params=_params)
- _params['changes'] = changes
++ ids : typing.Sequence[~LogForwardingID]
++ Returns -> typing.Sequence[~LogForwardingGetLastSentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetStatus(self, entities):
++ msg = dict(type='LogForwarding',
++ request='GetLastSent',
++ version=1,
++ params=_params)
++ _params['ids'] = ids
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def SetLastSent(self, params):
+ '''
- msg = dict(type='Deployer', request='SetStatus', version=1, params=_params)
- _params['entities'] = entities
++ params : typing.Sequence[~LogForwardingSetLastSentParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
-
++ msg = dict(type='LogForwarding',
++ request='SetLastSent',
++ version=1,
++ params=_params)
++ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(ErrorResults)
- async def UpdateStatus(self, entities):
++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'}
+
+
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(StringResults)
++ async def LoggingConfig(self, entities):
+ '''
- msg = dict(type='Deployer', request='UpdateStatus', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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):
++ msg = dict(type='Logger',
++ request='LoggingConfig',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchLoggingConfig(self, entities):
+ '''
- msg = dict(type='Deployer', request='WatchUnits', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class HostKeyReporterFacade(Type):
- name = 'HostKeyReporter'
++ msg = dict(type='Logger',
++ request='WatchLoggingConfig',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'],
++class MachineActionsFacade(Type):
++ name = 'MachineActions'
+ version = 1
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'SSHHostKeySet': {'additionalProperties': False,
- 'properties': {'entity-keys': {'items': {'$ref': '#/definitions/SSHHostKeys'},
- 'type': 'array'}},
- 'required': ['entity-keys'],
++ 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'},
- '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,
++ 'ActionResults': {'additionalProperties': False,
++ 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
++ 'type': 'array'}},
+ 'type': 'object'},
- 'ListSSHKeys': {'additionalProperties': False,
- 'properties': {'entities': {'$ref': '#/definitions/Entities'},
- 'mode': {'type': 'boolean'}},
- 'required': ['entities', 'mode'],
- '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'},
- 'ModifyUserSSHKeys': {'additionalProperties': False,
- 'properties': {'ssh-keys': {'items': {'type': 'string'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- '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'}},
++ 'StringsWatchResult': {'additionalProperties': False,
++ 'properties': {'changes': {'items': {'type': 'string'},
+ 'type': 'array'},
- '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'}},
++ '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(ErrorResults)
- async def AddKeys(self, ssh_keys, user):
+
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++
++ @ReturnMapping(ActionResults)
++ async def Actions(self, entities):
+ '''
- msg = dict(type='KeyManager', request='AddKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def DeleteKeys(self, ssh_keys, user):
++ msg = dict(type='MachineActions',
++ request='Actions',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def BeginActions(self, entities):
+ '''
- msg = dict(type='KeyManager', request='DeleteKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def ImportKeys(self, ssh_keys, user):
++ msg = dict(type='MachineActions',
++ request='BeginActions',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def FinishActions(self, results):
+ '''
- msg = dict(type='KeyManager', request='ImportKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
++ results : typing.Sequence[~ActionExecutionResult]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringsResults)
- async def ListKeys(self, entities, mode):
++ msg = dict(type='MachineActions',
++ request='FinishActions',
++ version=1,
++ params=_params)
++ _params['results'] = results
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : Entities
- mode : bool
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ @ReturnMapping(ActionsByReceivers)
++ async def RunningActions(self, entities):
+ '''
- msg = dict(type='KeyManager', request='ListKeys', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionsByReceiver]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- _params['mode'] = mode
++ msg = dict(type='MachineActions',
++ request='RunningActions',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
- class KeyUpdaterFacade(Type):
- name = 'KeyUpdater'
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- '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'}},
++ @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'},
-
++ '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):
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++
++ @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):
+ '''
- msg = dict(type='KeyUpdater', request='AuthorisedKeys', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ProviderInterfaceInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def WatchAuthorisedKeys(self, entities):
++ msg = dict(type='MachineUndertaker',
++ request='GetMachineProviderInterfaceInfo',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ async def WatchMachineRemovals(self, entities):
+ '''
- msg = dict(type='KeyUpdater', request='WatchAuthorisedKeys', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class LifeFlagFacade(Type):
- name = 'LifeFlag'
++ msg = dict(type='MachineUndertaker',
++ request='WatchMachineRemovals',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Entities': {'additionalProperties': False,
++class MachinerFacade(Type):
++ name = 'Machiner'
+ version = 1
- 'type': 'object'}},
- 'properties': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
++ 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'}},
++ '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'},
++ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
++ '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>
++
++ @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):
+ '''
- msg = dict(type='LifeFlag', request='Life', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def Watch(self, entities):
++ msg = dict(type='Machiner',
++ request='EnsureDead',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(JobsResults)
++ async def Jobs(self, entities):
+ '''
- msg = dict(type='LifeFlag', request='Watch', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~JobsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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'}
-
++ msg = dict(type='Machiner',
++ request='Jobs',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(LogForwardingGetLastSentResults)
- async def GetLastSent(self, ids):
++ @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
++
++
+
- ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
- Returns -> typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
++ @ReturnMapping(StringResult)
++ async def ModelUUID(self):
+ '''
- msg = dict(type='LogForwarding', request='GetLastSent', version=1, params=_params)
- _params['ids'] = ids
++
++ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetLastSent(self, params):
++ msg = dict(type='Machiner',
++ request='ModelUUID',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def SetMachineAddresses(self, machine_addresses):
+ '''
- msg = dict(type='LogForwarding', request='SetLastSent', version=1, params=_params)
- _params['params'] = params
++ machine_addresses : typing.Sequence[~MachineAddresses]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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'}
-
++ msg = dict(type='Machiner',
++ request='SetMachineAddresses',
++ version=1,
++ params=_params)
++ _params['machine-addresses'] = machine_addresses
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- @ReturnMapping(StringResults)
- async def LoggingConfig(self, entities):
++ @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
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++
++
++ @ReturnMapping(ErrorResults)
++ async def SetProviderNetworkConfig(self, entities):
+ '''
- msg = dict(type='Logger', request='LoggingConfig', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def WatchLoggingConfig(self, entities):
++ msg = dict(type='Machiner',
++ request='SetProviderNetworkConfig',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(ErrorResults)
++ async def SetStatus(self, entities):
+ '''
- msg = dict(type='Logger', request='WatchLoggingConfig', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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):
++ msg = dict(type='Machiner',
++ request='SetStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ @ReturnMapping(ErrorResults)
++ async def UpdateStatus(self, entities):
+ '''
- msg = dict(type='MachineActions', request='Actions', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def BeginActions(self, entities):
++ msg = dict(type='Machiner',
++ request='UpdateStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(NotifyWatchResults)
++ async def Watch(self, entities):
+ '''
- msg = dict(type='MachineActions', request='BeginActions', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def FinishActions(self, results):
++ msg = dict(type='Machiner',
++ request='Watch',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(NotifyWatchResult)
++ async def WatchAPIHostPorts(self):
+ '''
- msg = dict(type='MachineActions', request='FinishActions', version=1, params=_params)
- _params['results'] = results
++
++ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ActionsByReceivers)
- async def RunningActions(self, entities):
++ msg = dict(type='Machiner',
++ request='WatchAPIHostPorts',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
++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):
+ '''
- msg = dict(type='MachineActions', request='RunningActions', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MeterStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringsWatchResults)
- async def WatchActionNotifications(self, entities):
++ msg = dict(type='MeterStatus',
++ request='GetMeterStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchMeterStatus(self, entities):
+ '''
- msg = dict(type='MachineActions', request='WatchActionNotifications', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MachineUndertakerFacade(Type):
- name = 'MachineUndertaker'
++ msg = dict(type='MeterStatus',
++ request='WatchMeterStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- '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'},
++class MetricsManagerFacade(Type):
++ name = 'MetricsManager'
+ version = 1
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ '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'}},
+ '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'},
-
-
- @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
-
++ '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'}
- async def CompleteMachineRemovals(self, entities):
+
+
+ @ReturnMapping(None)
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ async def AddJujuMachineMetrics(self):
+ '''
- msg = dict(type='MachineUndertaker', request='CompleteMachineRemovals', version=1, params=_params)
- _params['entities'] = entities
++
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ProviderInterfaceInfoResults)
- async def GetMachineProviderInterfaceInfo(self, entities):
++ msg = dict(type='MetricsManager',
++ request='AddJujuMachineMetrics',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
++ @ReturnMapping(ErrorResults)
++ async def CleanupOldMetrics(self, entities):
+ '''
- msg = dict(type='MachineUndertaker', request='GetMachineProviderInterfaceInfo', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def WatchMachineRemovals(self, entities):
++ msg = dict(type='MetricsManager',
++ request='CleanupOldMetrics',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(ErrorResults)
++ async def SendMetrics(self, entities):
+ '''
- msg = dict(type='MachineUndertaker', request='WatchMachineRemovals', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MachinerFacade(Type):
- name = 'Machiner'
++ msg = dict(type='MetricsManager',
++ request='SendMetrics',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'},
++class MigrationFlagFacade(Type):
++ name = 'MigrationFlag'
+ version = 1
- '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'}},
++ 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'},
- 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
++ 'PhaseResult': {'additionalProperties': False,
++ 'properties': {'error': {'$ref': '#/definitions/Error'},
++ 'phase': {'type': 'string'}},
+ 'type': 'object'},
- 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
++ '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'},
- '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'}},
++ 'ErrorInfo': {'additionalProperties': False,
++ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
++ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
- 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
- 'type': 'object'},
- 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- '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'},
- 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- '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'},
- 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
++ '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'},
- 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'}},
++ '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'},
-
++ 'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
++ 'type': 'object'}},
+ 'type': 'object'}
- @ReturnMapping(StringsResult)
- async def APIAddresses(self):
+
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
++
++ @ReturnMapping(SerializedModel)
++ async def Export(self):
+ '''
+
- msg = dict(type='Machiner', request='APIAddresses', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[int], typing.Sequence[str], typing.Sequence[~SerializedModelTools]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(APIHostPortsResult)
- async def APIHostPorts(self):
++ msg = dict(type='MigrationMaster',
++ request='Export',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++ @ReturnMapping(MasterMigrationStatus)
++ async def MigrationStatus(self):
+ '''
+
- msg = dict(type='Machiner', request='APIHostPorts', version=1, params=_params)
++ Returns -> typing.Union[str, _ForwardRef('MigrationSpec')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(BytesResult)
- async def CACert(self):
++ msg = dict(type='MigrationMaster',
++ request='MigrationStatus',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Sequence<+T_co>[int]
++ @ReturnMapping(MinionReports)
++ async def MinionReports(self):
+ '''
+
- msg = dict(type='Machiner', request='CACert', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], str, int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def EnsureDead(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='MigrationMaster',
++ request='MinionReports',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- # 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(MigrationModelInfo)
++ async def ModelInfo(self):
+ '''
-
-
- @ReturnMapping(JobsResults)
- async def Jobs(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~JobsResult]<~JobsResult>
+
- msg = dict(type='Machiner', request='Jobs', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
++ Returns -> typing.Union[_ForwardRef('Number'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
-
- @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
++ msg = dict(type='MigrationMaster',
++ request='ModelInfo',
++ version=1,
++ params=_params)
+
- @ReturnMapping(StringResult)
- async def ModelUUID(self):
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[_ForwardRef('Error'), str]
++ @ReturnMapping(None)
++ async def Prechecks(self):
+ '''
+
- msg = dict(type='Machiner', request='ModelUUID', version=1, params=_params)
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SetMachineAddresses(self, machine_addresses):
++ msg = dict(type='MigrationMaster',
++ request='Prechecks',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(None)
++ async def Reap(self):
+ '''
- msg = dict(type='Machiner', request='SetMachineAddresses', version=1, params=_params)
- _params['machine-addresses'] = machine_addresses
++
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetObservedNetworkConfig(self, config, tag):
++ msg = dict(type='MigrationMaster',
++ request='Reap',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
- tag : str
++ async def SetPhase(self, phase):
+ '''
- msg = dict(type='Machiner', request='SetObservedNetworkConfig', version=1, params=_params)
- _params['config'] = config
- _params['tag'] = tag
++ phase : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SetProviderNetworkConfig(self, entities):
++ msg = dict(type='MigrationMaster',
++ request='SetPhase',
++ version=1,
++ params=_params)
++ _params['phase'] = phase
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(None)
++ async def SetStatusMessage(self, message):
+ '''
- msg = dict(type='Machiner', request='SetProviderNetworkConfig', version=1, params=_params)
- _params['entities'] = entities
++ message : str
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SetStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='MigrationMaster',
++ request='SetStatusMessage',
++ version=1,
++ params=_params)
++ _params['message'] = message
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- # 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(NotifyWatchResult)
++ async def Watch(self):
+ '''
-
- @ReturnMapping(ErrorResults)
- async def UpdateStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+
- msg = dict(type='Machiner', request='UpdateStatus', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
++ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @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
++ msg = dict(type='MigrationMaster',
++ request='Watch',
++ version=1,
++ params=_params)
+
- async def WatchAPIHostPorts(self):
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResult)
- msg = dict(type='Machiner', request='WatchAPIHostPorts', version=1, params=_params)
++ async def WatchMinionReports(self):
+ '''
+
+ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MeterStatusFacade(Type):
- name = 'MeterStatus'
++ msg = dict(type='MigrationMaster',
++ request='WatchMinionReports',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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,
++class MigrationMinionFacade(Type):
++ name = 'MigrationMinion'
+ version = 1
- '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'},
++ 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'},
- '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'],
++ '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'],
- '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'}},
++ 'type': 'object'}},
++ 'properties': {'Report': {'properties': {'Params': {'$ref': '#/definitions/MinionReport'}},
+ 'type': 'object'},
-
++ 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
++ 'type': 'object'}},
+ 'type': 'object'}
- async def AddJujuMachineMetrics(self):
++
+
+ @ReturnMapping(None)
-
++ async def Report(self, migration_id, phase, success):
+ '''
- 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
++ migration_id : str
++ phase : str
++ success : bool
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SendMetrics(self, 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
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(NotifyWatchResult)
++ async def Watch(self):
+ '''
- msg = dict(type='MetricsManager', request='SendMetrics', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MigrationFlagFacade(Type):
- name = 'MigrationFlag'
++ msg = dict(type='MigrationMinion',
++ request='Watch',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'}},
++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'}},
++ 'type': 'object'},
++ 'Stop': {'type': 'object'}},
+ 'type': 'object'}
- @ReturnMapping(PhaseResults)
- async def Phase(self, entities):
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult>
++
++ @ReturnMapping(MigrationStatus)
++ async def Next(self):
+ '''
- msg = dict(type='MigrationFlag', request='Phase', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> typing.Union[int, str, typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def Watch(self, entities):
++ msg = dict(type='MigrationStatusWatcher',
++ request='Next',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(None)
++ async def Stop(self):
+ '''
- msg = dict(type='MigrationFlag', request='Watch', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MigrationMasterFacade(Type):
- name = 'MigrationMaster'
++ msg = dict(type='MigrationStatusWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++class MigrationTargetFacade(Type):
++ name = 'MigrationTarget'
+ version = 1
- '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'},
++ 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'},
- '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'},
+ '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'},
- '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'}},
++ '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'],
- 'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}},
- 'type': 'object'},
- 'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}},
++ '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'},
- 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}},
++ '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'},
- 'Prechecks': {'type': 'object'},
- 'Reap': {'type': 'object'},
- 'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}},
++ 'ModelSet': {'additionalProperties': False,
++ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
++ 'type': 'object'}},
++ 'type': 'object'}},
++ 'required': ['config'],
+ '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'}},
++ '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(SerializedModel)
- async def Export(self):
+
- Returns -> typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
++
++ @ReturnMapping(ModelConfigResults)
++ async def ModelGet(self):
+ '''
+
- msg = dict(type='MigrationMaster', request='Export', version=1, params=_params)
++ Returns -> typing.Mapping[str, ~ConfigValue]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(MasterMigrationStatus)
- async def MigrationStatus(self):
++ msg = dict(type='ModelConfig',
++ request='ModelGet',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Union[str, _ForwardRef('MigrationSpec')]
++ @ReturnMapping(None)
++ async def ModelSet(self, config):
+ '''
- msg = dict(type='MigrationMaster', request='MigrationStatus', version=1, params=_params)
++ config : typing.Mapping[str, typing.Any]
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(MinionReports)
- async def MinionReports(self):
++ 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
+
+
+
- Returns -> typing.Union[typing.Sequence<+T_co>[str], int]
++ @ReturnMapping(StringResult)
++ async def SLALevel(self):
+ '''
+
- msg = dict(type='MigrationMaster', request='MinionReports', version=1, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(MigrationModelInfo)
- async def ModelInfo(self):
++ msg = dict(type='ModelConfig',
++ request='SLALevel',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[_ForwardRef('Number'), str]
++ @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
+
- msg = dict(type='MigrationMaster', request='ModelInfo', version=1, params=_params)
-
++
++
++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()
- @ReturnMapping(None)
- async def Prechecks(self):
++ msg = dict(type='ModelUpgrader',
++ request='ModelEnvironVersion',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> None
++ @ReturnMapping(IntResults)
++ async def ModelTargetEnvironVersion(self, entities):
+ '''
- msg = dict(type='MigrationMaster', request='Prechecks', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~IntResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Reap(self):
++ msg = dict(type='ModelUpgrader',
++ request='ModelTargetEnvironVersion',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def SetModelEnvironVersion(self, models):
+ '''
- msg = dict(type='MigrationMaster', request='Reap', version=1, params=_params)
-
++ models : typing.Sequence[~SetModelEnvironVersion]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def SetPhase(self, phase):
++ msg = dict(type='ModelUpgrader',
++ request='SetModelEnvironVersion',
++ version=1,
++ params=_params)
++ _params['models'] = models
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- phase : str
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def SetModelStatus(self, entities):
+ '''
- msg = dict(type='MigrationMaster', request='SetPhase', version=1, params=_params)
- _params['phase'] = phase
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def SetStatusMessage(self, message):
++ msg = dict(type='ModelUpgrader',
++ request='SetModelStatus',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- message : str
- Returns -> None
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchModelEnvironVersion(self, entities):
+ '''
- msg = dict(type='MigrationMaster', request='SetStatusMessage', version=1, params=_params)
- _params['message'] = message
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResult)
- async def Watch(self):
++ msg = dict(type='ModelUpgrader',
++ request='WatchModelEnvironVersion',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[str, _ForwardRef('Error')]
++class NotifyWatcherFacade(Type):
++ name = 'NotifyWatcher'
++ version = 1
++ schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
++ 'type': 'object'}
++
++
++ @ReturnMapping(None)
++ async def Next(self):
+ '''
+
- msg = dict(type='MigrationMaster', request='Watch', version=1, params=_params)
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResult)
- async def WatchMinionReports(self):
++ msg = dict(type='NotifyWatcher',
++ request='Next',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[str, _ForwardRef('Error')]
++ @ReturnMapping(None)
++ async def Stop(self):
+ '''
+
- msg = dict(type='MigrationMaster', request='WatchMinionReports', version=1, params=_params)
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class MigrationMinionFacade(Type):
- name = 'MigrationMinion'
++ msg = dict(type='NotifyWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++class OfferStatusWatcherFacade(Type):
++ name = 'OfferStatusWatcher'
+ version = 1
- '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'}},
++ 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'},
-
++ '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)
+
- Returns -> typing.Union[int, typing.Sequence<+T_co>[str]]
++
++ @ReturnMapping(OfferStatusWatchResult)
+ async def Next(self):
+ '''
+
- msg = dict(type='MigrationStatusWatcher', request='Next', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[~OfferStatusChange], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='MigrationStatusWatcher', request='Stop', 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()
- class MigrationTargetFacade(Type):
- name = 'MigrationTarget'
++ msg = dict(type='OfferStatusWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'}},
++class PayloadsFacade(Type):
++ name = 'Payloads'
+ 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'}},
+ 'type': 'object'}
- @ReturnMapping(None)
- async def Abort(self, model_tag):
+
- model_tag : str
- Returns -> None
++
++ @ReturnMapping(PayloadListResults)
++ async def List(self, patterns):
+ '''
- msg = dict(type='MigrationTarget', request='Abort', version=1, params=_params)
- _params['model-tag'] = model_tag
++ patterns : typing.Sequence[str]
++ Returns -> typing.Sequence[~Payload]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Activate(self, model_tag):
++ msg = dict(type='Payloads',
++ request='List',
++ version=1,
++ params=_params)
++ _params['patterns'] = patterns
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- model_tag : str
- Returns -> None
++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):
+ '''
- msg = dict(type='MigrationTarget', request='Activate', version=1, params=_params)
- _params['model-tag'] = model_tag
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~PayloadResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def AdoptResources(self, model_tag, source_controller_version):
++ msg = dict(type='PayloadsHookContext',
++ request='List',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- model_tag : str
- source_controller_version : Number
- Returns -> None
++ @ReturnMapping(PayloadResults)
++ async def LookUp(self, args):
+ '''
- msg = dict(type='MigrationTarget', request='AdoptResources', version=1, params=_params)
- _params['model-tag'] = model_tag
- _params['source-controller-version'] = source_controller_version
++ args : typing.Sequence[~LookUpPayloadArg]
++ Returns -> typing.Sequence[~PayloadResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(BytesResult)
- async def CACert(self):
++ msg = dict(type='PayloadsHookContext',
++ request='LookUp',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Sequence<+T_co>[int]
++ @ReturnMapping(PayloadResults)
++ async def SetStatus(self, args):
+ '''
- msg = dict(type='MigrationTarget', request='CACert', version=1, params=_params)
-
++ args : typing.Sequence[~SetPayloadStatusArg]
++ Returns -> typing.Sequence[~PayloadResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Import(self, bytes_, charms, tools):
++ msg = dict(type='PayloadsHookContext',
++ request='SetStatus',
++ version=1,
++ params=_params)
++ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- bytes_ : typing.Sequence<+T_co>[int]
- charms : typing.Sequence<+T_co>[str]
- tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
- Returns -> None
++ @ReturnMapping(PayloadResults)
++ async def Track(self, payloads):
+ '''
- msg = dict(type='MigrationTarget', request='Import', version=1, params=_params)
- _params['bytes'] = bytes_
- _params['charms'] = charms
- _params['tools'] = tools
++ payloads : typing.Sequence[~Payload]
++ Returns -> typing.Sequence[~PayloadResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(str)
- async def LatestLogTime(self, model_tag):
++ msg = dict(type='PayloadsHookContext',
++ request='Track',
++ version=1,
++ params=_params)
++ _params['payloads'] = payloads
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- model_tag : str
- Returns -> str
++ @ReturnMapping(PayloadResults)
++ async def Untrack(self, entities):
+ '''
- msg = dict(type='MigrationTarget', request='LatestLogTime', version=1, params=_params)
- _params['model-tag'] = model_tag
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~PayloadResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def Prechecks(self, agent_version, name, owner_tag, uuid):
++ 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)
- agent_version : Number
- name : str
- owner_tag : str
- uuid : str
++ async def Ping(self):
+ '''
- 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
-
++
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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):
++ msg = dict(type='Pinger',
++ request='Ping',
++ version=1,
++ params=_params)
+
++ reply = await self.rpc(msg)
++ return reply
+
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
++
++
++ @ReturnMapping(None)
++ async def Stop(self):
+ '''
+
- msg = dict(type='ModelConfig', request='ModelGet', version=1, params=_params)
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def ModelSet(self, config):
++ msg = dict(type='Pinger',
++ request='Stop',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- Returns -> None
++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):
+ '''
- msg = dict(type='ModelConfig', request='ModelSet', version=1, params=_params)
- _params['config'] = config
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ProxyConfigResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def ModelUnset(self, keys):
++ msg = dict(type='ProxyUpdater',
++ request='ProxyConfig',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- keys : typing.Sequence<+T_co>[str]
- Returns -> None
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
+ '''
- msg = dict(type='ModelConfig', request='ModelUnset', version=1, params=_params)
- _params['keys'] = keys
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringResult)
- async def SLALevel(self):
++ msg = dict(type='ProxyUpdater',
++ request='WatchForProxyConfigAndAPIHostPortChanges',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[_ForwardRef('Error'), str]
++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):
+ '''
+
- msg = dict(type='ModelConfig', request='SLALevel', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[~RelationLifeSuspendedStatusChange], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetSLALevel(self, creds, level):
++ msg = dict(type='RelationStatusWatcher',
++ request='Next',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
- creds : typing.Sequence<+T_co>[int]
- level : str
++ async def Stop(self):
+ '''
- msg = dict(type='ModelConfig', request='SetSLALevel', version=1, params=_params)
- _params['creds'] = creds
- _params['level'] = level
++
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class NotifyWatcherFacade(Type):
- name = 'NotifyWatcher'
++ msg = dict(type='RelationStatusWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
++class RelationUnitsWatcherFacade(Type):
++ name = 'RelationUnitsWatcher'
+ 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'},
++ '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)
+
- Returns -> None
++
++ @ReturnMapping(RelationUnitsWatchResult)
+ async def Next(self):
+ '''
+
- msg = dict(type='NotifyWatcher', request='Next', version=1, params=_params)
++ Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='NotifyWatcher', request='Stop', 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()
- class PayloadsFacade(Type):
- name = 'Payloads'
++ msg = dict(type='RelationUnitsWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'}},
++class RemoteApplicationWatcherFacade(Type):
++ name = 'RemoteApplicationWatcher'
+ 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'},
++ '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):
+
- patterns : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~Payload]<~Payload>
++
++ @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):
+ '''
- msg = dict(type='Payloads', request='List', version=1, params=_params)
- _params['patterns'] = patterns
++
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class PayloadsHookContextFacade(Type):
- name = 'PayloadsHookContext'
++ msg = dict(type='RemoteApplicationWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Entities': {'additionalProperties': False,
++class RemoteRelationsFacade(Type):
++ name = 'RemoteRelations'
+ version = 1
- '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'},
++ 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'},
- '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'],
++ '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'},
- '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'],
++ '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'},
- 'SetPayloadStatusArgs': {'additionalProperties': False,
- 'properties': {'args': {'items': {'$ref': '#/definitions/SetPayloadStatusArg'},
- 'type': 'array'}},
- 'required': ['args'],
++ 'RelationUnitsChange': {'additionalProperties': False,
++ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
++ 'type': 'object'},
++ 'departed': {'items': {'type': 'string'},
++ 'type': 'array'}},
++ 'required': ['changed'],
+ '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'}},
++ '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'},
- 'Track': {'properties': {'Params': {'$ref': '#/definitions/TrackPayloadArgs'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'},
- 'Untrack': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'}},
++ 'RemoteEntityTokenArgs': {'additionalProperties': False,
++ 'properties': {'Args': {'items': {'$ref': '#/definitions/RemoteEntityTokenArg'},
++ 'type': 'array'}},
++ 'required': ['Args'],
++ 'type': 'object'},
++ 'RemoteRelation': {'additionalProperties': False,
++ 'properties': {'application-name': {'type': 'string'},
++ 'endpoint': {'$ref': '#/definitions/RemoteEndpoint'},
++ 'id': {'type': 'integer'},
++ 'key': {'type': 'string'},
++ 'life': {'type': 'string'},
++ 'remote-application-name': {'type': 'string'},
++ 'remote-endpoint-name': {'type': 'string'},
++ 'source-model-uuid': {'type': 'string'},
++ 'suspended': {'type': 'boolean'}},
++ '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'},
-
++ '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):
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
++
++ @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]
+ '''
- msg = dict(type='PayloadsHookContext', request='List', version=1, params=_params)
++ # 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()
- @ReturnMapping(PayloadResults)
- async def LookUp(self, args):
++ msg = dict(type='RemoteRelations',
++ request='Relations',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
++ @ReturnMapping(RemoteApplicationResults)
++ async def RemoteApplications(self, entities):
+ '''
- msg = dict(type='PayloadsHookContext', request='LookUp', version=1, params=_params)
- _params['args'] = args
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~RemoteApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(PayloadResults)
- async def SetStatus(self, args):
++ msg = dict(type='RemoteRelations',
++ request='RemoteApplications',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
++ @ReturnMapping(ErrorResults)
++ async def SaveMacaroons(self, args):
+ '''
- msg = dict(type='PayloadsHookContext', request='SetStatus', version=1, params=_params)
- _params['args'] = args
++ args : typing.Sequence[~EntityMacaroonArg]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(PayloadResults)
- async def Track(self, payloads):
++ msg = dict(type='RemoteRelations',
++ request='SaveMacaroons',
++ version=1,
++ params=_params)
++ _params['Args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
++ @ReturnMapping(ErrorResults)
++ async def SetRemoteApplicationsStatus(self, entities):
+ '''
- msg = dict(type='PayloadsHookContext', request='Track', version=1, params=_params)
- _params['payloads'] = payloads
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(PayloadResults)
- async def Untrack(self, entities):
++ msg = dict(type='RemoteRelations',
++ request='SetRemoteApplicationsStatus',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
++ @ReturnMapping(RelationUnitsWatchResults)
++ async def WatchLocalRelationUnits(self, entities):
+ '''
- msg = dict(type='PayloadsHookContext', request='Untrack', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~RelationUnitsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class PingerFacade(Type):
- name = 'Pinger'
++ msg = dict(type='RemoteRelations',
++ request='WatchLocalRelationUnits',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}},
++ @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 = {'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):
+
- Returns -> None
++
++ @ReturnMapping(RemoteRelationsWatchResult)
++ async def Next(self):
+ '''
+
- msg = dict(type='Pinger', request='Ping', version=1, params=_params)
++ Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Pinger', request='Stop', 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()
- class ProxyUpdaterFacade(Type):
- name = 'ProxyUpdater'
++ msg = dict(type='RemoteRelationsWatcher',
++ request='Stop',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
++class ResourcesFacade(Type):
++ name = 'Resources'
+ version = 1
- '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'},
++ 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'},
- 'required': ['results'],
++ 'ErrorResult': {'additionalProperties': False,
++ 'properties': {'error': {'$ref': '#/definitions/Error'}},
++ 'type': 'object'},
++ 'ListResourcesArgs': {'additionalProperties': False,
++ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
- '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'}},
++ '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'}},
+ 'type': 'object'}
- @ReturnMapping(ProxyConfigResults)
- async def ProxyConfig(self, entities):
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult>
++
++ @ReturnMapping(AddPendingResourcesResult)
++ async def AddPendingResources(self, addcharmwithauthorization, entity, resources):
+ '''
- msg = dict(type='ProxyUpdater', request='ProxyConfig', version=1, params=_params)
- _params['entities'] = entities
++ addcharmwithauthorization : AddCharmWithAuthorization
++ entity : Entity
++ resources : typing.Sequence[~CharmResource]
++ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def WatchForProxyConfigAndAPIHostPortChanges(self, 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
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(ResourcesResults)
++ async def ListResources(self, entities):
+ '''
- msg = dict(type='ProxyUpdater', request='WatchForProxyConfigAndAPIHostPortChanges', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ResourcesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class RelationUnitsWatcherFacade(Type):
- name = 'RelationUnitsWatcher'
++ msg = dict(type='Resources',
++ request='ListResources',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++class ResourcesHookContextFacade(Type):
++ name = 'ResourcesHookContext'
+ version = 1
- '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'}},
++ 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'},
-
-
- @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
++ '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(None)
- async def Stop(self):
+
+
-
- Returns -> None
++ @ReturnMapping(UnitResourcesResult)
++ async def GetResourceInfo(self, resource_names):
+ '''
- msg = dict(type='RelationUnitsWatcher', request='Stop', version=1, params=_params)
-
++ resource_names : typing.Sequence[str]
++ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[~UnitResourceResult]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class RemoteApplicationWatcherFacade(Type):
- name = 'RemoteApplicationWatcher'
++ msg = dict(type='ResourcesHookContext',
++ request='GetResourceInfo',
++ version=1,
++ params=_params)
++ _params['resource-names'] = resource_names
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++class RetryStrategyFacade(Type):
++ name = 'RetryStrategy'
+ version = 1
- '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'}},
++ 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'},
++ '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):
+
-
- Returns -> typing.Union[_ForwardRef('RemoteApplicationChange'), _ForwardRef('Error'), str]
++
++ @ReturnMapping(RetryStrategyResults)
++ async def RetryStrategy(self, entities):
+ '''
- msg = dict(type='RemoteApplicationWatcher', request='Next', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~RetryStrategyResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Stop(self):
++ msg = dict(type='RetryStrategy',
++ request='RetryStrategy',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> None
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchRetryStrategy(self, entities):
+ '''
- msg = dict(type='RemoteApplicationWatcher', request='Stop', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class RemoteRelationsWatcherFacade(Type):
- name = 'RemoteRelationsWatcher'
++ msg = dict(type='RetryStrategy',
++ request='WatchRetryStrategy',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++class SSHClientFacade(Type):
++ name = 'SSHClient'
+ version = 1
- 'RemoteEntityId': {'additionalProperties': False,
- 'properties': {'model-uuid': {'type': 'string'},
- 'token': {'type': 'string'}},
- 'required': ['model-uuid', 'token'],
++ 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'},
- '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'}},
++ '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(RemoteRelationsWatchResult)
- async def Next(self):
+
- Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')]
++
++ @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):
+ '''
+
- msg = dict(type='RemoteRelationsWatcher', request='Next', version=1, params=_params)
++ Returns -> bool
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Stop(self):
++ msg = dict(type='SSHClient',
++ request='Proxy',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> None
++ @ReturnMapping(SSHAddressResults)
++ async def PublicAddress(self, entities):
+ '''
- msg = dict(type='RemoteRelationsWatcher', request='Stop', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~SSHAddressResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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'}},
++ 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 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):
+
- addcharmwithauthorization : AddCharmWithAuthorization
- entity : Entity
- resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
- Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[str]]
++
++ @ReturnMapping(ErrorResults)
++ async def Claim(self, claims):
+ '''
- msg = dict(type='Resources', request='AddPendingResources', version=1, params=_params)
- _params['AddCharmWithAuthorization'] = addcharmwithauthorization
- _params['Entity'] = entity
- _params['Resources'] = resources
++ claims : typing.Sequence[~SingularClaim]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ResourcesResults)
- async def ListResources(self, entities):
++ msg = dict(type='Singular',
++ request='Claim',
++ version=1,
++ params=_params)
++ _params['claims'] = claims
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
++ @ReturnMapping(ErrorResults)
++ async def Wait(self, entities):
+ '''
- msg = dict(type='Resources', request='ListResources', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class ResourcesHookContextFacade(Type):
- name = 'ResourcesHookContext'
++ msg = dict(type='Singular',
++ request='Wait',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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,
++class StringsWatcherFacade(Type):
++ name = 'StringsWatcher'
+ version = 1
- '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'},
++ 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'},
- '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'}},
+ '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(UnitResourcesResult)
- async def GetResourceInfo(self, resource_names):
+
- resource_names : typing.Sequence<+T_co>[str]
- Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>]
++
++ @ReturnMapping(StringsWatchResult)
++ async def Next(self):
+ '''
- msg = dict(type='ResourcesHookContext', request='GetResourceInfo', version=1, params=_params)
- _params['resource-names'] = resource_names
++
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class RetryStrategyFacade(Type):
- name = 'RetryStrategy'
++ msg = dict(type='StringsWatcher',
++ request='Next',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'},
++ @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
- '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'}},
++ 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'},
- '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'}},
++ '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,
++ '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):
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
++
++ @ReturnMapping(ModelConfigResult)
++ async def ModelConfig(self):
+ '''
- msg = dict(type='RetryStrategy', request='RetryStrategy', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def WatchRetryStrategy(self, entities):
++ msg = dict(type='Undertaker',
++ request='ModelConfig',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(UndertakerModelInfoResult)
++ async def ModelInfo(self):
+ '''
- msg = dict(type='RetryStrategy', request='WatchRetryStrategy', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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):
++ msg = dict(type='Undertaker',
++ request='ModelInfo',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
++ @ReturnMapping(None)
++ async def ProcessDyingModel(self):
+ '''
- msg = dict(type='SSHClient', request='PrivateAddress', version=1, params=_params)
- _params['entities'] = entities
++
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(SSHProxyResult)
- async def Proxy(self):
++ msg = dict(type='Undertaker',
++ request='ProcessDyingModel',
++ version=1,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> bool
++ @ReturnMapping(None)
++ async def RemoveModel(self):
+ '''
+
- msg = dict(type='SSHClient', request='Proxy', version=1, params=_params)
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(SSHAddressResults)
- async def PublicAddress(self, entities):
++ msg = dict(type='Undertaker',
++ request='RemoveModel',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
++ @ReturnMapping(ErrorResults)
++ async def SetStatus(self, entities):
+ '''
- msg = dict(type='SSHClient', request='PublicAddress', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(SSHPublicKeysResults)
- async def PublicKeys(self, entities):
++ msg = dict(type='Undertaker',
++ request='SetStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
++ @ReturnMapping(ErrorResults)
++ async def UpdateStatus(self, entities):
+ '''
- msg = dict(type='SSHClient', request='PublicKeys', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class SingularFacade(Type):
- name = 'Singular'
++ msg = dict(type='Undertaker',
++ request='UpdateStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 'SingularClaim': {'additionalProperties': False,
- 'properties': {'controller-tag': {'type': 'string'},
- 'duration': {'type': 'integer'},
- 'model-tag': {'type': 'string'}},
- 'required': ['model-tag',
- 'controller-tag',
- 'duration'],
++ @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'},
- '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'}},
++ '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'}
- async def Claim(self, claims):
++
+
+ @ReturnMapping(ErrorResults)
- claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def AssignUnits(self, entities):
+ '''
- msg = dict(type='Singular', request='Claim', version=1, params=_params)
- _params['claims'] = claims
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def Wait(self, entities):
++ msg = dict(type='UnitAssigner',
++ request='AssignUnits',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def SetAgentStatus(self, entities):
+ '''
- msg = dict(type='Singular', request='Wait', version=1, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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'}
-
-
++ msg = dict(type='UnitAssigner',
++ request='SetAgentStatus',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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):
+ @ReturnMapping(StringsWatchResult)
- Returns -> None
++ async def WatchUnitAssignments(self):
+ '''
+
- msg = dict(type='StringsWatcher', request='Stop', version=1, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class UndertakerFacade(Type):
- name = 'Undertaker'
++ msg = dict(type='UnitAssigner',
++ request='WatchUnitAssignments',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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'},
++class UpgradeSeriesFacade(Type):
++ name = 'UpgradeSeries'
+ version = 1
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'ModelConfigResult': {'additionalProperties': False,
- 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'}},
- 'required': ['config'],
- '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'],
- '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,
++ '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'},
- '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'}},
++ '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'},
- 'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
++ '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'},
-
++ '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]
+
- msg = dict(type='Undertaker', request='ModelConfig', version=1, params=_params)
++ @ReturnMapping(ErrorResults)
++ async def FinishUpgradeSeries(self, args):
++ '''
++ args : typing.Sequence[~UpdateSeriesArg]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(UndertakerModelInfoResult)
- async def ModelInfo(self):
++ 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
+
+
+
- Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')]
++ @ReturnMapping(PinApplicationsResults)
++ async def PinMachineApplications(self):
+ '''
+
- msg = dict(type='Undertaker', request='ModelInfo', version=1, params=_params)
++ Returns -> typing.Sequence[~PinApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def ProcessDyingModel(self):
++ msg = dict(type='UpgradeSeries',
++ request='PinMachineApplications',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> None
++ @ReturnMapping(PinnedLeadershipResult)
++ async def PinnedLeadership(self):
+ '''
+
- msg = dict(type='Undertaker', request='ProcessDyingModel', version=1, params=_params)
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def RemoveModel(self):
++ msg = dict(type='UpgradeSeries',
++ request='PinnedLeadership',
++ version=1,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def SetMachineStatus(self, params):
+ '''
- msg = dict(type='Undertaker', request='RemoveModel', version=1, params=_params)
-
++ params : typing.Sequence[~UpgradeSeriesStatusParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetStatus(self, entities):
++ msg = dict(type='UpgradeSeries',
++ request='SetMachineStatus',
++ version=1,
++ params=_params)
++ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def SetUpgradeSeriesUnitStatus(self, params):
+ '''
- msg = dict(type='Undertaker', request='SetStatus', version=1, params=_params)
- _params['entities'] = entities
++ params : typing.Sequence[~UpgradeSeriesStatusParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def UpdateStatus(self, entities):
++ msg = dict(type='UpgradeSeries',
++ request='SetUpgradeSeriesUnitStatus',
++ version=1,
++ params=_params)
++ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def StartUnitCompletion(self, entities, message):
+ '''
- msg = dict(type='Undertaker', request='UpdateStatus', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ message : str
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(NotifyWatchResults)
- async def WatchModelResources(self):
++ msg = dict(type='UpgradeSeries',
++ request='StartUnitCompletion',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
++ _params['message'] = message
+ reply = await self.rpc(msg)
+ return reply
+
+
+
-
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ @ReturnMapping(StringResults)
++ async def TargetSeries(self, entities):
+ '''
- msg = dict(type='Undertaker', request='WatchModelResources', version=1, params=_params)
-
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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):
++ msg = dict(type='UpgradeSeries',
++ request='TargetSeries',
++ version=1,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(EntitiesResults)
++ async def UnitsCompleted(self, entities):
+ '''
- msg = dict(type='UnitAssigner', request='AssignUnits', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~EntitiesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SetAgentStatus(self, entities):
++ msg = dict(type='UpgradeSeries',
++ request='UnitsCompleted',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(EntitiesResults)
++ async def UnitsPrepared(self, entities):
+ '''
- msg = dict(type='UnitAssigner', request='SetAgentStatus', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~EntitiesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(StringsWatchResult)
- async def WatchUnitAssignments(self):
++ msg = dict(type='UpgradeSeries',
++ request='UnitsPrepared',
++ version=1,
++ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ @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
++
+
- msg = dict(type='UnitAssigner', request='WatchUnitAssignments', version=1, params=_params)
++
++ @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='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'}
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
++
+
+ @ReturnMapping(VersionResults)
+ async def DesiredVersion(self, entities):
+ '''
- msg = dict(type='Upgrader', request='DesiredVersion', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~VersionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Upgrader', request='SetTools', version=1, params=_params)
++ agent_tools : typing.Sequence[~EntityVersion]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
++ 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):
+ '''
- msg = dict(type='Upgrader', request='Tools', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ToolsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Upgrader', request='WatchAPIVersion', version=1, params=_params)
++ 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)
+ _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'}
- users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
- Returns -> typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
++
+
+ @ReturnMapping(AddUserResults)
+ async def AddUser(self, users):
+ '''
- msg = dict(type='UserManager', request='AddUser', version=1, params=_params)
++ users : typing.Sequence[~AddUser]
++ Returns -> typing.Sequence[~AddUserResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='UserManager', request='DisableUser', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='UserManager', request='EnableUser', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='UserManager', request='RemoveUser', version=1, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='UserManager', request='SetPassword', version=1, params=_params)
++ changes : typing.Sequence[~EntityPassword]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- Returns -> typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
++ entities : typing.Sequence[~Entity]
+ include_disabled : bool
- msg = dict(type='UserManager', request='UserInfo', version=1, params=_params)
++ Returns -> typing.Sequence[~UserInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
++ 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
--- /dev/null
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+# 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):
+ '''
- msg = dict(type='Action', request='Actions', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult>
++ 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):
+ '''
- msg = dict(type='Action', request='ApplicationsCharmsActions', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ApplicationCharmActionsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ 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):
+ '''
- msg = dict(type='Action', request='Cancel', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- actions : typing.Sequence<+T_co>[~Action]<~Action>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ 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):
+ '''
- msg = dict(type='Action', request='Enqueue', version=2, params=_params)
++ actions : typing.Sequence[~Action]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- prefixes : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- msg = dict(type='Action', request='FindActionTagsByPrefix', version=2, params=_params)
++ prefixes : typing.Sequence[str]
++ Returns -> typing.Sequence[~Entity]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- names : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName>
++ 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):
+ '''
- msg = dict(type='Action', request='FindActionsByNames', version=2, params=_params)
++ names : typing.Sequence[str]
++ Returns -> typing.Sequence[~ActionsByName]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
++ 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):
+ '''
- msg = dict(type='Action', request='ListAll', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionsByReceiver]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
++ 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):
+ '''
- msg = dict(type='Action', request='ListCompleted', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionsByReceiver]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
++ 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):
+ '''
- msg = dict(type='Action', request='ListPending', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionsByReceiver]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
++ 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):
+ '''
- msg = dict(type='Action', request='ListRunning', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionsByReceiver]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- applications : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[str]
++ applications : typing.Sequence[str]
+ commands : str
- units : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ machines : typing.Sequence[str]
+ timeout : int
- msg = dict(type='Action', request='Run', version=2, params=_params)
++ units : typing.Sequence[str]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- applications : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[str]
++ applications : typing.Sequence[str]
+ commands : str
- units : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ machines : typing.Sequence[str]
+ timeout : int
- msg = dict(type='Action', request='RunOnAllMachines', version=2, params=_params)
++ units : typing.Sequence[str]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
++ 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,
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ '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):
+ '''
- msg = dict(type='Agent', request='ClearReboot', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
++ 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):
+ '''
- msg = dict(type='Agent', request='CloudSpec', version=2, params=_params)
++ 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()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Agent', request='ControllerConfig', version=2, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Agent', request='GetCloudSpec', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult>
++ msg = dict(type='Agent',
++ request='GetCloudSpec',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AgentGetEntitiesResults)
+ async def GetEntities(self, entities):
+ '''
- msg = dict(type='Agent', request='GetEntities', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~AgentGetEntitiesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Agent', request='IsMaster', 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()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ msg = dict(type='Agent',
++ request='IsMaster',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelConfigResult)
+ async def ModelConfig(self):
+ '''
+
- msg = dict(type='Agent', request='ModelConfig', version=2, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='Agent',
++ request='ModelConfig',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetPasswords(self, changes):
+ '''
- msg = dict(type='Agent', request='SetPasswords', version=2, params=_params)
++ changes : typing.Sequence[~EntityPassword]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Agent', request='StateServingInfo', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ msg = dict(type='Agent',
++ request='StateServingInfo',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchCredentials(self, entities):
+ '''
- msg = dict(type='Agent', request='WatchCredentials', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Agent', request='WatchForModelConfigChanges', 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()
- Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
++ 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):
+ '''
+
- msg = dict(type='AllModelWatcher', request='Next', version=2, params=_params)
++ Returns -> typing.Sequence[~Delta]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='AllModelWatcher', request='Stop', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
++ 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):
+ '''
- msg = dict(type='Annotations', request='Get', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~AnnotationsGetResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Annotations', request='Set', version=2, params=_params)
++ annotations : typing.Sequence[~EntityAnnotations]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
++ 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):
+ '''
- msg = dict(type='Application', request='AddRelation', version=2, params=_params)
++ endpoints : typing.Sequence[str]
++ Returns -> typing.Mapping[str, ~CharmRelation]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='AddUnits', version=2, params=_params)
++ placement : typing.Sequence[~Placement]
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='CharmRelations', version=2, params=_params)
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='Deploy', version=2, params=_params)
++ applications : typing.Sequence[~ApplicationDeploy]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Destroy', 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()
- endpoints : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyRelation', version=2, params=_params)
++ endpoints : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- unit_names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyUnits', version=2, params=_params)
++ unit_names : typing.Sequence[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='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()
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
++ 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
- msg = dict(type='Application', request='Get', version=2, params=_params)
++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='GetCharmURL', 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='GetConstraints', 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()
- options : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Set', version=2, params=_params)
++ options : typing.Mapping[str, str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
++ config_settings : typing.Mapping[str, str]
+ config_settings_yaml : str
+ force_series : bool
+ force_units : bool
- msg = dict(type='Application', request='SetCharm', version=2, params=_params)
++ 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='SetConstraints', 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()
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='SetMetricCredentials', version=2, params=_params)
++ creds : typing.Sequence[~ApplicationMetricCredential]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Unexpose', 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()
- options : typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='Unset', version=2, params=_params)
++ options : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Update', version=2, params=_params)
++ settings : typing.Mapping[str, str]
+ settings_yaml : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class BlockFacade(Type):
- name = 'Block'
++ 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
+
+
+
- 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'}},
++class ApplicationOffersFacade(Type):
++ name = 'ApplicationOffers'
+ version = 2
- 'BlockSwitchParams': {'additionalProperties': False,
- 'properties': {'message': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['type'],
- 'type': 'object'},
++ 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'},
- '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'}},
+ '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'},
- @ReturnMapping(BlockResults)
- async def List(self):
++ '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'}
+
+
- Returns -> typing.Sequence<+T_co>[~BlockResult]<~BlockResult>
++ @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
++
++
+
- msg = dict(type='Block', request='List', version=2, params=_params)
++ @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()
- @ReturnMapping(ErrorResult)
- async def SwitchBlockOff(self, message, type_):
++ 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
+
+
+
- message : str
- type_ : str
- Returns -> Error
++ @ReturnMapping(ConsumeOfferDetailsResults)
++ async def GetConsumeDetails(self, offer_urls):
+ '''
- msg = dict(type='Block', request='SwitchBlockOff', version=2, params=_params)
- _params['message'] = message
- _params['type'] = type_
++ offer_urls : typing.Sequence[str]
++ Returns -> typing.Sequence[~ConsumeOfferDetailsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResult)
- async def SwitchBlockOn(self, message, type_):
++ msg = dict(type='ApplicationOffers',
++ request='GetConsumeDetails',
++ version=2,
++ params=_params)
++ _params['offer-urls'] = offer_urls
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- message : str
- type_ : str
- Returns -> Error
++ @ReturnMapping(QueryApplicationOffersResults)
++ async def ListApplicationOffers(self, filters):
+ '''
- msg = dict(type='Block', request='SwitchBlockOn', version=2, params=_params)
- _params['message'] = message
- _params['type'] = type_
++ filters : typing.Sequence[~OfferFilter]
++ Returns -> typing.Sequence[~ApplicationOfferAdminDetails]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class CharmRevisionUpdaterFacade(Type):
- name = 'CharmRevisionUpdater'
++ msg = dict(type='ApplicationOffers',
++ request='ListApplicationOffers',
++ version=2,
++ params=_params)
++ _params['Filters'] = filters
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++ @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
- 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
- 'properties': {'UpdateLatestRevisions': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
- 'type': 'object'}},
++ 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'},
- @ReturnMapping(ErrorResult)
- async def UpdateLatestRevisions(self):
++ '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'}
+
+
-
- Returns -> Error
++ @ReturnMapping(BackupsMetadataResult)
++ async def Create(self, notes):
+ '''
- msg = dict(type='CharmRevisionUpdater', request='UpdateLatestRevisions', version=2, params=_params)
-
++ notes : str
++ Returns -> typing.Union[str, int, _ForwardRef('Number')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 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'],
++ msg = dict(type='Backups',
++ request='Create',
++ version=2,
++ params=_params)
++ _params['notes'] = notes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 'CharmMetrics': {'additionalProperties': False,
- 'properties': {'metrics': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmMetric'}},
- 'type': 'object'},
- 'plan': {'$ref': '#/definitions/CharmPlan'}},
- 'required': ['metrics', 'plan'],
++ @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'},
- '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'},
++ 'BlockResults': {'additionalProperties': False,
++ 'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'},
++ 'type': 'array'}},
+ 'type': 'object'},
- 'required': ['name', 'type'],
++ 'BlockSwitchParams': {'additionalProperties': False,
++ 'properties': {'message': {'type': 'string'},
+ 'type': {'type': 'string'}},
- 'CharmPlan': {'additionalProperties': False,
- 'properties': {'required': {'type': 'boolean'}},
- 'required': ['required'],
++ 'required': ['type'],
+ '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'],
++ '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'},
- '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'}},
++ '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'},
- @ReturnMapping(CharmInfo)
- async def CharmInfo(self, url):
++ 'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
++ 'Result': {'$ref': '#/definitions/ErrorResult'}},
++ 'type': 'object'}},
+ 'type': 'object'}
+
+
- url : str
- Returns -> typing.Union[_ForwardRef('CharmActions'), typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption>, _ForwardRef('CharmMeta'), _ForwardRef('CharmMetrics'), int, str]
++ @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):
+ '''
- msg = dict(type='Charms', request='CharmInfo', version=2, params=_params)
- _params['url'] = url
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(IsMeteredResult)
- async def IsMetered(self, url):
++ msg = dict(type='Client',
++ request='RetryProvisioning',
++ version=2,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- url : str
- Returns -> bool
++ @ReturnMapping(StringResult)
++ async def SLALevel(self):
+ '''
- msg = dict(type='Charms', request='IsMetered', version=2, params=_params)
- _params['url'] = url
++
++ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(CharmsListResult)
- async def List(self, names):
++ msg = dict(type='Client',
++ request='SLALevel',
++ version=2,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- names : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[str]
++ @ReturnMapping(None)
++ async def SetModelAgentVersion(self, version):
+ '''
- msg = dict(type='Charms', request='List', version=2, params=_params)
- _params['names'] = names
++ version : Number
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- class CleanerFacade(Type):
- name = 'Cleaner'
++ msg = dict(type='Client',
++ request='SetModelAgentVersion',
++ version=2,
++ params=_params)
++ _params['version'] = version
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- schema = {'definitions': {'Error': {'additionalProperties': False,
++ @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
- 'properties': {'Cleanup': {'type': 'object'},
- 'WatchCleanups': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'}},
++ 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'}},
- @ReturnMapping(None)
- async def Cleanup(self):
++ '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'}
+
+
- Returns -> None
++ @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):
+ '''
+
- msg = dict(type='Cleaner', request='Cleanup', version=2, params=_params)
++ Returns -> typing.Union[str, bool]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def WatchCleanups(self):
++ msg = dict(type='CredentialValidator',
++ request='ModelCredential',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResult)
- msg = dict(type='Cleaner', request='WatchCleanups', version=2, params=_params)
++ 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()
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='DiscoverSpaces', request='AddSubnets', version=2, params=_params)
++ subnets : typing.Sequence[~AddSubnetParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='DiscoverSpaces', request='CreateSpaces', version=2, params=_params)
++ spaces : typing.Sequence[~CreateSpaceParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
++ 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):
+ '''
+
- msg = dict(type='DiscoverSpaces', request='ListSpaces', version=2, params=_params)
++ Returns -> typing.Sequence[~ProviderSpace]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
++ 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
- msg = dict(type='DiscoverSpaces', request='ListSubnets', version=2, params=_params)
++ Returns -> typing.Sequence[~Subnet]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='DiscoverSpaces', request='ModelConfig', version=2, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='DiskManager', request='SetMachineBlockDevices', version=2, params=_params)
++ machine_block_devices : typing.Sequence[~MachineBlockDevices]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ 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):
+ '''
+
- msg = dict(type='EntityWatcher', request='Next', version=2, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='EntityWatcher', request='Stop', 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()
- Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
++ 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):
+ '''
+
- msg = dict(type='FilesystemAttachmentsWatcher', request='Next', version=2, params=_params)
++ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='FilesystemAttachmentsWatcher', request='Stop', 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()
- 'Arbiter': {'type': 'boolean'},
- 'BuildIndexes': {'type': 'boolean'},
- 'Hidden': {'type': 'boolean'},
++ 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'},
- 'SlaveDelay': {'type': 'integer'},
+ 'Id': {'type': 'integer'},
+ 'Priority': {'type': 'number'},
- 'Arbiter',
- 'BuildIndexes',
- 'Hidden',
+ 'Tags': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'Votes': {'type': 'integer'}},
+ 'required': ['Id',
+ 'Address',
- 'SlaveDelay',
+ 'Priority',
+ 'Tags',
- 'virt-type': {'type': 'string'}},
+ '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'},
- specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
- Returns -> typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
++ '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):
+ '''
- msg = dict(type='HighAvailability', request='EnableHA', version=2, params=_params)
++ specs : typing.Sequence[~ControllersSpec]
++ Returns -> typing.Sequence[~ControllersChangeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- members : typing.Sequence<+T_co>[~Member]<~Member>
++ 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):
+ '''
- msg = dict(type='HighAvailability', request='ResumeHAReplicationAfterUpgrade', version=2, params=_params)
++ members : typing.Sequence[~Member]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('HAMember'), typing.Sequence<+T_co>[~Member]<~Member>]
++ 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
- msg = dict(type='HighAvailability', request='StopHAReplicationForUpgrade', version=2, params=_params)
++ Returns -> typing.Union[typing.Sequence[~HAMember], _ForwardRef('HAMember'), typing.Sequence[~Member]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ImageManager', request='DeleteImages', version=2, params=_params)
++ images : typing.Sequence[~ImageSpec]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
- Returns -> typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata>
++ 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):
+ '''
- msg = dict(type='ImageManager', request='ListImages', version=2, params=_params)
++ images : typing.Sequence[~ImageSpec]
++ Returns -> typing.Sequence[~ImageMetadata]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- image_ids : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ImageMetadata', request='Delete', version=2, params=_params)
++ image_ids : typing.Sequence[str]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- arches : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- series : typing.Sequence<+T_co>[str]
++ arches : typing.Sequence[str]
+ region : str
+ root_storage_type : str
- Returns -> typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
++ series : typing.Sequence[str]
+ stream : str
+ virt_type : str
- msg = dict(type='ImageMetadata', request='List', version=2, params=_params)
++ Returns -> typing.Sequence[~CloudImageMetadata]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ImageMetadata', request='Save', version=2, params=_params)
++ metadata : typing.Sequence[~CloudImageMetadataList]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='ImageMetadata', request='UpdateFromPublishedImages', 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='LeadershipService', request='BlockUntilLeadershipReleased', 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()
- params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='LeadershipService', request='ClaimLeadership', version=2, params=_params)
++ params : typing.Sequence[~ClaimLeadershipParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='AddMachines', version=2, params=_params)
++ params : typing.Sequence[~AddMachineParams]
++ Returns -> typing.Sequence[~AddMachinesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='InstanceTypes', version=2, params=_params)
++ constraints : typing.Sequence[~ModelInstanceTypesConstraint]
++ Returns -> typing.Sequence[~InstanceTypesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='MetricsAdder', request='AddMetricBatches', version=2, params=_params)
++ batches : typing.Sequence[~MetricBatchParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- 'required': ['tag', 'code', 'info'],
++ 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': ['time', 'key', 'value', 'unit'],
++ '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'}},
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
++ '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):
+ '''
- msg = dict(type='MetricsDebug', request='GetMetrics', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~EntityMetrics]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='MetricsDebug', request='SetMeterStatus', version=2, params=_params)
++ statues : typing.Sequence[~MeterStatusParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
++ config : typing.Mapping[str, typing.Any]
+ credential : str
+ name : str
+ owner_tag : str
+ region : str
- msg = dict(type='ModelManager', request='CreateModel', version=2, params=_params)
++ 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='DestroyModels', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='DumpModels', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MapResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='DumpModelsDB', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MapResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
++ 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
- msg = dict(type='ModelManager', request='ListModels', version=2, params=_params)
++ Returns -> typing.Sequence[~UserModel]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
++ 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):
+ '''
+
- msg = dict(type='ModelManager', request='ModelDefaults', version=2, params=_params)
++ Returns -> typing.Mapping[str, ~ModelDefaults]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
++ msg = dict(type='ModelManager',
++ request='ModelDefaults',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelInfoResults)
+ async def ModelInfo(self, entities):
+ '''
- msg = dict(type='ModelManager', request='ModelInfo', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ModelInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='ModelStatus', version=2, params=_params)
- _params['entities'] = entities
++ 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()
- async def ModifyModelAccess(self, changes):
++ msg = dict(type='ModelManager',
++ request='SetModelDefaults',
++ version=2,
++ params=_params)
++ _params['config'] = config
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def UnsetModelDefaults(self, keys):
+ '''
- msg = dict(type='ModelManager', request='ModifyModelAccess', version=2, params=_params)
- _params['changes'] = changes
++ keys : typing.Sequence[~ModelUnsetKeys]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def SetModelDefaults(self, config):
++ msg = dict(type='ModelManager',
++ request='UnsetModelDefaults',
++ version=2,
++ params=_params)
++ _params['keys'] = keys
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++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):
+ '''
- msg = dict(type='ModelManager', request='SetModelDefaults', version=2, params=_params)
- _params['config'] = config
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ProxyConfigResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def UnsetModelDefaults(self, keys):
++ msg = dict(type='ProxyUpdater',
++ request='ProxyConfig',
++ version=2,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(NotifyWatchResults)
++ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
+ '''
- msg = dict(type='ModelManager', request='UnsetModelDefaults', version=2, params=_params)
- _params['keys'] = keys
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Reboot', request='ClearReboot', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult>
++ 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):
+ '''
- msg = dict(type='Reboot', request='GetRebootAction', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~RebootActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Reboot', request='RequestReboot', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Reboot', request='WatchForRebootEvent', 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='Resumer', request='ResumeTransactions', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
++ 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):
+ '''
- msg = dict(type='SSHClient', request='AllAddresses', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~SSHAddressesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
++ 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):
+ '''
- msg = dict(type='SSHClient', request='PrivateAddress', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~SSHAddressResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='SSHClient', request='Proxy', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
++ msg = dict(type='SSHClient',
++ request='Proxy',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(SSHAddressResults)
+ async def PublicAddress(self, entities):
+ '''
- msg = dict(type='SSHClient', request='PublicAddress', version=2, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~SSHAddressResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
++ 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):
+ '''
- msg = dict(type='SSHClient', request='PublicKeys', version=2, params=_params)
++ 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()
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Spaces', request='CreateSpaces', version=2, params=_params)
++ spaces : typing.Sequence[~CreateSpaceParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~Space]<~Space>
++ 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):
+ '''
+
- msg = dict(type='Spaces', request='ListSpaces', version=2, params=_params)
++ Returns -> typing.Sequence[~Space]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='StatusHistory', request='ModelConfig', version=2, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='StatusHistory', request='Prune', 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='WatchForModelConfigChanges', 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()
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Subnets', request='AddSubnets', version=2, params=_params)
++ subnets : typing.Sequence[~AddSubnetParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
++ 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):
+ '''
+
- msg = dict(type='Subnets', request='AllSpaces', version=2, params=_params)
++ Returns -> typing.Sequence[~SpaceResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
++ msg = dict(type='Subnets',
++ request='AllSpaces',
++ version=2,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ZoneResults)
+ async def AllZones(self):
+ '''
+
- msg = dict(type='Subnets', request='AllZones', version=2, params=_params)
++ Returns -> typing.Sequence[~ZoneResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
++ 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
- msg = dict(type='Subnets', request='ListSubnets', version=2, params=_params)
++ Returns -> typing.Sequence[~Subnet]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
++ 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):
+ '''
+
- msg = dict(type='VolumeAttachmentsWatcher', request='Next', version=2, params=_params)
++ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='VolumeAttachmentsWatcher', request='Stop', 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)
+
+ reply = await self.rpc(msg)
+ return reply
--- /dev/null
- 'virt-type': {'type': 'string'}},
+# 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'},
- 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
- 'Result': {'$ref': '#/definitions/AddRelationResults'}},
- 'type': 'object'},
- 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
- 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
++ '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'}},
- 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
- 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
++ 'properties': {'AddCloud': {'properties': {'Params': {'$ref': '#/definitions/AddCloudArgs'}},
+ 'type': 'object'},
- 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
++ 'AddCredentials': {'properties': {'Params': {'$ref': '#/definitions/TaggedCredentials'},
++ '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'}},
++ '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'},
- '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'}},
++ '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'},
- @ReturnMapping(AddRelationResults)
- async def AddRelation(self, endpoints):
++ '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'}
+
+
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
++ @ReturnMapping(None)
++ async def AddCloud(self, cloud, name):
+ '''
- msg = dict(type='Application', request='AddRelation', version=3, params=_params)
- _params['endpoints'] = endpoints
++ cloud : Cloud
++ name : str
++ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(AddApplicationUnitsResults)
- async def AddUnits(self, application, num_units, placement):
++ msg = dict(type='Cloud',
++ request='AddCloud',
++ version=3,
++ params=_params)
++ _params['cloud'] = cloud
++ _params['name'] = name
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
++ @ReturnMapping(ErrorResults)
++ async def AddCredentials(self, credentials):
+ '''
- msg = dict(type='Application', request='AddUnits', version=3, params=_params)
- _params['application'] = application
- _params['num-units'] = num_units
- _params['placement'] = placement
++ credentials : typing.Sequence[~TaggedCredential]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ApplicationCharmRelationsResults)
- async def CharmRelations(self, application):
++ msg = dict(type='Cloud',
++ request='AddCredentials',
++ version=3,
++ params=_params)
++ _params['credentials'] = credentials
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- Returns -> typing.Sequence<+T_co>[str]
++ @ReturnMapping(UpdateCredentialResults)
++ async def CheckCredentialsModels(self, credentials):
+ '''
- msg = dict(type='Application', request='CharmRelations', version=3, params=_params)
- _params['application'] = application
++ credentials : typing.Sequence[~TaggedCredential]
++ Returns -> typing.Sequence[~UpdateCredentialResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ErrorResults)
- async def Deploy(self, applications):
++ msg = dict(type='Cloud',
++ request='CheckCredentialsModels',
++ version=3,
++ params=_params)
++ _params['credentials'] = credentials
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ @ReturnMapping(CloudResults)
++ async def Cloud(self, entities):
+ '''
- msg = dict(type='Application', request='Deploy', version=3, params=_params)
- _params['applications'] = applications
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~CloudResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Destroy(self, application):
++ msg = dict(type='Cloud',
++ request='Cloud',
++ version=3,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- Returns -> None
++ @ReturnMapping(CloudInfoResults)
++ async def CloudInfo(self, entities):
+ '''
- msg = dict(type='Application', request='Destroy', version=3, params=_params)
- _params['application'] = application
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~CloudInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def DestroyRelation(self, endpoints):
- '''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> None
++ msg = dict(type='Cloud',
++ request='CloudInfo',
++ version=3,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- # 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(CloudsResult)
++ async def Clouds(self):
+ '''
-
-
- @ReturnMapping(None)
- async def DestroyUnits(self, unit_names):
- '''
- unit_names : typing.Sequence<+T_co>[str]
- Returns -> None
+
- msg = dict(type='Application', request='DestroyUnits', version=3, params=_params)
- _params['unit-names'] = unit_names
++ Returns -> typing.Mapping[str, ~Cloud]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Expose(self, application):
++ msg = dict(type='Cloud',
++ request='Clouds',
++ version=3,
++ params=_params)
++
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- Returns -> None
++ @ReturnMapping(CloudCredentialResults)
++ async def Credential(self, entities):
+ '''
- msg = dict(type='Application', request='Expose', version=3, params=_params)
- _params['application'] = application
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~CloudCredentialResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(ApplicationGetResults)
- async def Get(self, application):
++ msg = dict(type='Cloud',
++ request='Credential',
++ version=3,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
++ @ReturnMapping(CredentialContentResults)
++ async def CredentialContents(self, credentials, include_secrets):
+ '''
- msg = dict(type='Application', request='Get', version=3, params=_params)
- _params['application'] = application
++ credentials : typing.Sequence[~CloudCredentialArg]
++ include_secrets : bool
++ Returns -> typing.Sequence[~CredentialContentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def GetCharmURL(self, 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)
- application : str
++ async def DefaultCloud(self):
+ '''
- msg = dict(type='Application', request='GetCharmURL', version=3, params=_params)
- _params['application'] = application
- reply = await self.rpc(msg)
- return reply
++
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
-
-
- @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
++ msg = dict(type='Cloud',
++ request='DefaultCloud',
++ version=3,
++ params=_params)
+
- @ReturnMapping(None)
- async def Set(self, application, options):
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
- Returns -> None
++ @ReturnMapping(InstanceTypesResults)
++ async def InstanceTypes(self, constraints):
+ '''
- msg = dict(type='Application', request='Set', version=3, params=_params)
- _params['application'] = application
- _params['options'] = options
++ constraints : typing.Sequence[~CloudInstanceTypesConstraint]
++ Returns -> typing.Sequence[~InstanceTypesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
++ msg = dict(type='Cloud',
++ request='InstanceTypes',
++ version=3,
++ params=_params)
++ _params['constraints'] = constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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
++ @ReturnMapping(ListCloudInfoResults)
++ async def ListCloudInfo(self, all_, user_tag):
+ '''
- 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
++ all_ : bool
++ user_tag : str
++ Returns -> typing.Sequence[~ListCloudInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def SetConstraints(self, application, 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
+
+
+
- application : str
- constraints : Value
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def ModifyCloudAccess(self, changes):
+ '''
- msg = dict(type='Application', request='SetConstraints', version=3, params=_params)
- _params['application'] = application
- _params['constraints'] = constraints
++ changes : typing.Sequence[~ModifyCloudAccess]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- async def SetMetricCredentials(self, creds):
++ msg = dict(type='Cloud',
++ request='ModifyCloudAccess',
++ version=3,
++ params=_params)
++ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ async def RemoveClouds(self, entities):
+ '''
- msg = dict(type='Application', request='SetMetricCredentials', version=3, params=_params)
- _params['creds'] = creds
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Unexpose(self, application):
++ msg = dict(type='Cloud',
++ request='RemoveClouds',
++ version=3,
++ params=_params)
++ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- Returns -> None
++ @ReturnMapping(ErrorResults)
++ async def RevokeCredentialsCheckModels(self, credentials):
+ '''
- msg = dict(type='Application', request='Unexpose', version=3, params=_params)
- _params['application'] = application
++ credentials : typing.Sequence[~RevokeCredentialArg]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Unset(self, application, options):
++ msg = dict(type='Cloud',
++ request='RevokeCredentialsCheckModels',
++ version=3,
++ params=_params)
++ _params['credentials'] = credentials
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- application : str
- options : typing.Sequence<+T_co>[str]
- Returns -> None
++ @ReturnMapping(UpdateCredentialResults)
++ async def UpdateCredentialsCheckModels(self, credentials, force):
+ '''
- msg = dict(type='Application', request='Unset', version=3, params=_params)
- _params['application'] = application
- _params['options'] = options
++ credentials : typing.Sequence[~TaggedCredential]
++ force : bool
++ Returns -> typing.Sequence[~UpdateCredentialResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- @ReturnMapping(None)
- async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
++ msg = dict(type='Cloud',
++ request='UpdateCredentialsCheckModels',
++ version=3,
++ params=_params)
++ _params['credentials'] = credentials
++ _params['force'] = force
+ reply = await self.rpc(msg)
+ return reply
+
+
+
- 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
++ @ReturnMapping(StringsResults)
++ async def UserCredentials(self, user_clouds):
+ '''
- 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
++ user_clouds : typing.Sequence[~UserCloud]
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
++ 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):
+ '''
+
- msg = dict(type='Controller', request='AllModels', version=3, params=_params)
++ Returns -> typing.Sequence[~UserModel]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
++ msg = dict(type='Controller',
++ request='AllModels',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(CloudSpecResults)
+ async def CloudSpec(self, entities):
+ '''
- msg = dict(type='Controller', request='CloudSpec', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~CloudSpecResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Controller', request='ControllerConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Controller', request='DestroyController', 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='GetCloudSpec', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult>
++ msg = dict(type='Controller',
++ request='GetCloudSpec',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(UserAccessResults)
+ async def GetControllerAccess(self, entities):
+ '''
- msg = dict(type='Controller', request='GetControllerAccess', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~UserAccessResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
++ 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):
+ '''
+
- msg = dict(type='Controller', request='HostedModelConfigs', version=3, params=_params)
++ Returns -> typing.Sequence[~HostedModelConfig]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec>
- Returns -> typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult>
++ msg = dict(type='Controller',
++ request='HostedModelConfigs',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(InitiateMigrationResults)
+ async def InitiateMigration(self, specs):
+ '''
- msg = dict(type='Controller', request='InitiateMigration', version=3, params=_params)
++ specs : typing.Sequence[~MigrationSpec]
++ Returns -> typing.Sequence[~InitiateMigrationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
++ 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):
+ '''
+
- msg = dict(type='Controller', request='ListBlockedModels', version=3, params=_params)
++ Returns -> typing.Sequence[~ModelBlockInfo]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
++ msg = dict(type='Controller',
++ request='ListBlockedModels',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelConfigResults)
+ async def ModelConfig(self):
+ '''
+
- msg = dict(type='Controller', request='ModelConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, ~ConfigValue]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
++ msg = dict(type='Controller',
++ request='ModelConfig',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelStatusResults)
+ async def ModelStatus(self, entities):
+ '''
- msg = dict(type='Controller', request='ModelStatus', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ModelStatus]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Controller', request='ModifyControllerAccess', version=3, params=_params)
++ changes : typing.Sequence[~ModifyControllerAccess]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Controller', request='RemoveBlocks', 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='WatchAllModels', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='CloudSpec', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~CloudSpecResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='GetAssignedMachine', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Firewaller', request='GetCloudSpec', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
++ msg = dict(type='Firewaller',
++ request='GetCloudSpec',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BoolResults)
+ async def GetExposed(self, entities):
+ '''
- msg = dict(type='Firewaller', request='GetExposed', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~BoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='GetMachineActiveSubnets', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='GetMachinePorts', version=3, params=_params)
++ params : typing.Sequence[~MachinePorts]
++ Returns -> typing.Sequence[~MachinePortsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='InstanceId', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='Life', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Firewaller', request='ModelConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ msg = dict(type='Firewaller',
++ request='ModelConfig',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def Watch(self, entities):
+ '''
- msg = dict(type='Firewaller', request='Watch', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Firewaller', request='WatchForModelConfigChanges', 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()
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ msg = dict(type='Firewaller',
++ request='WatchForModelConfigChanges',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResult)
+ async def WatchModelMachines(self):
+ '''
+
- msg = dict(type='Firewaller', request='WatchModelMachines', version=3, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ msg = dict(type='Firewaller',
++ request='WatchModelMachines',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchOpenedPorts(self, entities):
+ '''
- msg = dict(type='Firewaller', request='WatchOpenedPorts', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Firewaller', request='WatchUnits', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='AreManuallyProvisioned', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~BoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='InstanceId', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='InstanceStatus', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='Life', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='InstancePoller', request='ModelConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult>
++ msg = dict(type='InstancePoller',
++ request='ModelConfig',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(MachineAddressesResults)
+ async def ProviderAddresses(self, entities):
+ '''
- msg = dict(type='InstancePoller', request='ProviderAddresses', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachineAddressesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='SetInstanceStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='SetProviderAddresses', version=3, params=_params)
++ machine_addresses : typing.Sequence[~MachineAddresses]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- msg = dict(type='InstancePoller', request='Status', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='InstancePoller', request='WatchForModelConfigChanges', 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()
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ msg = dict(type='InstancePoller',
++ request='WatchForModelConfigChanges',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResult)
+ async def WatchModelMachines(self):
+ '''
+
- msg = dict(type='InstancePoller', request='WatchModelMachines', version=3, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='AddMachines', version=3, params=_params)
++ params : typing.Sequence[~AddMachineParams]
++ Returns -> typing.Sequence[~AddMachinesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='DestroyMachine', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyMachineResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='ForceDestroyMachine', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyMachineResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
++ 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):
+ '''
- msg = dict(type='MachineManager', request='InstanceTypes', version=3, params=_params)
++ constraints : typing.Sequence[~ModelInstanceTypesConstraint]
++ Returns -> typing.Sequence[~InstanceTypesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
++ config : typing.Mapping[str, typing.Any]
+ credential : str
+ name : str
+ owner_tag : str
+ region : str
- msg = dict(type='ModelManager', request='CreateModel', version=3, params=_params)
++ 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='DestroyModels', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ entities : typing.Sequence[~Entity]
+ simplified : bool
- msg = dict(type='ModelManager', request='DumpModels', version=3, params=_params)
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='DumpModelsDB', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MapResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
++ 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
- msg = dict(type='ModelManager', request='ListModels', version=3, params=_params)
++ Returns -> typing.Sequence[~UserModel]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
++ 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):
+ '''
+
- msg = dict(type='ModelManager', request='ModelDefaults', version=3, params=_params)
++ Returns -> typing.Mapping[str, ~ModelDefaults]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
++ msg = dict(type='ModelManager',
++ request='ModelDefaults',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelInfoResults)
+ async def ModelInfo(self, entities):
+ '''
- msg = dict(type='ModelManager', request='ModelInfo', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ModelInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='ModelStatus', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ModelStatus]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='ModifyModelAccess', version=3, params=_params)
++ changes : typing.Sequence[~ModifyModelAccess]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='SetModelDefaults', version=3, params=_params)
++ config : typing.Sequence[~ModelDefaultValues]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='ModelManager', request='UnsetModelDefaults', version=3, params=_params)
++ keys : typing.Sequence[~ModelUnsetKeys]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='APIAddresses', version=3, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++ msg = dict(type='Provisioner',
++ request='APIAddresses',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(APIHostPortsResult)
+ async def APIHostPorts(self):
+ '''
+
- msg = dict(type='Provisioner', request='APIHostPorts', version=3, params=_params)
++ Returns -> typing.Sequence[~HostPort]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[int]
++ msg = dict(type='Provisioner',
++ request='APIHostPorts',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BytesResult)
+ async def CACert(self):
+ '''
+
- msg = dict(type='Provisioner', request='CACert', version=3, params=_params)
++ Returns -> typing.Sequence[int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult>
++ msg = dict(type='Provisioner',
++ request='CACert',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ConstraintsResults)
+ async def Constraints(self, entities):
+ '''
- msg = dict(type='Provisioner', request='Constraints', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ConstraintsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), _ForwardRef('Settings'), bool]
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='ContainerConfig', version=3, params=_params)
++ Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), bool]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Provisioner', request='ContainerManagerConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='ControllerConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult>
++ msg = dict(type='Provisioner',
++ request='ControllerConfig',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(DistributionGroupResults)
+ async def DistributionGroup(self, entities):
+ '''
- msg = dict(type='Provisioner', request='DistributionGroup', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DistributionGroupResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='EnsureDead', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>]
++ 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
- msg = dict(type='Provisioner', request='FindTools', version=3, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='GetContainerInterfaceInfo', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachineNetworkConfigResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='HostChangesForContainers', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~HostNetworkChange]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='InstanceId', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='InstanceStatus', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='Life', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='MachinesWithTransientErrors', version=3, params=_params)
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='Provisioner',
++ request='MachinesWithTransientErrors',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def MarkMachinesForRemoval(self, entities):
+ '''
- msg = dict(type='Provisioner', request='MarkMachinesForRemoval', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='ModelConfig', version=3, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Provisioner', request='ModelUUID', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
++ msg = dict(type='Provisioner',
++ request='ModelUUID',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(MachineNetworkConfigResults)
+ async def PrepareContainerInterfaceInfo(self, entities):
+ '''
- msg = dict(type='Provisioner', request='PrepareContainerInterfaceInfo', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachineNetworkConfigResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='ProvisioningInfo', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ProvisioningInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='ReleaseContainerAddresses', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='Remove', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='Series', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetHostMachineNetworkConfig', version=3, params=_params)
++ config : typing.Sequence[~NetworkConfig]
+ tag : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetInstanceInfo', version=3, params=_params)
++ machines : typing.Sequence[~InstanceInfo]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetInstanceStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetObservedNetworkConfig', version=3, params=_params)
++ config : typing.Sequence[~NetworkConfig]
+ tag : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetPasswords', version=3, params=_params)
++ changes : typing.Sequence[~EntityPassword]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetProviderNetworkConfig', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='SetSupportedContainers', version=3, params=_params)
++ params : typing.Sequence[~MachineContainers]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
++ 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):
+ '''
+
- msg = dict(type='Provisioner', request='StateAddresses', version=3, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ msg = dict(type='Provisioner',
++ request='StateAddresses',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StatusResults)
+ async def Status(self, entities):
+ '''
- msg = dict(type='Provisioner', request='Status', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='Tools', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ToolsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='UpdateStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Provisioner', request='WatchAPIHostPorts', 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()
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ msg = dict(type='Provisioner',
++ request='WatchAPIHostPorts',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchAllContainers(self, params):
+ '''
- msg = dict(type='Provisioner', request='WatchAllContainers', version=3, params=_params)
++ params : typing.Sequence[~WatchContainer]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Provisioner', request='WatchContainers', version=3, params=_params)
++ params : typing.Sequence[~WatchContainer]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Provisioner', request='WatchForModelConfigChanges', 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='WatchMachineErrorRetry', 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()
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
++ msg = dict(type='Provisioner',
++ request='WatchMachineErrorRetry',
++ version=3,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResult)
+ async def WatchModelMachines(self):
+ '''
+
- msg = dict(type='Provisioner', request='WatchModelMachines', version=3, params=_params)
++ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Spaces', request='CreateSpaces', version=3, params=_params)
++ spaces : typing.Sequence[~CreateSpaceParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~Space]<~Space>
++ 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):
+ '''
+
- msg = dict(type='Spaces', request='ListSpaces', version=3, params=_params)
++ Returns -> typing.Sequence[~Space]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Spaces', request='ReloadSpaces', 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()
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='AddToUnit', version=3, params=_params)
++ storages : typing.Sequence[~StorageAddParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='Attach', version=3, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- msg = dict(type='Storage', request='CreatePool', version=3, params=_params)
++ attrs : typing.Mapping[str, typing.Any]
+ name : str
+ provider : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='Destroy', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='Detach', version=3, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter>
- Returns -> typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='ListFilesystems', version=3, params=_params)
++ filters : typing.Sequence[~FilesystemFilter]
++ Returns -> typing.Sequence[~FilesystemDetailsListResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter>
- Returns -> typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='ListPools', version=3, params=_params)
++ filters : typing.Sequence[~StoragePoolFilter]
++ Returns -> typing.Sequence[~StoragePoolsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter>
- Returns -> typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='ListStorageDetails', version=3, params=_params)
++ filters : typing.Sequence[~StorageFilter]
++ Returns -> typing.Sequence[~StorageDetailsListResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter>
- Returns -> typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='ListVolumes', version=3, params=_params)
++ filters : typing.Sequence[~VolumeFilter]
++ Returns -> typing.Sequence[~VolumeDetailsListResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult>
++ 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):
+ '''
- msg = dict(type='Storage', request='StorageDetails', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StorageDetailsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='AttachmentLife', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='EnsureDead', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='FilesystemAttachmentParams', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~FilesystemAttachmentParamsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='FilesystemAttachments', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~FilesystemAttachmentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='FilesystemParams', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~FilesystemParamsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='Filesystems', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~FilesystemResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='InstanceId', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='Life', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='Remove', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='RemoveAttachment', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='SetFilesystemAttachmentInfo', version=3, params=_params)
++ filesystem_attachments : typing.Sequence[~FilesystemAttachment]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='SetFilesystemInfo', version=3, params=_params)
++ filesystems : typing.Sequence[~Filesystem]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='SetStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='SetVolumeAttachmentInfo', version=3, params=_params)
++ volume_attachments : typing.Sequence[~VolumeAttachment]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='SetVolumeInfo', version=3, params=_params)
++ volumes : typing.Sequence[~Volume]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='UpdateStatus', version=3, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='VolumeAttachmentParams', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~VolumeAttachmentParamsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='VolumeAttachments', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~VolumeAttachmentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='VolumeBlockDevices', version=3, params=_params)
++ ids : typing.Sequence[~MachineStorageId]
++ Returns -> typing.Sequence[~BlockDeviceResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='VolumeParams', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~VolumeParamsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='Volumes', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~VolumeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchBlockDevices', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchFilesystemAttachments', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchFilesystems', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchMachines', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchVolumeAttachments', version=3, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachineStorageIdsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='StorageProvisioner', request='WatchVolumes', version=3, params=_params)
++ 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)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
--- /dev/null
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+# 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):
+ '''
- msg = dict(type='Application', request='AddRelation', version=4, params=_params)
++ endpoints : typing.Sequence[str]
++ Returns -> typing.Mapping[str, ~CharmRelation]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='AddUnits', version=4, params=_params)
++ placement : typing.Sequence[~Placement]
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='CharmRelations', version=4, params=_params)
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
- Returns -> typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult>
++ 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):
+ '''
- msg = dict(type='Application', request='Consume', version=4, params=_params)
++ args : typing.Sequence[~ConsumeApplicationArg]
++ Returns -> typing.Sequence[~ConsumeApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='Deploy', version=4, params=_params)
++ applications : typing.Sequence[~ApplicationDeploy]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Destroy', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyApplication', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- endpoints : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyRelation', version=4, params=_params)
++ endpoints : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyUnit', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyUnitResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- unit_names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyUnits', version=4, params=_params)
++ unit_names : typing.Sequence[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='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()
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
++ 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
- msg = dict(type='Application', request='Get', version=4, params=_params)
++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='GetCharmURL', 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='GetConstraints', 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()
- application_urls : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult>
++ 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):
+ '''
- msg = dict(type='Application', request='RemoteApplicationInfo', version=4, params=_params)
++ application_urls : typing.Sequence[str]
++ Returns -> typing.Sequence[~RemoteApplicationInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- options : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Set', version=4, params=_params)
++ options : typing.Mapping[str, str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
++ config_settings : typing.Mapping[str, str]
+ config_settings_yaml : str
+ force_series : bool
+ force_units : bool
- msg = dict(type='Application', request='SetCharm', version=4, params=_params)
++ 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='SetConstraints', 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()
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='SetMetricCredentials', version=4, params=_params)
++ creds : typing.Sequence[~ApplicationMetricCredential]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Unexpose', 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()
- options : typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='Unset', version=4, params=_params)
++ options : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Update', version=4, params=_params)
++ settings : typing.Mapping[str, str]
+ settings_yaml : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='APIAddresses', version=4, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++ msg = dict(type='Uniter',
++ request='APIAddresses',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(APIHostPortsResult)
+ async def APIHostPorts(self):
+ '''
+
- msg = dict(type='Uniter', request='APIHostPorts', version=4, params=_params)
++ Returns -> typing.Sequence[~HostPort]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ msg = dict(type='Uniter',
++ request='APIHostPorts',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ActionResults)
+ async def Actions(self, entities):
+ '''
- msg = dict(type='Uniter', request='Actions', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AddMetricBatches', version=4, params=_params)
++ batches : typing.Sequence[~MetricBatchParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AddUnitStorage', version=4, params=_params)
++ storages : typing.Sequence[~StorageAddParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AllMachinePorts', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachinePortsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ApplicationStatus', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ApplicationStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AssignedMachine', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AvailabilityZone', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='BeginActions', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[int]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='CACert', version=4, params=_params)
++ Returns -> typing.Sequence[int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ msg = dict(type='Uniter',
++ request='CACert',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResults)
+ async def CharmArchiveSha256(self, urls):
+ '''
- msg = dict(type='Uniter', request='CharmArchiveSha256', version=4, params=_params)
++ urls : typing.Sequence[~CharmURL]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='CharmModifiedVersion', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~IntResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='CharmURL', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringBoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ClearResolved', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ClosePorts', version=4, params=_params)
++ entities : typing.Sequence[~EntityPortRange]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ConfigSettings', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ConfigSettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='CurrentModel', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='Uniter',
++ request='CurrentModel',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Destroy(self, entities):
+ '''
- msg = dict(type='Uniter', request='Destroy', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='DestroyAllSubordinates', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='EnsureDead', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='EnterScope', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='FinishActions', version=4, params=_params)
++ results : typing.Sequence[~ActionExecutionResult]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='GetMeterStatus', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MeterStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='GetPrincipal', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringBoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='HasSubordinates', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~BoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='JoinedRelations', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='LeaveScope', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Life', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Merge', version=4, params=_params)
++ params : typing.Sequence[~MergeLeadershipSettingsParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='ModelConfig', version=4, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='ModelUUID', 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()
- args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig>
- Returns -> typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult>
++ msg = dict(type='Uniter',
++ request='ModelUUID',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(UnitNetworkConfigResults)
+ async def NetworkConfig(self, args):
+ '''
- msg = dict(type='Uniter', request='NetworkConfig', version=4, params=_params)
++ args : typing.Sequence[~UnitNetworkConfig]
++ Returns -> typing.Sequence[~UnitNetworkConfigResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='OpenPorts', version=4, params=_params)
++ entities : typing.Sequence[~EntityPortRange]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='PrivateAddress', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='ProviderType', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ msg = dict(type='Uniter',
++ request='ProviderType',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResults)
+ async def PublicAddress(self, entities):
+ '''
- msg = dict(type='Uniter', request='PublicAddress', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Read', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~GetLeadershipSettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ReadRemoteSettings', version=4, params=_params)
++ relation_unit_pairs : typing.Sequence[~RelationUnitPair]
++ Returns -> typing.Sequence[~SettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ReadSettings', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~SettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Relation', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~RelationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_ids : typing.Sequence<+T_co>[int]
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RelationById', version=4, params=_params)
++ relation_ids : typing.Sequence[int]
++ Returns -> typing.Sequence[~RelationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RemoveStorageAttachments', version=4, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RequestReboot', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Resolved', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ResolvedModeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetAgentStatus', version=4, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetApplicationStatus', version=4, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetCharmURL', version=4, params=_params)
++ entities : typing.Sequence[~EntityCharmURL]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetStatus', version=4, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetUnitStatus', version=4, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetWorkloadVersion', version=4, params=_params)
++ entities : typing.Sequence[~EntityWorkloadVersion]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='StorageAttachmentLife', version=4, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='StorageAttachments', version=4, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~StorageAttachmentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UnitStatus', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UnitStorageAttachments', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StorageAttachmentIdsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UpdateSettings', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnitSettings]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Watch', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='WatchAPIHostPorts', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ msg = dict(type='Uniter',
++ request='WatchAPIHostPorts',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchActionNotifications(self, entities):
+ '''
- msg = dict(type='Uniter', request='WatchActionNotifications', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchApplicationRelations', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchConfigSettings', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='WatchForModelConfigChanges', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ msg = dict(type='Uniter',
++ request='WatchForModelConfigChanges',
++ version=4,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchLeadershipSettings(self, entities):
+ '''
- msg = dict(type='Uniter', request='WatchLeadershipSettings', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchMeterStatus', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchRelationUnits', version=4, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~RelationUnitsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchStorageAttachments', version=4, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchUnitAddresses', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=4, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WorkloadVersion', version=4, params=_params)
++ 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)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
--- /dev/null
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+# 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):
+ '''
- msg = dict(type='Application', request='AddRelation', version=5, params=_params)
++ endpoints : typing.Sequence[str]
++ Returns -> typing.Mapping[str, ~CharmRelation]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='AddUnits', version=5, params=_params)
++ placement : typing.Sequence[~Placement]
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='CharmRelations', version=5, params=_params)
++ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='Consume', version=5, params=_params)
++ args : typing.Sequence[~ConsumeApplicationArg]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='Deploy', version=5, params=_params)
++ applications : typing.Sequence[~ApplicationDeploy]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Destroy', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyApplication', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- endpoints : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyRelation', version=5, params=_params)
++ endpoints : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyUnit', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~DestroyUnitResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- unit_names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- msg = dict(type='Application', request='DestroyUnits', version=5, params=_params)
++ unit_names : typing.Sequence[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='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()
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
++ 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
- msg = dict(type='Application', request='Get', version=5, params=_params)
++ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='GetCharmURL', 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='GetConstraints', 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()
- options : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Set', version=5, params=_params)
++ options : typing.Mapping[str, str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
++ config_settings : typing.Mapping[str, str]
+ config_settings_yaml : str
+ force_series : bool
+ force_units : bool
- msg = dict(type='Application', request='SetCharm', version=5, params=_params)
++ 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='SetConstraints', 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()
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Application', request='SetMetricCredentials', version=5, params=_params)
++ creds : typing.Sequence[~ApplicationMetricCredential]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Application', request='Unexpose', 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()
- options : typing.Sequence<+T_co>[str]
++ 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
- msg = dict(type='Application', request='Unset', version=5, params=_params)
++ options : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- msg = dict(type='Application', request='Update', version=5, params=_params)
++ settings : typing.Mapping[str, str]
+ settings_yaml : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='APIAddresses', version=5, params=_params)
++ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
++ msg = dict(type='Uniter',
++ request='APIAddresses',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(APIHostPortsResult)
+ async def APIHostPorts(self):
+ '''
+
- msg = dict(type='Uniter', request='APIHostPorts', version=5, params=_params)
++ Returns -> typing.Sequence[~HostPort]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ msg = dict(type='Uniter',
++ request='APIHostPorts',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ActionResults)
+ async def Actions(self, entities):
+ '''
- msg = dict(type='Uniter', request='Actions', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ActionResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AddMetricBatches', version=5, params=_params)
++ batches : typing.Sequence[~MetricBatchParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AddUnitStorage', version=5, params=_params)
++ storages : typing.Sequence[~StorageAddParams]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AllMachinePorts', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MachinePortsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ApplicationStatus', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ApplicationStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AssignedMachine', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='AvailabilityZone', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='BeginActions', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Sequence<+T_co>[int]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='CACert', version=5, params=_params)
++ Returns -> typing.Sequence[int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ msg = dict(type='Uniter',
++ request='CACert',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResults)
+ async def CharmArchiveSha256(self, urls):
+ '''
- msg = dict(type='Uniter', request='CharmArchiveSha256', version=5, params=_params)
++ urls : typing.Sequence[~CharmURL]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='CharmModifiedVersion', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~IntResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='CharmURL', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringBoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ClearResolved', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ClosePorts', version=5, params=_params)
++ entities : typing.Sequence[~EntityPortRange]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ConfigSettings', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ConfigSettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='CurrentModel', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='Uniter',
++ request='CurrentModel',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Destroy(self, entities):
+ '''
- msg = dict(type='Uniter', request='Destroy', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='DestroyAllSubordinates', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='EnsureDead', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='EnterScope', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='FinishActions', version=5, params=_params)
++ results : typing.Sequence[~ActionExecutionResult]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='GetMeterStatus', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~MeterStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='GetPrincipal', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringBoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='HasSubordinates', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~BoolResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='JoinedRelations', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='LeaveScope', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Life', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Merge', version=5, params=_params)
++ params : typing.Sequence[~MergeLeadershipSettingsParam]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
+
- msg = dict(type='Uniter', request='ModelConfig', version=5, params=_params)
++ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='ModelUUID', 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()
- bindings : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
++ bindings : typing.Sequence[str]
+ unit : str
- msg = dict(type='Uniter', request='NetworkInfo', version=5, params=_params)
++ Returns -> typing.Mapping[str, ~NetworkInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='OpenPorts', version=5, params=_params)
++ entities : typing.Sequence[~EntityPortRange]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='PrivateAddress', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='ProviderType', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ msg = dict(type='Uniter',
++ request='ProviderType',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResults)
+ async def PublicAddress(self, entities):
+ '''
- msg = dict(type='Uniter', request='PublicAddress', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Read', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~GetLeadershipSettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ReadRemoteSettings', version=5, params=_params)
++ relation_unit_pairs : typing.Sequence[~RelationUnitPair]
++ Returns -> typing.Sequence[~SettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='ReadSettings', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~SettingsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Relation', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~RelationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_ids : typing.Sequence<+T_co>[int]
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RelationById', version=5, params=_params)
++ relation_ids : typing.Sequence[int]
++ Returns -> typing.Sequence[~RelationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RemoveStorageAttachments', version=5, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='RequestReboot', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Resolved', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~ResolvedModeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='SLALevel', 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()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ msg = dict(type='Uniter',
++ request='SLALevel',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetAgentStatus(self, entities):
+ '''
- msg = dict(type='Uniter', request='SetAgentStatus', version=5, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetApplicationStatus', version=5, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetCharmURL', version=5, params=_params)
++ entities : typing.Sequence[~EntityCharmURL]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetStatus', version=5, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetUnitStatus', version=5, params=_params)
++ entities : typing.Sequence[~EntityStatusArgs]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='SetWorkloadVersion', version=5, params=_params)
++ entities : typing.Sequence[~EntityWorkloadVersion]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='StorageAttachmentLife', version=5, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~LifeResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='StorageAttachments', version=5, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~StorageAttachmentResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UnitStatus', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UnitStorageAttachments', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StorageAttachmentIdsResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='UpdateSettings', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnitSettings]
++ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='Watch', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='WatchAPIHostPorts', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ msg = dict(type='Uniter',
++ request='WatchAPIHostPorts',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchActionNotifications(self, entities):
+ '''
- msg = dict(type='Uniter', request='WatchActionNotifications', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchConfigSettings', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- msg = dict(type='Uniter', request='WatchForModelConfigChanges', 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()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ msg = dict(type='Uniter',
++ request='WatchForModelConfigChanges',
++ version=5,
++ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchLeadershipSettings(self, entities):
+ '''
- msg = dict(type='Uniter', request='WatchLeadershipSettings', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchMeterStatus', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchRelationUnits', version=5, params=_params)
++ relation_units : typing.Sequence[~RelationUnit]
++ Returns -> typing.Sequence[~RelationUnitsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchStorageAttachments', version=5, params=_params)
++ ids : typing.Sequence[~StorageAttachmentId]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchUnitAddresses', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchUnitRelations', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=5, params=_params)
++ entities : typing.Sequence[~Entity]
++ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
++ 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):
+ '''
- msg = dict(type='Uniter', request='WorkloadVersion', version=5, params=_params)
++ 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)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
--- /dev/null
--- /dev/null
++# 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
++
++
--- /dev/null
--- /dev/null
++# 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
++
++
--- /dev/null
--- /dev/null
++# 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
++
++
--- /dev/null
- servers : typing.Sequence<+T_co>[~HostPort]<~HostPort>
+# 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):
+ '''
- parameters : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- results : 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.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
++ 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):
+ '''
- output : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- results : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
++ 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):
+ '''
- params : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- actions : typing.Sequence<+T_co>[~Action]<~Action>
++ 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>[~ActionResult]<~ActionResult>
++ 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>[~ActionsByName]<~ActionsByName>
++ 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>[~ActionResult]<~ActionResult>
++ 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>[~ActionsByReceiver]<~ActionsByReceiver>
++ 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):
+ '''
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
++ 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
- units : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- addresses : typing.Sequence<+T_co>[~Address]<~Address>
++ 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):
+ '''
- disks : typing.Sequence<+T_co>[~Constraints]<~Constraints>
++ addresses : typing.Sequence[~Address]
+ constraints : Value
+ container_type : str
- jobs : typing.Sequence<+T_co>[str]
++ disks : typing.Sequence[~Constraints]
+ hardware_characteristics : HardwareCharacteristics
+ instance_id : str
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
++ 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):
+ '''
- resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
++ 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
- pending_ids : typing.Sequence<+T_co>[str]
++ 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
- endpoints : 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.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
++ endpoints : typing.Sequence[str]
+ '''
+ self.endpoints = endpoints
+
+
+
+class AddRelationResults(Type):
+ _toSchema = {'endpoints': 'endpoints'}
+ _toPy = {'endpoints': 'endpoints'}
+ def __init__(self, endpoints=None, **unknown_fields):
+ '''
- zones : typing.Sequence<+T_co>[str]
++ 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
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
++ 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):
+ '''
- secret_key : typing.Sequence<+T_co>[int]
++ 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
- results : typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
++ 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):
+ '''
- users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
++ 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):
+ '''
- jobs : typing.Sequence<+T_co>[str]
++ 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
- entities : typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult>
++ 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):
+ '''
- deltas : typing.Sequence<+T_co>[~Delta]<~Delta>
++ 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):
+ '''
- annotations : typing.Mapping<~KT, +VT_co>[str, str]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
++ 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):
+ '''
- annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
++ 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):
+ '''
- actions : typing.Mapping<~KT, +VT_co>[str, ~ActionSpec]<~ActionSpec>
++ 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):
+ '''
- charm_relations : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- _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):
++ 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):
- config : typing.Mapping<~KT, +VT_co>[str, str]
++ _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
- endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str]
++ config : typing.Mapping[str, str]
+ config_yaml : str
+ constraints : Value
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- resources : typing.Mapping<~KT, +VT_co>[str, str]
++ devices : typing.Mapping[str, ~Constraints]
++ endpoint_bindings : typing.Mapping[str, str]
+ num_units : int
- storage : typing.Mapping<~KT, +VT_co>[str, ~Constraints]<~Constraints>
++ placement : typing.Sequence[~Placement]
++ policy : str
++ resources : typing.Mapping[str, str]
+ series : str
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- metrics_credentials : typing.Sequence<+T_co>[int]
++ 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
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
++ 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):
+ '''
- bindings : typing.Mapping<~KT, +VT_co>[str, str]
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
++ 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
- spaces : typing.Sequence<+T_co>[~RemoteSpace]<~RemoteSpace>
++ bindings : typing.Mapping[str, str]
++ endpoints : typing.Sequence[~RemoteEndpoint]
+ offer_name : str
+ offer_url : str
+ source_model_tag : str
- changed : typing.Sequence<+T_co>[~RelationChange]<~RelationChange>
- removed : typing.Sequence<+T_co>[int]
++ 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):
+ '''
- options : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- config_settings : 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
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
++ config_settings : typing.Mapping[str, str]
+ config_settings_yaml : str
+ force_series : bool
+ force_units : bool
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- meter_statuses : typing.Mapping<~KT, +VT_co>[str, ~MeterStatus]<~MeterStatus>
- relations : typing.Sequence<+T_co>[str]
++ err : typing.Mapping[str, typing.Any]
+ exposed : bool
+ life : str
- subordinate_to : typing.Sequence<+T_co>[str]
- units : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
++ meter_statuses : typing.Mapping[str, ~MeterStatus]
++ relations : typing.Sequence[str]
+ series : str
+ status : DetailedStatus
- units : typing.Mapping<~KT, +VT_co>[str, ~StatusResult]<~StatusResult>
++ 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
- results : typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
++ 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):
+ '''
- application_urls : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- options : 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
- settings : typing.Mapping<~KT, +VT_co>[str, 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
- results : typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult>
++ 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):
+ '''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
++ 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):
+ '''
- list_ : typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
++ 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):
+ '''
- devicelinks : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult>
++ 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>[~BlockResult]<~BlockResult>
++ 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>[~BoolResult]<~BoolResult>
++ 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):
+ '''
- args : typing.Sequence<+T_co>[typing.Any]
++ 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):
+ '''
- requires : typing.Sequence<+T_co>[str]
++ args : typing.Sequence[typing.Any]
+ id_ : str
+ method : str
- changes : typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
- errors : 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):
+ '''
- result : typing.Sequence<+T_co>[int]
++ 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):
+ '''
- params : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- specs : typing.Mapping<~KT, +VT_co>[str, ~CharmActionSpec]<~CharmActionSpec>
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption>
++ 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
- categories : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- extra_bindings : typing.Mapping<~KT, +VT_co>[str, str]
++ categories : typing.Sequence[str]
+ description : 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>
++ extra_bindings : typing.Mapping[str, str]
+ min_juju_version : str
+ name : str
- tags : typing.Sequence<+T_co>[str]
- terms : typing.Sequence<+T_co>[str]
++ 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
- metrics : typing.Mapping<~KT, +VT_co>[str, ~CharmMetric]<~CharmMetric>
++ 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):
+ '''
- default : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- fingerprint : typing.Sequence<+T_co>[int]
++ 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
- properties : typing.Sequence<+T_co>[str]
++ 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
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
++ 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):
+ '''
- names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- charm_urls : 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):
+ '''
- params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
++ 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):
+ '''
- auth_types : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- regions : typing.Sequence<+T_co>[~CloudRegion]<~CloudRegion>
++ auth_types : typing.Sequence[str]
+ endpoint : str
+ identity_endpoint : str
- attrs : typing.Mapping<~KT, +VT_co>[str, 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 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):
+ '''
- redacted : typing.Sequence<+T_co>[str]
++ attrs : typing.Mapping[str, str]
+ auth_type : str
- class CloudCredentialResult(Type):
- _toSchema = {'error': 'error', 'result': 'result'}
- _toPy = {'error': 'error', 'result': 'result'}
++ redacted : typing.Sequence[str]
+ '''
+ self.attrs = attrs
+ self.auth_type = auth_type
+ self.redacted = redacted
+
+
+
- results : typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult>
++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):
+ '''
- metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
++ 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):
+ '''
- constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~CloudResult]<~CloudResult>
++ 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>[~CloudSpecResult]<~CloudSpecResult>
++ 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):
+ '''
- clouds : typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- results : typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
++ 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):
+ '''
- value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- results : typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult>
++ 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):
+ '''
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult>
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, str]
++ 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, typing.Any]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
++ 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):
+ '''
- 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]
++ 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):
+ '''
- placement : 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
- specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
++ 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):
+ '''
- subnet_tags : typing.Sequence<+T_co>[str]
++ 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
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
++ 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):
+ '''
- entity : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- api_addresses : typing.Sequence<+T_co>[str]
- state_addresses : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
++ 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):
+ '''
- unit_names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
++ 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):
+ '''
- machine_names : typing.Sequence<+T_co>[str]
++ 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
- endpoints : 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):
+ '''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
++ 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):
+ '''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
++ 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):
+ '''
- result : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult>
++ 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):
+ '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- 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):
++ 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
+
+
+
- application : str
++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):
+ '''
- subordinate : bool
++ interface : str
+ name : str
+ role : str
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ '''
++ 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>[~EntityCharmURL]<~EntityCharmURL>
++ 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>[~EntityPortRange]<~EntityPortRange>
++ 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>[~Entity]<~Entity>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult>
++ 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):
+ '''
- agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion>
++ 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):
+ '''
- changes : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- annotations : typing.Mapping<~KT, +VT_co>[str, 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):
+ '''
- metrics : typing.Sequence<+T_co>[~MetricResult]<~MetricResult>
++ 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
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
++ 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):
+ '''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
++ 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):
+ '''
- patterns : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~Payload]<~Payload>
++ 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>[~ErrorResult]<~ErrorResult>
++ 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>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult>
++ 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>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult>
++ 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):
+ '''
- filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment>
++ 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):
+ '''
- machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~FilesystemAttachmentInfo]<~FilesystemAttachmentInfo>
++ 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
- result : typing.Sequence<+T_co>[~FilesystemDetails]<~FilesystemDetails>
++ 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
- results : typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult>
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter>
++ machines : typing.Sequence[str]
+ '''
+ self.machines = machines
+
+
+
+class FilesystemFilters(Type):
+ _toSchema = {'filters': 'filters'}
+ _toPy = {'filters': 'filters'}
+ def __init__(self, filters=None, **unknown_fields):
+ '''
- attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- tags : typing.Mapping<~KT, +VT_co>[str, str]
++ attributes : typing.Mapping[str, typing.Any]
+ filesystem_tag : str
+ provider : str
+ size : int
- results : typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult>
++ 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>[~FilesystemResult]<~FilesystemResult>
++ 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):
+ '''
- filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem>
++ 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):
+ '''
- names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- prefixes : 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):
+ '''
- matches : typing.Sequence<+T_co>[~Entity]<~Entity>
++ prefixes : typing.Sequence[str]
+ '''
+ self.prefixes = prefixes
+
+
+
+class FindTagsResults(Type):
+ _toSchema = {'matches': 'matches'}
+ _toPy = {'matches': 'matches'}
+ def __init__(self, matches=None, **unknown_fields):
+ '''
- list_ : typing.Sequence<+T_co>[~Tools]<~Tools>
++ 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
- _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):
++ 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):
- applications : typing.Mapping<~KT, +VT_co>[str, ~ApplicationStatus]<~ApplicationStatus>
- machines : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
++ _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):
+ '''
- relations : typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus>
- remote_applications : typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~RemoteApplicationStatus>
++ applications : typing.Mapping[str, ~ApplicationStatus]
++ controller_timestamp : str
++ machines : typing.Mapping[str, ~MachineStatus]
+ model : ModelStatusInfo
- results : typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- tags : typing.Sequence<+T_co>[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
- statuses : typing.Sequence<+T_co>[~DetailedStatus]<~DetailedStatus>
++ 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
- new_bridges : typing.Sequence<+T_co>[~DeviceBridgeInfo]<~DeviceBridgeInfo>
++ 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
- results : typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange>
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- models : typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
++ 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):
+ '''
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
++ 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):
+ '''
- arches : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- series : typing.Sequence<+T_co>[str]
++ arches : typing.Sequence[str]
+ region : str
+ root_storage_type : str
- specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult>
++ 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):
+ '''
- network_config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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
- volume_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
++ network_config : typing.Sequence[~NetworkConfig]
+ nonce : str
+ tag : str
- arches : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- instance_types : typing.Sequence<+T_co>[~InstanceType]<~InstanceType>
++ 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
- results : typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~IntResult]<~IntResult>
++ 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):
+ '''
- jobs : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~JobsResult]<~JobsResult>
++ 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):
+ '''
- class LifeResult(Type):
- _toSchema = {'error': 'error', 'life': 'life'}
- _toPy = {'error': 'error', 'life': 'life'}
- def __init__(self, error=None, life=None, **unknown_fields):
++ results : typing.Sequence[~JobsResult]
+ '''
+ self.results = [JobsResult.from_json(o) for o in results or []]
+
+
+
- error : Error
- life : str
++class KnownServiceArgs(Type):
++ _toSchema = {'known_services': 'known-services'}
++ _toPy = {'known-services': 'known_services'}
++ def __init__(self, known_services=None, **unknown_fields):
+ '''
- self.error = Error.from_json(error) if error else None
- self.life = life
++ known_services : typing.Sequence[str]
+ '''
- class LifeResults(Type):
- _toSchema = {'results': 'results'}
- _toPy = {'results': 'results'}
- def __init__(self, results=None, **unknown_fields):
++ self.known_services = known_services
+
+
+
- results : typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
++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):
+ '''
- self.results = [LifeResult.from_json(o) for o in results or []]
++ attributes : typing.Mapping[str, str]
++ count : int
++ type_ : str
+ '''
- class ListCloudImageMetadataResult(Type):
- _toSchema = {'result': 'result'}
- _toPy = {'result': 'result'}
- def __init__(self, result=None, **unknown_fields):
++ self.attributes = attributes
++ self.count = count
++ self.type_ = type_
+
+
+
- result : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
++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):
+ '''
- self.result = [CloudImageMetadata.from_json(o) for o in result or []]
++ mount_point : str
++ provider : str
++ read_only : bool
+ '''
- class ListImageResult(Type):
- _toSchema = {'result': 'result'}
- _toPy = {'result': 'result'}
- def __init__(self, result=None, **unknown_fields):
++ self.mount_point = mount_point
++ self.provider = provider
++ self.read_only = read_only
+
+
+
- result : typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata>
++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):
+ '''
- self.result = [ImageMetadata.from_json(o) for o in result or []]
++ 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
+ '''
- class ListResourcesArgs(Type):
- _toSchema = {'entities': 'entities'}
- _toPy = {'entities': 'entities'}
- def __init__(self, entities=None, **unknown_fields):
++ 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
+
+
+
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++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):
+ '''
- self.entities = [Entity.from_json(o) for o in entities or []]
++ attachment : KubernetesFilesystemAttachmentParams
++ attributes : typing.Mapping[str, typing.Any]
++ provider : str
++ size : int
++ storagename : str
++ tags : typing.Mapping[str, str]
+ '''
- class ListSSHKeys(Type):
++ 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
+
+
+
- results : typing.Sequence<+T_co>[~Space]<~Space>
++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>[~Subnet]<~Subnet>
++ 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):
+ '''
- resource_names : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
++ 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):
+ '''
- params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
++ 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):
+ '''
- args : typing.Sequence<+T_co>[~LookUpArg]<~LookUpArg>
++ 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>[~LookUpPayloadArg]<~LookUpPayloadArg>
++ 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):
+ '''
- addresses : typing.Sequence<+T_co>[~Address]<~Address>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult>
++ 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):
+ '''
- block_devices : typing.Sequence<+T_co>[~BlockDevice]<~BlockDevice>
++ 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):
+ '''
- container_types : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers>
++ 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):
+ '''
- tags : typing.Sequence<+T_co>[str]
++ 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
- info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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
- results : typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
++ 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):
+ '''
- params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts>
++ 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):
+ '''
- ports : typing.Sequence<+T_co>[~MachinePortRange]<~MachinePortRange>
++ 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
- results : typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
++ 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):
+ '''
- containers : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
++ 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
- ip_addresses : typing.Sequence<+T_co>[str]
- jobs : typing.Sequence<+T_co>[str]
++ containers : typing.Mapping[str, ~MachineStatus]
+ dns_name : str
+ hardware : str
+ has_vote : bool
+ id_ : str
+ instance_id : str
+ instance_status : DetailedStatus
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
++ 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):
+ '''
- changes : 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):
+ '''
- results : typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
++ 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):
+ '''
- result : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- results : typing.Sequence<+T_co>[~MapResult]<~MapResult>
++ 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):
+ '''
- tags : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- image_ids : typing.Sequence<+T_co>[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):
+ '''
- metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
++ 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):
+ '''
- statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
++ 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):
+ '''
- metrics : typing.Sequence<+T_co>[~Metric]<~Metric>
++ 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
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
++ 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):
+ '''
- source_api_addrs : typing.Sequence<+T_co>[str]
++ 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
- target_api_addrs : typing.Sequence<+T_co>[str]
++ source_api_addrs : typing.Sequence[str]
+ source_ca_cert : str
- 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):
+ '''
- failed : 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):
+ '''
- unknown_sample : typing.Sequence<+T_co>[str]
++ failed : typing.Sequence[str]
+ migration_id : str
+ phase : str
+ success_count : int
+ unknown_count : int
- blocks : 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):
+ '''
- models : typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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, ~ConfigValue]<~ConfigValue>
++ 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, typing.Any]
++ 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
- 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>
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
++ 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):
+ '''
- _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):
++ 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):
- machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
++ _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
- users : typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>
++ machines : typing.Sequence[~ModelMachineInfo]
+ migration : ModelMigrationStatus
+ name : str
+ owner_tag : str
+ provider_type : str
+ sla : ModelSLAInfo
+ status : EntityStatus
- results : typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
++ 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):
+ '''
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
++ 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):
+ '''
- creds : typing.Sequence<+T_co>[int]
++ 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):
+ '''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
++ 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
- _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):
++ 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):
- models : typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
++ _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):
+ '''
- keys : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult>
++ 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):
+ '''
- changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess>
++ 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>[~ModifyModelAccess]<~ModifyModelAccess>
++ 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):
+ '''
- ssh_keys : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- ha_members : typing.Sequence<+T_co>[~HAMember]<~HAMember>
++ 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):
+ '''
- rs_members : typing.Sequence<+T_co>[~Member]<~Member>
++ ha_members : typing.Sequence[~HAMember]
+ master : HAMember
- dns_search_domains : typing.Sequence<+T_co>[str]
- dns_servers : typing.Sequence<+T_co>[str]
++ 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
- addresses : typing.Sequence<+T_co>[~InterfaceAddress]<~InterfaceAddress>
++ 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):
+ '''
- bindings : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- network_info : typing.Sequence<+T_co>[~NetworkInfo]<~NetworkInfo>
++ 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
- results : typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
++ 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):
+ '''
- dns_nameservers : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- ip_addresses : typing.Sequence<+T_co>[str]
++ dns_nameservers : typing.Sequence[str]
+ gateway : str
- results : typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
++ 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):
+ '''
- labels : typing.Sequence<+T_co>[str]
++ 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
- patterns : 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):
+ '''
- results : typing.Sequence<+T_co>[~Payload]<~Payload>
++ 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>[~PayloadResult]<~PayloadResult>
++ 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>[~PhaseResult]<~PhaseResult>
++ 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):
+ '''
- interfaces : typing.Sequence<+T_co>[~ProviderInterfaceInfo]<~ProviderInterfaceInfo>
++ 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
- results : typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
++ 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):
+ '''
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
++ 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
- 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]
++ 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
- subnets_to_zones : typing.Sequence<+T_co>[str]
- tags : typing.Mapping<~KT, +VT_co>[str, str]
- volumes : typing.Sequence<+T_co>[~VolumeParams]<~VolumeParams>
++ 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
- results : typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult>
++ 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>[~ProxyConfigResult]<~ProxyConfigResult>
++ 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>[~RebootActionResult]<~RebootActionResult>
++ 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):
+ '''
- value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- changedunits : typing.Mapping<~KT, +VT_co>[str, ~RelationUnitChange]<~RelationUnitChange>
- departedunits : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- relation_ids : typing.Sequence<+T_co>[int]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
++ 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):
+ '''
- endpoints : typing.Sequence<+T_co>[~EndpointStatus]<~EndpointStatus>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
++ 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):
+ '''
- changed : typing.Mapping<~KT, +VT_co>[str, ~UnitSettings]<~UnitSettings>
- departed : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
++ 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):
+ '''
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
++ 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
- results : typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult>
++ 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):
+ '''
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- relations : typing.Sequence<+T_co>[str]
++ endpoints : typing.Sequence[~RemoteEndpoint]
++ err : typing.Mapping[str, typing.Any]
+ life : str
- changed_units : typing.Mapping<~KT, +VT_co>[str, ~RemoteRelationUnitChange]<~RemoteRelationUnitChange>
- departed_units : 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- unit_id : RemoteEntityId
++ 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):
+ '''
- self.settings = settings
- self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None
++ 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]
+ '''
- changed : typing.Sequence<+T_co>[~RemoteRelationChange]<~RemoteRelationChange>
++ 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):
+ '''
- removed : typing.Sequence<+T_co>[int]
++ changed : typing.Sequence[~RemoteRelationChange]
+ initial : bool
- provider_attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
++ provider_attributes : typing.Mapping[str, typing.Any]
+ provider_id : str
- urls : typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult>
++ 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):
+ '''
- references : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
++ 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):
+ '''
- charm_store_resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
- resources : typing.Sequence<+T_co>[~Resource]<~Resource>
- unit_resources : typing.Sequence<+T_co>[~UnitResources]<~UnitResources>
++ 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
- results : typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
++ 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):
+ '''
- members : typing.Sequence<+T_co>[~Member]<~Member>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
++ 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):
+ '''
- applications : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[str]
++ applications : typing.Sequence[str]
+ commands : str
- units : typing.Sequence<+T_co>[str]
++ machines : typing.Sequence[str]
+ timeout : int
- results : typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
++ 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):
+ '''
- addresses : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
++ 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):
+ '''
- entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys>
++ 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):
+ '''
- public_keys : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
++ 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):
+ '''
- bytes_ : typing.Sequence<+T_co>[int]
- charms : typing.Sequence<+T_co>[str]
- tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
++ 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):
+ '''
- unit_revisions : typing.Mapping<~KT, +VT_co>[str, ~SerializedModelResourceRevision]<~SerializedModelResourceRevision>
++ 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
- machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices>
++ 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):
+ '''
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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):
+ '''
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
++ 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):
+ '''
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
++ 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):
+ '''
- args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
++ 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):
+ '''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
++ 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):
+ '''
- args : typing.Sequence<+T_co>[~SetStatusArg]<~SetStatusArg>
++ 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):
+ '''
- settings : typing.Mapping<~KT, +VT_co>[str, str]
++ 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
- results : typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
++ 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):
+ '''
- claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
++ 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):
+ '''
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
++ 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
- results : typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
++ 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):
+ '''
- requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult>
++ 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):
+ '''
- patterns : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
++ 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):
+ '''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
++ 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>[~StorageAttachmentResult]<~StorageAttachmentResult>
++ 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):
+ '''
- attachments : typing.Mapping<~KT, +VT_co>[str, ~StorageAttachmentDetails]<~StorageAttachmentDetails>
++ 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):
+ '''
- result : typing.Sequence<+T_co>[~StorageDetails]<~StorageDetails>
++ 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
- results : typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult>
++ 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>[~StorageDetailsResult]<~StorageDetailsResult>
++ 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):
+ '''
- filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter>
++ 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):
+ '''
- attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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):
+ '''
- names : typing.Sequence<+T_co>[str]
- providers : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter>
++ 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):
+ '''
- storage_pools : typing.Sequence<+T_co>[~StoragePool]<~StoragePool>
++ 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
- results : typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult>
++ 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):
+ '''
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
++ 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>[~StringResult]<~StringResult>
++ 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):
+ '''
- result : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
++ 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):
+ '''
- changes : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
++ 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):
+ '''
- self.results = [StringsWatchResult.from_json(o) for o in results or []]
++ 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]
+ '''
- 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):
++ self.credentials = [TaggedCredential.from_json(o) for o in credentials or []]
+
+
+
- cidr : str
- life : str
- provider_id : str
- space_tag : str
- status : str
- vlan_tag : int
- zones : typing.Sequence<+T_co>[str]
++class TokenResult(Type):
++ _toSchema = {'error': 'error', 'token': 'token'}
++ _toPy = {'error': 'error', 'token': 'token'}
++ def __init__(self, error=None, token=None, **unknown_fields):
+ '''
- 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
++ error : Error
++ token : str
+ '''
- 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):
++ self.error = Error.from_json(error) if error else None
++ self.token = token
+
+
+
- space_tag : str
- zone : str
++class TokenResults(Type):
++ _toSchema = {'results': 'results'}
++ _toPy = {'results': 'results'}
++ def __init__(self, results=None, **unknown_fields):
+ '''
- self.space_tag = space_tag
- self.zone = zone
++ results : typing.Sequence[~TokenResult]
+ '''
- tools : typing.Sequence<+T_co>[~Tools]<~Tools>
++ 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
- results : typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
++ 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):
+ '''
- payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
++ 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):
+ '''
- info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
++ 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
- results : typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult>
++ 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):
+ '''
- download_progress : typing.Mapping<~KT, +VT_co>[str, int]
- resources : typing.Sequence<+T_co>[~Resource]<~Resource>
++ 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
- resources : typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>
++ 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
- opened_ports : typing.Sequence<+T_co>[str]
++ 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
- subordinates : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
++ opened_ports : typing.Sequence[str]
+ public_address : str
- args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig>
++ 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):
+ '''
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
++ 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):
+ '''
- credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult>
++ 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):
+ '''
- user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
++ 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):
+ '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
++ 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):
+ '''
- user_models : typing.Sequence<+T_co>[~UserModel]<~UserModel>
++ 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):
+ '''
- spaces : typing.Sequence<+T_co>[str]
- tags : typing.Sequence<+T_co>[str]
++ 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
- results : typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
++ 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>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult>
++ 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>[~VolumeAttachmentResult]<~VolumeAttachmentResult>
++ 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):
+ '''
- volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment>
++ 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):
+ '''
- machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
++ 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
- result : typing.Sequence<+T_co>[~VolumeDetails]<~VolumeDetails>
++ 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
- results : typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult>
++ 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):
+ '''
- machines : typing.Sequence<+T_co>[str]
++ 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):
+ '''
- filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter>
++ machines : typing.Sequence[str]
+ '''
+ self.machines = machines
+
+
+
+class VolumeFilters(Type):
+ _toSchema = {'filters': 'filters'}
+ _toPy = {'filters': 'filters'}
+ def __init__(self, filters=None, **unknown_fields):
+ '''
- attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
++ 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
- tags : typing.Mapping<~KT, +VT_co>[str, str]
++ attributes : typing.Mapping[str, typing.Any]
+ provider : str
+ size : int
- results : typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult>
++ 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>[~VolumeResult]<~VolumeResult>
++ 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):
+ '''
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
++ 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):
+ '''
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
++ 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):
+ '''
- results : typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
++ 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[~ZoneResult]
+ '''
+ self.results = [ZoneResult.from_json(o) for o in results or []]
--- /dev/null
- 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])))
+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)]
- log.info("Driver connected to juju %s", self.addr)
++ 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()
- return await(self.task())
++ 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()
+ 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)
--- /dev/null
- JUJU_VERSION = re.compile('[0-9]+\.[0-9-]+[\.\-][0-9a-z]+(\.[0-9]+)?')
+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()
+
- 'ModelInfo']
++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',
- 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
++ '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<version>.py file.
+
+ """
- version = connection.facades[cls.__name__[:-6]]
++ 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.
+
+ """
++ 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<version>.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()
--- /dev/null
--- /dev/null
++[
++ {
++ "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"
++ ]
++ }
++ }
++ }
++ }
++]
--- /dev/null
--- /dev/null
++schemas-juju-2.5-rc1.json
--- /dev/null
- :param jujudata JujuData: The source for current controller information.
+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.
- owner=None):
++ :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,
- name, credential = self._connector.jujudata.load_credential(cloud, name)
++ 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:
- await cloud_facade.UpdateCredentials([
++ 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())
- )])
-
++ tagged_credentials = [
+ client.UpdateCloudCredential(
+ tag=tag.credential(cloud, tag.untag('user-', owner), name),
+ credential=credential,
- async def destroy_models(self, *models):
++ )]
++ 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
+
- :param str \*models: Names or UUIDs of models to destroy
++ async def destroy_models(self, *models, destroy_storage=False):
+ """Destroy one or more models.
+
- await model_facade.DestroyModels([
- client.Entity(tag.model(model))
- for model in models
- ])
++ :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)
+ )
+
- user_facade = client.UserManagerFacade.from_connection(self.connection())
++ 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
- await user_facade.AddUser(users)
- return await self.get_user(username)
++ user_facade = client.UserManagerFacade.from_connection(
++ self.connection())
+ users = [client.AddUser(display_name=display_name,
+ username=username,
+ password=password)]
- user_facade = client.UserManagerFacade.from_connection(self.connection())
++ 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.
+
+ """
- :param str \*patterns: Patterns to match against
++ 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.
+
- async def get_user(self, username):
++ :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
+
- return User(self, response.results[0].result)
++ 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:
- this will do nothing (see revoke_model for a way to remove permissions).
++ 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,
- model = tag.model(self.info.uuid)
++ 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(model_uuid)
+ changes = client.ModifyModelAccess(acl, 'revoke', model, user)
+ return await model_facade.ModifyModelAccess([changes])
--- /dev/null
- :param str \*terms: Terms to agree to
+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
+
+ """
+ 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()
--- /dev/null
- model.loop)
+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,
- :param str scp_opts: Additional options to the `scp` command
++ 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
- '-B',
- source, destination
++ :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',
- cmd += scp_opts.split()
++ '-B'
+ ]
++ 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']
--- /dev/null
- self._connector.loop)
+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,
- :param \*cidrs: Optional list of existing subnet CIDRs
++ 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: '<application>[:<relation_name>]'
+ :param str relation2: '<application>[:<relation_name>]'
+
+ """
+ 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 str \*zones: Zone(s) in which the subnet resides
++ :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 \*commands: The commands to block. Valid values are
++ :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 \*\*pool_config: key/value pool configuration pairs
++ :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
- to=None):
++ :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,
- entity = await self.charmstore.entity(entity_url, channel=channel)
++ 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: <charm endpoint>:<network space> pairs
+ :param dict budget: <budget name>:<limit> 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: <resource name>:<file path> 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)
++ 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,
- placement=parse_placement(to)
++ 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,
- async def _add_store_resources(self, application, entity_url, entity=None):
++ placement=parse_placement(to),
++ devices=devices,
+ )
+
- entity = await self.charmstore.entity(entity_url)
++ 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
- channel=None, num_units=None, placement=None):
++ 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,
- placement=placement
++ 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,
- # 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
++ 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()
+
- 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)
++ # 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:
- :param str \*machine_ids: Ids of the machines to remove
++ 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 <lp|gh>:<username>
+
+ """
+ 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 \*commands: The commands to unblock. Valid values are
++ :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 \*keys: The keys to unset
++ :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 \*tags: Tags of entities from which to retrieve metrics.
++ :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.
+
- is_local = not entity_id.startswith('cs:')
++ :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):
- if is_local and os.path.isfile(entity_id):
++ is_store_url = entity_id.startswith('cs:')
+
- elif is_local and os.path.isdir(entity_id):
++ if not is_store_url and os.path.isfile(entity_id):
+ bundle_yaml = Path(entity_id).read_text()
- self.plan = await self.client_facade.GetBundleChanges(
++ 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)
+
- storage, endpoint_bindings, resources):
++ 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,
- # the bundle plan doesn't actually do anything with resources, even
- # though it ostensibly gives us something (None) for that param
++ 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)
- resources = await self.model._add_store_resources(application,
- charm)
++
++ 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:'):
- def __init__(self, loop):
++ 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
+ """
- self._cs = theblues.charmstore.CharmStore(timeout=5)
++ def __init__(self, loop, cs_timeout=20):
+ self.loop = loop
- * build/\* - This is used for packing the charm itself and any
++ 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::
+
- * \*/.\* - Hidden files are all ignored for now. This will most
++ * build/* - This is used for packing the charm itself and any
+ similar tasks.
++ * */.* - 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
--- /dev/null
- [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"],
-
+from .client import client
+
+import paramiko
+import os
+import re
+import tempfile
+import shlex
+from subprocess import (
+ CalledProcessError,
+)
+import uuid
+
+
+arches = [
- memKb = re.split('\s+', lines[2])[1]
++ [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())
+
- info['cpu-cores'] += cores
- recorded[physical_id] = True
++ 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
+
+ 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()
--- /dev/null
- :param int timeout: Time, in seconds, to wait before command is considered failed
+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 \*\*params: Action parameters
++ :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 str scp_opts: Additional options to the `scp` command
++ :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 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]
--- /dev/null
- def __init__(self, controller, user_info):
+import logging
+
+import pyrfc3339
+
+from . import tag
+
+log = logging.getLogger(__name__)
+
+
+class User(object):
++ 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
--- /dev/null
- async def run_with_interrupt(task, event, loop=None):
+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)
+
+
- Awaits a task while allowing it to be interrupted by an `asyncio.Event`.
++async def run_with_interrupt(task, *events, loop=None):
+ """
- 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.
++ Awaits a task while allowing it to be interrupted by one or more
++ `asyncio.Event`s.
+
- :param event: An `asyncio.Event` which, if set, will interrupt `task`
- and cause it to be cancelled.
++ 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
- event_task = loop.create_task(event.wait())
- done, pending = await asyncio.wait([task, event_task],
++ :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()
- 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]
++ 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() # 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 <ip>:<port>
++ :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)
--- /dev/null
- 'websockets>=4.0,<7.0',
+# 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>=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': [
+ ],
+ },
+)
--- /dev/null
-
+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)
--- /dev/null
- myapp:
- charm: cs:xenial/ubuntu-0
++series: xenial
+applications:
++ dummy-sink:
++ charm: cs:~juju-qa/dummy-sink
++ num_units: 1
++ dummy-subordinate:
++ charm: cs:~juju-qa/dummy-subordinate
++relations:
++ - ['dummy-sink', 'dummy-subordinate']
--- /dev/null
--- /dev/null
++series: xenial
++services:
++ ghost:
++ charm: "cs:ghost-19"
++ num_units: 1
++ resources:
++ ghost-stable: 11
--- /dev/null
--- /dev/null
++-----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-----
--- /dev/null
--- /dev/null
++-----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-----
--- /dev/null
-
+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]
--- /dev/null
- assert user.access is ''
+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 fresh.access is ''
++ assert user.access == ''
+ fresh = await controller.get_user(username) # fetch fresh copy
++ 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
--- /dev/null
- await machine.scp_to(f.name, 'testfile')
+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_from('testfile', f.name)
++ await machine.scp_to(f.name, 'testfile', scp_opts='-p')
+
+ with NamedTemporaryFile() as f:
++ await machine.scp_from('testfile', f.name, scp_opts='-p')
+ assert f.read() == b'testcontents'
--- /dev/null
- async def test_deploy_local_bundle(event_loop):
+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
- for app in ('wordpress', 'mysql', 'myapp'):
- assert app in model.applications
++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))
+
- # 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,
- )
++ 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"
+ )
+
- config={'user.user-data': '#cloud-config\nssh_authorized_keys:\n- {}'.format(public_key)},
++ # 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,
- if host:
- # add a new manual machine
- machine1 = await model.add_machine(spec='ssh:{}@{}:{}'.format(
- "ubuntu",
- host['address'],
- private_key_path,
- ))
++ 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)
+
- ), timeout, event_loop)
++ 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',
- _deploy_in_loop(new_loop, model_name, model._connector.jujudata))
++ ), 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))
+ 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'
--- /dev/null
- async def test_file_cred(self, mock_cf):
+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')
- mock_cf.from_connection().UpdateCredentials = up_creds
++ 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()
++ 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'
--- /dev/null
--- /dev/null
++#
++# 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"
--- /dev/null
- mock
- asynctest
- ipdb
+# 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
- flake8 --ignore E501 {posargs} juju tests
- deps =
- flake8
-
- [testenv:lint]
- envdir = {toxworkdir}/py35
- commands =
- flake8 --ignore E501 {posargs} juju
++ 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 =
- commands = py.test --tb native -ra -v -s -n auto -k 'integration' -m 'not serial' {posargs}
++ flake8 --ignore E501,W504 {posargs} juju tests
+deps =
+ flake8
+
+[testenv:integration]
+envdir = {toxworkdir}/py3
++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/_*