.\#*
dist/
dev/
+.pytest_cache
+pytestdebug.log
+.vscode/
-dist: trusty
+dist: xenial
sudo: required
language: python
-python:
- - "3.5"
+cache: pip
before_install:
- - sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable -y
+ - 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 install lxd snapd -y
- - sudo usermod -a -G lxd $USER
- - sudo service lxd start || true
- - sudo lxd init --auto
-install: pip install tox-travis
+ - 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:
- - SNAP_CMD="sudo snap install juju --classic --stable"
- - SNAP_CMD="sudo snap install juju --classic --edge"
+ global: >
+ TEST_AGENTS='{"agents":[{"url":"https://api.staging.jujucharms.com/identity","username":"libjuju-ci@yellow"}],"key":{"private":"88OOCxIHQNguRG7zFg2y2Hx5Ob0SeVKKBRnjyehverc=","public":"fDn20+5FGyN2hYO7z0rFUyoHGUnfrleslUNtoYsjNSs="}}'
+ 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:
+ # Run lint before performing more expensive operations (fail fast/early)
+ - tox -e lint
+
+ # 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
+
+ # 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:
- - (eval "$SNAP_CMD")
- - sudo ln -s /snap/bin/juju /usr/bin/juju || true
- - sudo -E sudo -u $USER -E bash -c "/snap/bin/juju bootstrap localhost test"
- - tox -e py35,integration
- - sudo -E sudo -u $USER -E bash -c "/snap/bin/juju destroy-controller --destroy-all-models -y test"
- - sudo snap remove juju
+ - juju bootstrap localhost test --config 'identity-url=https://api.staging.jujucharms.com/identity' --config 'allow-model-access=true'
+ - tox -e py3,integration,serial
-BIN := .tox/py35/bin
-PY := $(BIN)/python3.5
+BIN := .tox/py3/bin
+PY := $(BIN)/python
PIP := $(BIN)/pip
SCHEMAGEN := $(shell which schemagen)
VERSION=$(shell cat VERSION)
.tox:
tox -r --notest
-client:
+client: .tox
ifndef SCHEMAGEN
$(error "schemagen is not available, please install from https://github.com/juju/schemagen")
endif
test:
tox
+.PHONY: lint
+lint:
+ tox -e lint --notest
+
docs: .tox
$(PIP) install -r docs/requirements.txt
rm -rf docs/_build/
cd docs/_build/ && zip -r docs.zip *
release:
- git remote | xargs -L1 git fetch --tags
- $(PY) setup.py sdist upload
+ 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 remote | xargs -L1 git push --tags
+ git push --tags
upload: release
# Copyright 2014-2015 Canonical Limited.
#
-# This file is part of charm-helpers.
+# 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
#
-# charm-helpers is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3 as
-# published by the Free Software Foundation.
+# http://www.apache.org/licenses/LICENSE-2.0
#
-# charm-helpers is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.
+# 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 importlib
-juju\.client package
-====================
+Internal APIs
+=============
These packages are for internal use in communicating with the low-level
API. You should use the object oriented API instead. They are documented
-juju
-====
+Public APIs
+===========
It is recommended that you start with :doc:`juju.model` or :doc:`juju.controller`.
If you need helpers to manage the asyncio loop, try :doc:`juju.loop`.
-Change Log
-----------
+Changelog
+---------
+
+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)
+
+
+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
+
+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
^^^^^
-----------------
.. toctree::
+ :caption: Overview
:glob:
:maxdepth: 3
narrative/index
- API Docs <api/modules>
- Internal API Docs <api/juju.client>
- upstream-updates/index
-.. include:: changelog.rst
+.. toctree::
+ :caption: API Documentation
+ :glob:
+ :maxdepth: 3
+
+ api/modules
+ api/juju.client
+
+.. toctree::
+ :caption: Project
+ :glob:
+ :maxdepth: 3
+
+ upstream-updates/index
+ changelog
+
Indices and tables
Connecting to the controller endpoint is useful if you want to programmatically
create a new model. If the model you want to use already exists, you can
-connect directly to it (see :doc:`model`).
+connect directly to it (see py:doc:`model`).
-For api docs, see :class:`juju.controller.Controller`.
+For API docs, see py:class:`juju.controller.Controller`.
Connecting to the Current Controller
from juju.controller import Controller
controller = Controller()
- await controller.connect_current()
+ await controller.connect()
Connecting to a Named Controller
from juju.controller import Controller
controller = Controller()
- await controller.connect_controller('mycontroller')
+ await controller.connect('mycontroller')
-Connecting with Username/Password Authentication
-------------------------------------------------
-The most flexible, but also most verbose, way to connect is using the API
-endpoint url and credentials directly. This method does NOT require the Juju
-CLI client to be installed.
+Connecting with Authentication
+------------------------------
+You can control what user you are connecting with by specifying either a
+username/password pair, or a macaroon or bakery client that can provide
+a macaroon.
-.. code:: python
- from juju.controller import Controller
+.. code:: python
controller = Controller()
+ await controller.connect(username='admin',
+ password='f53f08cfc32a2e257fe5393271d89d62')
+
+ # or with a macaroon
+ await controller.connect(macaroons=[
+ {
+ "Name": "macaroon-218d87053ad19626bcd5a0eef0bc9ba8bd4fbd80a968f52a5fd430b2aa8660df",
+ "Value": "W3siY2F2ZWF0cyI6 ... jBkZiJ9XQ==",
+ "Domain": "10.130.48.27",
+ "Path": "/auth",
+ "Secure": false,
+ "HostOnly": true,
+ "Expires": "2018-03-07T22:07:23Z",
+ },
+ ])
+
+ # or with a bakery client
+ from macaroonbakery.httpbakery import Client
+ from http.cookiejar import FileCookieJar
+
+ bakery_client=Client()
+ bakery_client.cookies = FileCookieJar('cookies.txt')
+ controller = Controller()
+ await controller.connect(bakery_client=bakery_client)
+
- controller_endpoint = '10.0.4.171:17070'
- username = 'admin'
- password = 'f53f08cfc32a2e257fe5393271d89d62'
-
- # Left out for brevity, but if you have a cert string you should pass it in.
- # You can copy the cert from the output of The `juju show-controller`
- # command.
- cacert = None
-
- await controller.connect(
- controller_endpoint,
- username,
- password,
- cacert,
- )
-
-
-Connecting with Macaroon Authentication
----------------------------------------
-To connect to a shared controller, you'll need
-to use macaroon authentication. The simplest example is shown below, and uses
-already-discharged macaroons from the local filesystem. This will work if you
-have the Juju CLI installed.
-
-.. note::
- The library does not yet contain support for fetching and discharging
- macaroons. Until it does, if you want to use macaroon auth, you'll need
- to supply already-discharged macaroons yourself.
+Connecting with an Explicit Endpoint
+------------------------------------
+The most flexible, but also most verbose, way to connect is using the API
+endpoint url and credentials directly. This method does NOT require the
+Juju CLI client to be installed.
.. code:: python
- from juju.client.connection import get_macaroons()
- from juju.controller import Controller
-
controller = Controller()
-
- controller_endpoint = '10.0.4.171:17070'
- username = None
- password = None
- cacert = None
- macaroons = get_macaroons()
-
await controller.connect(
- controller_endpoint,
- username,
- password,
- cacert,
- macaroons,
+ endpoint='10.0.4.171:17070',
+ username='admin',
+ password='f53f08cfc32a2e257fe5393271d89d62',
+ cacert=None, # Left out for brevity, but if you have a cert string you
+ # should pass it in. You can get the cert from the output
+ # of The `juju show-controller` command.
)
-Narrative Docs
-==============
+**Overview**
.. toctree::
:glob:
models. In order to do anything useful with a model, the juju lib must
connect to one of these endpoints. There are several ways to do this.
-For api docs, see :class:`juju.model.Model`.
+For api docs, see py:class:`juju.model.Model`.
Connecting to the Current Model
.. code:: python
- from juju.model import Model
-
model = Model()
- await model.connect_current()
+ await model.connect()
Connecting to a Named Model
.. code:: python
- # $ juju switch
- # juju-2.0.1:admin/libjuju
-
- from juju.model import Model
-
model = Model()
- await model.connect_model('juju-2.0.1:admin/libjuju')
+ await model.connect('juju-2.0.1:admin/libjuju')
-Connecting with Username/Password Authentication
-------------------------------------------------
-The most flexible, but also most verbose, way to connect is using the API
-endpoint url and credentials directly. This method does NOT require the Juju
-CLI client to be installed.
+Connecting with Authentication
+------------------------------
+You can control what user you are connecting with by specifying either a
+username/password pair, or a macaroon or bakery client that can provide
+a macaroon.
-.. code:: python
- from juju.model import Model
+.. code:: python
model = Model()
+ await model.connect(username='admin',
+ password='f53f08cfc32a2e257fe5393271d89d62')
+
+ # or with a macaroon
+ await model.connect(macaroons=[
+ {
+ "Name": "macaroon-218d87053ad19626bcd5a0eef0bc9ba8bd4fbd80a968f52a5fd430b2aa8660df",
+ "Value": "W3siY2F2ZWF0cyI6 ... jBkZiJ9XQ==",
+ "Domain": "10.130.48.27",
+ "Path": "/auth",
+ "Secure": false,
+ "HostOnly": true,
+ "Expires": "2018-03-07T22:07:23Z",
+ },
+ ])
- controller_endpoint = '10.0.4.171:17070'
- model_uuid = 'e8399ac7-078c-4817-8e5e-32316d55b083'
- username = 'admin'
- password = 'f53f08cfc32a2e257fe5393271d89d62'
-
- # Left out for brevity, but if you have a cert string you should pass it in.
- # You can copy the cert from the output of The `juju show-controller`
- # command.
- cacert = None
-
- await model.connect(
- controller_endpoint,
- model_uuid,
- username,
- password,
- cacert,
- )
-
+ # or with a bakery client
+ from macaroonbakery.httpbakery import Client
+ from http.cookiejar import FileCookieJar
-Connecting with Macaroon Authentication
----------------------------------------
-To connect to a shared model, or a model an a shared controller, you'll need
-to use macaroon authentication. The simplest example is shown below, and uses
-already-discharged macaroons from the local filesystem. This will work if you
-have the Juju CLI installed.
+ bakery_client=Client()
+ bakery_client.cookies = FileCookieJar('cookies.txt')
+ model = Model()
+ await model.connect(bakery_client=bakery_client)
+
-.. note::
- The library does not yet contain support for fetching and discharging
- macaroons. Until it does, if you want to use macaroon auth, you'll need
- to supply already-discharged macaroons yourself.
+Connecting with an Explicit Endpoint
+------------------------------------
+The most flexible, but also most verbose, way to connect is using the API
+endpoint url, model UUID, and credentials directly. This method does NOT
+require the Juju CLI client to be installed.
.. code:: python
- from juju.client.connection import get_macaroons()
from juju.model import Model
model = Model()
-
- controller_endpoint = '10.0.4.171:17070'
- model_uuid = 'e8399ac7-078c-4817-8e5e-32316d55b083'
- username = None
- password = None
- cacert = None
- macaroons = get_macaroons()
-
await model.connect(
- controller_endpoint,
- model_uuid,
- username,
- password,
- cacert,
- macaroons,
+ endpoint='10.0.4.171:17070',
+ uuid='e8399ac7-078c-4817-8e5e-32316d55b083',
+ username='admin',
+ password='f53f08cfc32a2e257fe5393271d89d62',
+ cacert=None, # Left out for brevity, but if you have a cert string you
+ # should pass it in. You can get the cert from the output
+ # of The `juju show-controller` command.
)
Creating and Destroying a Model
-------------------------------
Example of creating a new model and then destroying it. See
-:meth:`juju.controller.Controller.add_model` and
-:meth:`juju.controller.Controller.destroy_model` for more info.
+py:method:`juju.controller.Controller.add_model` and
+py:method:`juju.controller.Controller.destroy_model` for more info.
.. code:: python
Adding Machines and Containers
------------------------------
To add a machine or container, connect to a model and then call its
-:meth:`~juju.model.Model.add_machine` method. A
-:class:`~juju.machine.Machine` instance is returned. The machine id
+py:method:`~juju.model.Model.add_machine` method. A
+py:class:`~juju.machine.Machine` instance is returned. The machine id
can be used to deploy a charm to a specific machine or container.
.. code:: python
------------------------------
To watch for and respond to changes in a model, register an observer with the
model. The easiest way to do this is by creating a
-:class:`juju.model.ModelObserver` subclass.
+py:class:`juju.model.ModelObserver` subclass.
.. code:: python
# specific handler method is not defined.
-Any :class:`juju.model.ModelEntity` object can be observed directly by
+Any py:class:`juju.model.ModelEntity` object can be observed directly by
registering callbacks on the object itself.
.. code:: python
----------
Here's a simple example that shows basic usage of the library. The example
connects to the currently active Juju model, deploys a single unit of the
-ubuntu charm, then exits.
-
-More examples can be found in the `examples/` directory of the source tree,
-and in the documentation.
+ubuntu charm, then exits:
.. code:: python
- #!/usr/bin/python3.5
+ #!/usr/bin/python3
- import asyncio
import logging
+ import sys
from juju import loop
from juju.model import Model
# Connect to the currently active Juju model
await model.connect_current()
- # Deploy a single unit of the ubuntu charm, using revision 0 from the
- # stable channel of the Charm Store.
- ubuntu_app = await model.deploy(
- 'ubuntu-0',
- application_name='ubuntu',
- series='xenial',
- channel='stable',
- )
+ try:
+ # Deploy a single unit of the ubuntu charm, using the latest revision
+ # from the stable channel of the Charm Store.
+ ubuntu_app = await model.deploy(
+ 'ubuntu',
+ application_name='ubuntu',
+ series='xenial',
+ channel='stable',
+ )
- # Disconnect from the api server and cleanup.
- model.disconnect()
+ if '--wait' in sys.argv:
+ # optionally block until the application is ready
+ await model.block_until(lambda: ubuntu_app.status == 'active')
+ finally:
+ # Disconnect from the api server and cleanup.
+ await model.disconnect()
def main():
- # Set logging level to debug so we can see verbose output from the
- # juju library.
- logging.basicConfig(level=logging.DEBUG)
+ logging.basicConfig(level=logging.INFO)
- # Quiet logging from the websocket library. If you want to see
- # everything sent over the wire, set this to DEBUG.
+ # If you want to see everything sent over the wire, set this to DEBUG.
ws_logger = logging.getLogger('websockets.protocol')
ws_logger.setLevel(logging.INFO)
if __name__ == '__main__':
main()
+
+
+More examples can be found in the docs, as well as in the ``examples/``
+directory of the source tree which can be run using ``tox``. For
+example, to run ``examples/connect_current_model.py``, use:
+
+.. code:: bash
+
+ tox -e example -- examples/connect_current_model.py
-websockets
-pyyaml
-theblues
-python-dateutil
-sphinx
+pytz<2018.0,>=2017.2 # conflict between sphinx and macaroonbakery
+pymacaroons>=0.13.0,<1.0 # force new version with pynacl instead of libnacl
+sphinx==1.6.5
sphinxcontrib-asyncio
sphinx_rtd_theme
-Upstream Updates
-================
+Syncing Upstream Updates
+========================
Updating the facade and definitions code generated from the schema
to reflect changes in upstream Juju consists of two steps:
which facades were touched.
+Integrating into the Object Layer
+---------------------------------
+
+Once the raw client APIs are synced, you may need to integrate any new or
+changed API calls into the object layer, to provide a clean, Pythonic way
+to interact with the model. This may be as simple as adding an optional
+parameter to an existing model method, tweaking what manipulations, if any
+the model method does to the data before it is sent to the API, or it may
+require adding an entirely new model method to capture the new functionality.
+
+In general, the approach should be to make the interactions with the model
+layer use the same patterns as when you use the CLI, just with Python idioms
+and OO approaches.
+
+When trying to determine what client calls need to be made and what data to
+be sent for a given Juju CLI action, it is very useful to add
+`--debug --logging-config TRACE` to any Juju CLI command to view the full
+conversation between the CLI client and the API server. For example:
+
+```
+[johnsca@murdoch:~] $ juju deploy --debug --logging-config TRACE ./builds/test
+11:51:20 INFO juju.cmd supercommand.go:56 running juju [2.3.5 gc go1.10]
+11:51:20 DEBUG juju.cmd supercommand.go:57 args: []string{"/snap/juju/3884/bin/juju", "deploy", "--debug", "--logging-config", "TRACE", "./builds/test"}
+11:51:20 INFO juju.juju api.go:67 connecting to API addresses: [35.172.119.191:17070 172.31.94.16:17070 252.94.16.1:17070]
+11:51:20 TRACE juju.api certpool.go:49 cert dir "/etc/juju/certs.d" does not exist
+11:51:20 DEBUG juju.api apiclient.go:843 successfully dialed "wss://35.172.119.191:17070/model/a7317969-6dab-4ba4-844b-af3d661c228d/api"
+11:51:20 INFO juju.api apiclient.go:597 connection established to "wss://35.172.119.191:17070/model/a7317969-6dab-4ba4-844b-af3d661c228d/api"
+...
+11:51:20 INFO juju.cmd.juju.application series_selector.go:71 with the configured model default series "xenial"
+11:51:20 DEBUG httpbakery client.go:244 client do POST https://35.172.119.191:17070/model/a7317969-6dab-4ba4-844b-af3d661c228d/charms?revision=0&schema=local&series=xenial {
+11:51:21 DEBUG httpbakery client.go:246 } -> error <nil>
+11:51:21 INFO cmd deploy.go:1096 Deploying charm "local:xenial/test-0".
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:225 -> {"request-id":3,"type":"Charms","version":2,"request":"CharmInfo","params":{"url":"local:xenial/test-0"}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:120 <- {"request-id":3,"response":{"revision":0,"url":"local:xenial/test-0","config":{"test":{"type":"string","default":""}},"meta":{"name":"test","summary":"test","description":"test","subordinate":false,"series":["xenial"],"resources":{"dummy":{"name":"dummy","type":"file","path":"dummy.snap","description":"dummy snap"}},"min-juju-version":"0.0.0"},"actions":{}}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:225 -> {"request-id":4,"type":"Charms","version":2,"request":"IsMetered","params":{"url":"local:xenial/test-0"}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:120 <- {"request-id":4,"response":{"metered":false}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:225 -> {"request-id":5,"type":"Resources","version":1,"request":"AddPendingResources","params":{"tag":"application-test","url":"local:xenial/test-0","channel":"","macaroon":null,"resources":[{"name":"dummy","type":"file","path":"dummy.snap","description":"dummy snap","origin":"store","revision":-1,"fingerprint":"","size":0}]}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:120 <- {"request-id":5,"response":{"pending-ids":["c0ffdd92-da23-4fb2-8d41-d82d58423447"]}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:225 -> {"request-id":6,"type":"Application","version":5,"request":"Deploy","params":{"applications":[{"application":"test","series":"xenial","charm-url":"local:xenial/test-0","channel":"","num-units":1,"config-yaml":"","constraints":{},"resources":{"dummy":"c0ffdd92-da23-4fb2-8d41-d82d58423447"}}]}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:120 <- {"request-id":6,"response":{"results":[{}]}}
+11:51:21 TRACE juju.rpc.jsoncodec codec.go:123 <- error: read tcp 192.168.1.102:52168->35.172.119.191:17070: use of closed network connection (closing true)
+11:51:21 DEBUG juju.api monitor.go:35 RPC connection died
+11:51:21 INFO cmd supercommand.go:465 command finished
+```
+
+Note that this will contain login information (which has been removed from the above).
+
+
Overrides
---------
4. Waits for the action results to come back, then exits.
"""
-import asyncio
import logging
from juju import loop
async def main():
model = Model()
- await model.connect_current()
- await model.reset(force=True)
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
app = await model.deploy(
'git',
async def main():
model = Model()
- await model.connect_current()
+ await model.connect()
try:
# add a new default machine
async def main():
controller = Controller()
print("Connecting to controller")
- await controller.connect_current()
+ # connect to current controller with current user, per Juju CLI
+ await controller.connect()
try:
model_name = "addmodeltest-{}".format(uuid.uuid4())
async def watch():
- conn = await Connection.connect_current()
+ conn = await Connection.connect()
allwatcher = client.AllWatcherFacade.from_connection(conn)
while True:
change = await allwatcher.Next()
3. Deploys a charm and prints its config and constraints
"""
-import asyncio
import logging
from juju.model import Model
async def main():
model = Model()
- await model.connect_current()
- await model.reset(force=True)
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
ubuntu_app = await model.deploy(
'mysql',
await model.disconnect()
-
+
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
ws_logger = logging.getLogger('websockets.protocol')
--- /dev/null
+"""
+This is a very basic example that connects to the currently selected model
+and prints the number of applications deployed to it.
+"""
+import logging
+
+from juju import loop
+from juju.model import Model
+
+log = logging.getLogger(__name__)
+
+
+async def main():
+ model = Model()
+ try:
+ # connect to the current model with the current user, per the Juju CLI
+ await model.connect()
+ print('There are {} applications'.format(len(model.applications)))
+ finally:
+ if model.is_connected():
+ print('Disconnecting from model')
+ await model.disconnect()
+
+
+if __name__ == '__main__':
+ logging.basicConfig(level=logging.INFO)
+ loop.run(main())
5. Destroys the model
"""
-import asyncio
import logging
from juju.controller import Controller
async def main():
controller = Controller()
- await controller.connect_current()
+ # connect to current controller with current user, per Juju CLI
+ await controller.connect()
model = await controller.add_model(
'my-test-model',
'aws',
--- /dev/null
+import sys
+from juju import loop
+from juju.controller import Controller
+
+
+async def main(cloud_name, credential_name):
+ controller = Controller()
+ model = None
+ print('Connecting to controller')
+ # connect to current controller with current user, per Juju CLI
+ await controller.connect()
+ try:
+ print('Adding model')
+ model = await controller.add_model(
+ 'test',
+ cloud_name=cloud_name,
+ credential_name=credential_name)
+
+ # verify credential
+ print("Verify model's credential: {}".format(
+ model.info.cloud_credential_tag))
+
+ # verify we can deploy
+ print('Deploying ubuntu')
+ app = await model.deploy('ubuntu-10')
+
+ print('Waiting for active')
+ await model.block_until(
+ lambda: app.units and all(unit.workload_status == 'active'
+ for unit in app.units))
+
+ print('Removing ubuntu')
+ await app.remove()
+ finally:
+ print('Cleaning up')
+ if model:
+ print('Removing model')
+ model_uuid = model.info.uuid
+ await model.disconnect()
+ await controller.destroy_model(model_uuid)
+ print('Disconnecting')
+ await controller.disconnect()
+
+
+if __name__ == '__main__':
+ assert len(sys.argv) > 2, 'Please provide a cloud and credential name'
+ loop.run(main(sys.argv[1], sys.argv[2]))
async def main():
model = Model()
print('Connecting to model')
- await model.connect_current()
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
try:
print('Deploying ubuntu')
from juju import loop
async def status():
- conn = await Connection.connect_current()
+ conn = await Connection.connect()
client = ClientFacade.from_connection(conn)
patterns = None
This example doesn't work - it demonstrates features that don't exist yet.
"""
-import asyncio
import logging
from juju.model import Model
async def main():
model = Model()
- await model.connect_current()
- await model.reset(force=True)
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
goal_state = Model.from_yaml('bundle-like-thing')
ubuntu_app = await model.deploy(
async def report_leadership():
model = Model()
- await model.connect_current()
+ await model.connect()
print("Leadership: ")
for app in model.applications.values():
3. Runs forever (kill with Ctrl-C)
"""
-import asyncio
-
from juju.model import Model
from juju import loop
async def watch_model():
model = Model()
- await model.connect_current()
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
model.add_observer(on_model_change)
async def main():
model = Model()
- await model.connect_current()
+ await model.connect()
# Deploy a local charm using a path to the charm directory
await model.deploy(
async def main():
model = Model()
- await model.connect_current()
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
- model.add_observer(MyRemoveObserver())
- await model.reset(force=True)
- model.add_observer(MyModelObserver())
+ try:
+ model.add_observer(MyRemoveObserver())
+ await model.reset(force=True)
+ model.add_observer(MyModelObserver())
- ubuntu_app = await model.deploy(
- 'ubuntu',
- application_name='ubuntu',
- series='trusty',
- channel='stable',
- )
- ubuntu_app.on_change(asyncio.coroutine(
- lambda delta, old_app, new_app, model:
- print('App changed: {}'.format(new_app.entity_id))
- ))
- ubuntu_app.on_remove(asyncio.coroutine(
- lambda delta, old_app, new_app, model:
- print('App removed: {}'.format(old_app.entity_id))
- ))
- ubuntu_app.on_unit_add(asyncio.coroutine(
- lambda delta, old_unit, new_unit, model:
- print('Unit added: {}'.format(new_unit.entity_id))
- ))
- ubuntu_app.on_unit_remove(asyncio.coroutine(
- lambda delta, old_unit, new_unit, model:
- print('Unit removed: {}'.format(old_unit.entity_id))
- ))
- unit_a, unit_b = await ubuntu_app.add_units(count=2)
- unit_a.on_change(asyncio.coroutine(
- lambda delta, old_unit, new_unit, model:
- print('Unit changed: {}'.format(new_unit.entity_id))
- ))
- await model.deploy(
- 'nrpe',
- application_name='nrpe',
- series='trusty',
- channel='stable',
- # subordinates must be deployed without units
- num_units=0,
- )
- my_relation = await model.add_relation(
- 'ubuntu',
- 'nrpe',
- )
- my_relation.on_remove(asyncio.coroutine(
- lambda delta, old_rel, new_rel, model:
- print('Relation removed: {}'.format(old_rel.endpoints))
- ))
+ ubuntu_app = await model.deploy(
+ 'ubuntu',
+ application_name='ubuntu',
+ series='trusty',
+ channel='stable',
+ )
+ ubuntu_app.on_change(asyncio.coroutine(
+ lambda delta, old_app, new_app, model:
+ print('App changed: {}'.format(new_app.entity_id))
+ ))
+ ubuntu_app.on_remove(asyncio.coroutine(
+ lambda delta, old_app, new_app, model:
+ print('App removed: {}'.format(old_app.entity_id))
+ ))
+ ubuntu_app.on_unit_add(asyncio.coroutine(
+ lambda delta, old_unit, new_unit, model:
+ print('Unit added: {}'.format(new_unit.entity_id))
+ ))
+ ubuntu_app.on_unit_remove(asyncio.coroutine(
+ lambda delta, old_unit, new_unit, model:
+ print('Unit removed: {}'.format(old_unit.entity_id))
+ ))
+ unit_a, unit_b = await ubuntu_app.add_units(count=2)
+ unit_a.on_change(asyncio.coroutine(
+ lambda delta, old_unit, new_unit, model:
+ print('Unit changed: {}'.format(new_unit.entity_id))
+ ))
+ await model.deploy(
+ 'nrpe',
+ application_name='nrpe',
+ series='trusty',
+ channel='stable',
+ # subordinates must be deployed without units
+ num_units=0,
+ )
+ my_relation = await model.add_relation(
+ 'ubuntu',
+ 'nrpe',
+ )
+ my_relation.on_remove(asyncio.coroutine(
+ lambda delta, old_rel, new_rel, model:
+ print('Relation removed: {}'.format(old_rel.endpoints))
+ ))
+ finally:
+ await model.disconnect()
if __name__ == '__main__':
- logging.basicConfig(level=logging.DEBUG)
+ logging.basicConfig(level=logging.INFO)
ws_logger = logging.getLogger('websockets.protocol')
ws_logger.setLevel(logging.INFO)
loop.run(main())
4. Waits for the action results to come back, then exits.
"""
-import asyncio
import logging
from juju.model import Model
async def main():
model = Model()
- await model.connect_current()
- await model.reset(force=True)
+ # connect to current model with current user, per Juju CLI
+ await model.connect()
app = await model.deploy(
'ubuntu-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.
+
import asyncio
import logging
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.
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.
result = (await app_facade.Get(self.name)).constraints
return vars(result) if result else result
- def get_actions(self, schema=False):
+ 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.
"""
- raise NotImplementedError()
-
- def get_resources(self, details=False):
+ 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
+
+ async def get_resources(self):
"""Return resources for this application.
- :param bool details: Include detailed info about resources used by each
- unit
-
+ Returns a dict mapping resource name to
+ :class:`~juju._definitions.CharmResource` instances.
"""
- raise NotImplementedError()
+ facade = client.ResourcesFacade.from_connection(self.connection)
+ response = await facade.ListResources([client.Entity(self.tag)])
+
+ resources = dict()
+ for result in response.results:
+ for resource in result.charm_store_resources or []:
+ resources[resource.name] = resource
+ for resource in result.resources or []:
+ if resource.charmresource:
+ resource = resource.charmresource
+ resources[resource.name] = resource
+ return resources
async def run(self, command, timeout=None):
"""Run command on all units for this application.
)
return await self.ann_facade.Set([ann])
- async def set_config(self, config, to_default=False):
+ async def set_config(self, config):
"""Set configuration options for this application.
:param config: Dict of configuration to set
- :param bool to_default: Set application options to default values
-
"""
app_facade = client.ApplicationFacade.from_connection(self.connection)
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.
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:'):
if revision is not None:
charm_url = "%s-%d" % (charm_url, revision)
else:
- charmstore = self.model.charmstore
- entity = await charmstore.entity(charm_url, channel=channel)
- charm_url = entity['Id']
+ 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,
config_settings_yaml=None,
force_series=force_series,
force_units=force_units,
- resource_ids=None,
+ resource_ids=resource_ids,
storage_constraints=None
)
from juju.client._definitions import *
-from juju.client import _client1, _client2, _client3, _client4, _client5
+from juju.client import _client2, _client1, _client3, _client4, _client5, _client8, _client7, _client9
CLIENTS = {
- "1": _client1,
"2": _client2,
+ "1": _client1,
"3": _client3,
"4": _client4,
- "5": _client5
+ "5": _client5,
+ "8": _client8,
+ "7": _client7,
+ "9": _client9
}
def lookup_facade(name, version):
- """
- Given a facade name and version, attempt to pull that facade out
- of the correct client<version>.py file.
+ """
+ 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)
- 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
+ facade = getattr(CLIENTS[str(_version)], name)
+ return facade
+ except (KeyError, AttributeError):
+ continue
+ else:
+ raise ImportError("No supported version for facade: "
+ "{}".format(name))
@param connection: initialized Connection object.
"""
- version = connection.facades[cls.__name__[:-6]]
+ facade_name = cls.__name__
+ if not facade_name.endswith('Facade'):
+ raise TypeError('Unexpected class name: {}'.format(facade_name))
+ facade_name = facade_name[:-len('Facade')]
+ version = connection.facades.get(facade_name)
+ if version is None:
+ raise Exception('No facade {} in facades {}'.format(facade_name,
+ connection.facades))
c = lookup_facade(cls.__name__, version)
c = c()
pass
+class ActionPrunerFacade(TypeFactory):
+ pass
+
+
class AgentFacade(TypeFactory):
pass
pass
+class ApplicationOffersFacade(TypeFactory):
+ pass
+
+
class ApplicationRelationsWatcherFacade(TypeFactory):
pass
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
pass
+class CredentialManagerFacade(TypeFactory):
+ pass
+
+
+class CredentialValidatorFacade(TypeFactory):
+ pass
+
+
+class CrossControllerFacade(TypeFactory):
+ pass
+
+
+class CrossModelRelationsFacade(TypeFactory):
+ pass
+
+
class DeployerFacade(TypeFactory):
pass
pass
+class ExternalControllerUpdaterFacade(TypeFactory):
+ pass
+
+
+class FanConfigurerFacade(TypeFactory):
+ pass
+
+
class FilesystemAttachmentsWatcherFacade(TypeFactory):
pass
+class FirewallRulesFacade(TypeFactory):
+ pass
+
+
class FirewallerFacade(TypeFactory):
pass
pass
+class ModelUpgraderFacade(TypeFactory):
+ pass
+
+
class NotifyWatcherFacade(TypeFactory):
pass
+class OfferStatusWatcherFacade(TypeFactory):
+ pass
+
+
class PayloadsFacade(TypeFactory):
pass
pass
+class RelationStatusWatcherFacade(TypeFactory):
+ pass
+
+
class RelationUnitsWatcherFacade(TypeFactory):
pass
pass
+class RemoteRelationsFacade(TypeFactory):
+ pass
+
+
class RemoteRelationsWatcherFacade(TypeFactory):
pass
pass
+class UpgradeSeriesFacade(TypeFactory):
+ pass
+
+
class UpgraderFacade(TypeFactory):
pass
pass
+class VolumeAttachmentPlansWatcherFacade(TypeFactory):
+ pass
+
+
class VolumeAttachmentsWatcherFacade(TypeFactory):
pass
from juju.client._definitions import *
+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
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='AgentTools', request='UpdateToolsAvailable', version=1, params=_params)
+ msg = dict(type='AgentTools',
+ request='UpdateToolsAvailable',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def Next(self):
'''
- Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
+ Returns -> typing.Sequence[~Delta]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='AllWatcher', request='Next', version=1, params=_params)
+ msg = dict(type='AllWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='AllWatcher', request='Stop', version=1, params=_params)
+ msg = dict(type='AllWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ApplicationRelationsWatcher', request='Next', version=1, params=_params)
+ msg = dict(type='ApplicationRelationsWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ApplicationRelationsWatcher', request='Stop', version=1, params=_params)
+ msg = dict(type='ApplicationRelationsWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Rescale(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ApplicationScaler', request='Rescale', version=1, params=_params)
+ msg = dict(type='ApplicationScaler',
+ request='Rescale',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def Watch(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ApplicationScaler', request='Watch', version=1, params=_params)
+ msg = dict(type='ApplicationScaler',
+ request='Watch',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='Create', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='Create',
+ version=1,
+ params=_params)
_params['notes'] = notes
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='FinishRestore', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='FinishRestore',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='Info', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='Info',
+ version=1,
+ params=_params)
_params['id'] = id_
reply = await self.rpc(msg)
return reply
async def List(self):
'''
- Returns -> typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
+ Returns -> typing.Sequence[~BackupsMetadataResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='List', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='List',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='PrepareRestore', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='PrepareRestore',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='Remove', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='Remove',
+ version=1,
+ params=_params)
_params['id'] = id_
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Backups', request='Restore', version=1, params=_params)
+ msg = dict(type='Backups',
+ request='Restore',
+ version=1,
+ params=_params)
_params['backup-id'] = backup_id
reply = await self.rpc(msg)
return reply
async def GetChanges(self, yaml):
'''
yaml : str
- Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
+ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Bundle', request='GetChanges', version=1, params=_params)
+ msg = dict(type='Bundle',
+ request='GetChanges',
+ version=1,
+ params=_params)
_params['yaml'] = yaml
reply = await self.rpc(msg)
return reply
-class ClientFacade(Type):
- name = 'Client'
+class CAASAgentFacade(Type):
+ name = 'CAASAgent'
version = 1
- schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
- 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
- 'type': 'array'},
- 'type': 'array'}},
- 'required': ['servers'],
- 'type': 'object'},
- 'AddCharm': {'additionalProperties': False,
- 'properties': {'channel': {'type': 'string'},
- 'url': {'type': 'string'}},
- 'required': ['url', 'channel'],
- 'type': 'object'},
- 'AddCharmWithAuthorization': {'additionalProperties': False,
- 'properties': {'channel': {'type': 'string'},
- 'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'url': {'type': 'string'}},
- 'required': ['url',
- 'channel',
- 'macaroon'],
- 'type': 'object'},
- 'AddMachineParams': {'additionalProperties': False,
- 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
- 'type': 'array'},
- 'constraints': {'$ref': '#/definitions/Value'},
- 'container-type': {'type': 'string'},
- 'disks': {'items': {'$ref': '#/definitions/Constraints'},
- 'type': 'array'},
- 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
- 'instance-id': {'type': 'string'},
- 'jobs': {'items': {'type': 'string'},
- 'type': 'array'},
- 'nonce': {'type': 'string'},
- 'parent-id': {'type': 'string'},
- 'placement': {'$ref': '#/definitions/Placement'},
- 'series': {'type': 'string'}},
- 'required': ['series',
- 'constraints',
- 'jobs',
- 'parent-id',
- 'container-type',
- 'instance-id',
- 'nonce',
- 'hardware-characteristics',
- 'addresses'],
- 'type': 'object'},
- 'AddMachines': {'additionalProperties': False,
- 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'},
- 'type': 'array'}},
- 'required': ['params'],
- 'type': 'object'},
- 'AddMachinesResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'machine': {'type': 'string'}},
- 'required': ['machine'],
- 'type': 'object'},
- 'AddMachinesResults': {'additionalProperties': False,
- 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'},
- 'type': 'array'}},
- 'required': ['machines'],
- 'type': 'object'},
- 'Address': {'additionalProperties': False,
- 'properties': {'scope': {'type': 'string'},
- 'space-name': {'type': 'string'},
- 'type': {'type': 'string'},
- 'value': {'type': 'string'}},
- 'required': ['value', 'type', 'scope'],
- 'type': 'object'},
- 'AgentVersionResult': {'additionalProperties': False,
- 'properties': {'version': {'$ref': '#/definitions/Number'}},
- 'required': ['version'],
- 'type': 'object'},
- 'AllWatcherId': {'additionalProperties': False,
- 'properties': {'watcher-id': {'type': 'string'}},
- 'required': ['watcher-id'],
- 'type': 'object'},
- 'ApplicationStatus': {'additionalProperties': False,
- 'properties': {'can-upgrade-to': {'type': 'string'},
- 'charm': {'type': 'string'},
- 'err': {'additionalProperties': True,
+ schema = {'definitions': {'CloudCredential': {'additionalProperties': False,
+ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
- 'exposed': {'type': 'boolean'},
- 'life': {'type': 'string'},
- 'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}},
- 'type': 'object'},
- 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'series': {'type': 'string'},
- 'status': {'$ref': '#/definitions/DetailedStatus'},
- 'subordinate-to': {'items': {'type': 'string'},
- 'type': 'array'},
- 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
- 'type': 'object'},
- 'workload-version': {'type': 'string'}},
- 'required': ['charm',
- 'series',
- 'exposed',
- 'life',
- 'relations',
- 'can-upgrade-to',
- 'subordinate-to',
- 'units',
- 'meter-statuses',
- 'status',
- 'workload-version'],
- 'type': 'object'},
- 'Binary': {'additionalProperties': False,
- 'properties': {'Arch': {'type': 'string'},
- 'Number': {'$ref': '#/definitions/Number'},
- 'Series': {'type': 'string'}},
- 'required': ['Number', 'Series', 'Arch'],
+ 'auth-type': {'type': 'string'},
+ 'redacted': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['auth-type'],
+ 'type': 'object'},
+ 'CloudSpec': {'additionalProperties': False,
+ 'properties': {'cacertificates': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'credential': {'$ref': '#/definitions/CloudCredential'},
+ 'endpoint': {'type': 'string'},
+ 'identity-endpoint': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'region': {'type': 'string'},
+ 'storage-endpoint': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['type', 'name'],
+ 'type': 'object'},
+ 'CloudSpecResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/CloudSpec'}},
+ 'type': 'object'},
+ 'CloudSpecResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudSpecResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
'type': 'object'},
- 'BundleChange': {'additionalProperties': False,
- 'properties': {'args': {'items': {'additionalProperties': True,
- 'type': 'object'},
- 'type': 'array'},
- 'id': {'type': 'string'},
- 'method': {'type': 'string'},
- 'requires': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['id',
- 'method',
- 'args',
- 'requires'],
- 'type': 'object'},
- 'BundleChangesParams': {'additionalProperties': False,
- 'properties': {'yaml': {'type': 'string'}},
- 'required': ['yaml'],
- 'type': 'object'},
- 'BundleChangesResults': {'additionalProperties': False,
- 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'},
- 'type': 'array'},
- 'errors': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'BytesResult': {'additionalProperties': False,
- 'properties': {'result': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['result'],
- 'type': 'object'},
- 'ConfigValue': {'additionalProperties': False,
- 'properties': {'source': {'type': 'string'},
- 'value': {'additionalProperties': True,
- 'type': 'object'}},
- 'required': ['value', 'source'],
+ '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'},
- 'Constraints': {'additionalProperties': False,
- 'properties': {'Count': {'type': 'integer'},
- 'Pool': {'type': 'string'},
- 'Size': {'type': 'integer'}},
- 'required': ['Pool', 'Size', 'Count'],
+ 'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+ 'type': 'object'},
+ 'WatchForModelConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(CloudSpecResults)
+ async def CloudSpec(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudSpecResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CAASAgent',
+ request='CloudSpec',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(CloudSpecResult)
+ async def GetCloudSpec(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('CloudSpec')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CAASAgent',
+ request='GetCloudSpec',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelConfigResult)
+ async def ModelConfig(self):
+ '''
+
+ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CAASAgent',
+ request='ModelConfig',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchForModelConfigChanges(self):
+ '''
+
+ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CAASAgent',
+ request='WatchForModelConfigChanges',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CAASFirewallerFacade(Type):
+ name = 'CAASFirewaller'
+ version = 1
+ schema = {'definitions': {'ApplicationGetConfigResults': {'additionalProperties': False,
+ 'properties': {'Results': {'items': {'$ref': '#/definitions/ConfigResult'},
+ 'type': 'array'}},
+ 'required': ['Results'],
+ 'type': 'object'},
+ 'BoolResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'boolean'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'BoolResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/BoolResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
'type': 'object'},
- 'DestroyMachines': {'additionalProperties': False,
- 'properties': {'force': {'type': 'boolean'},
- 'machine-names': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['machine-names', 'force'],
- 'type': 'object'},
- 'DetailedStatus': {'additionalProperties': False,
- 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'ConfigResult': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
'type': 'object'}},
'type': 'object'},
- 'err': {'additionalProperties': True,
- 'type': 'object'},
- 'info': {'type': 'string'},
- 'kind': {'type': 'string'},
- 'life': {'type': 'string'},
- 'since': {'format': 'date-time',
- 'type': 'string'},
- 'status': {'type': 'string'},
- 'version': {'type': 'string'}},
- 'required': ['status',
- 'info',
- 'data',
- 'since',
- 'kind',
- 'version',
- 'life'],
- 'type': 'object'},
- 'EndpointStatus': {'additionalProperties': False,
- 'properties': {'application': {'type': 'string'},
- 'name': {'type': 'string'},
- 'role': {'type': 'string'},
- 'subordinate': {'type': 'boolean'}},
- 'required': ['application',
- 'name',
- 'role',
- 'subordinate'],
- 'type': 'object'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['config'],
+ 'type': 'object'},
'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'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'},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ErrorResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'FindToolsParams': {'additionalProperties': False,
- 'properties': {'arch': {'type': 'string'},
- 'major': {'type': 'integer'},
- 'minor': {'type': 'integer'},
- 'number': {'$ref': '#/definitions/Number'},
- 'series': {'type': 'string'}},
- 'required': ['number',
- 'major',
- 'minor',
- 'arch',
- 'series'],
- 'type': 'object'},
- 'FindToolsResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'list': {'items': {'$ref': '#/definitions/Tools'},
- 'type': 'array'}},
- 'required': ['list'],
- 'type': 'object'},
- 'FullStatus': {'additionalProperties': False,
- 'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}},
- 'type': 'object'},
- 'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
- 'type': 'object'},
- 'model': {'$ref': '#/definitions/ModelStatusInfo'},
- 'relations': {'items': {'$ref': '#/definitions/RelationStatus'},
- 'type': 'array'},
- 'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}},
- 'type': 'object'}},
- 'required': ['model',
- 'machines',
- 'applications',
- 'remote-applications',
- 'relations'],
+ 'LifeResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'life': {'type': 'string'}},
+ 'required': ['life'],
'type': 'object'},
- 'GetConstraintsResults': {'additionalProperties': False,
- 'properties': {'constraints': {'$ref': '#/definitions/Value'}},
- 'required': ['constraints'],
- 'type': 'object'},
- 'HardwareCharacteristics': {'additionalProperties': False,
- 'properties': {'arch': {'type': 'string'},
- 'availability-zone': {'type': 'string'},
- 'cpu-cores': {'type': 'integer'},
- 'cpu-power': {'type': 'integer'},
- 'mem': {'type': 'integer'},
- 'root-disk': {'type': 'integer'},
- 'tags': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'History': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'},
- 'type': 'array'}},
- 'required': ['statuses'],
- 'type': 'object'},
- 'HostPort': {'additionalProperties': False,
- 'properties': {'Address': {'$ref': '#/definitions/Address'},
- 'port': {'type': 'integer'}},
- 'required': ['Address', 'port'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'MachineHardware': {'additionalProperties': False,
- 'properties': {'arch': {'type': 'string'},
- 'availability-zone': {'type': 'string'},
- 'cores': {'type': 'integer'},
- 'cpu-power': {'type': 'integer'},
- 'mem': {'type': 'integer'},
- 'root-disk': {'type': 'integer'},
- 'tags': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'MachineStatus': {'additionalProperties': False,
- 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'},
- 'constraints': {'type': 'string'},
- 'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
- 'type': 'object'},
- 'dns-name': {'type': 'string'},
- 'hardware': {'type': 'string'},
- 'has-vote': {'type': 'boolean'},
- 'id': {'type': 'string'},
- 'instance-id': {'type': 'string'},
- 'instance-status': {'$ref': '#/definitions/DetailedStatus'},
- 'ip-addresses': {'items': {'type': 'string'},
- 'type': 'array'},
- 'jobs': {'items': {'type': 'string'},
- 'type': 'array'},
- 'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}},
- 'type': 'object'},
- 'series': {'type': 'string'},
- 'wants-vote': {'type': 'boolean'}},
- 'required': ['agent-status',
- 'instance-status',
- 'dns-name',
- 'instance-id',
- 'series',
- 'id',
- 'containers',
- 'constraints',
- 'hardware',
- 'jobs',
- 'has-vote',
- 'wants-vote'],
- 'type': 'object'},
- 'MeterStatus': {'additionalProperties': False,
- 'properties': {'color': {'type': 'string'},
- 'message': {'type': 'string'}},
- 'required': ['color', 'message'],
+ 'LifeResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
'type': 'object'},
- 'ModelConfigResults': {'additionalProperties': False,
- 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
- 'type': 'object'}},
- 'required': ['config'],
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'NotifyWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
'type': 'object'},
- 'ModelInfo': {'additionalProperties': False,
- 'properties': {'agent-version': {'$ref': '#/definitions/Number'},
- 'cloud-credential-tag': {'type': 'string'},
- 'cloud-region': {'type': 'string'},
- 'cloud-tag': {'type': 'string'},
- 'controller-uuid': {'type': 'string'},
- 'default-series': {'type': 'string'},
- 'life': {'type': 'string'},
- 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
- 'type': 'array'},
- 'migration': {'$ref': '#/definitions/ModelMigrationStatus'},
- 'name': {'type': 'string'},
- 'owner-tag': {'type': 'string'},
- 'provider-type': {'type': 'string'},
- 'sla': {'$ref': '#/definitions/ModelSLAInfo'},
- 'status': {'$ref': '#/definitions/EntityStatus'},
- 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'},
- 'type': 'array'},
- 'uuid': {'type': 'string'}},
- 'required': ['name',
- 'uuid',
- 'controller-uuid',
- 'cloud-tag',
- 'owner-tag',
- 'life',
- 'users',
- 'machines',
- 'sla',
- 'agent-version'],
- 'type': 'object'},
- 'ModelMachineInfo': {'additionalProperties': False,
- 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
- 'has-vote': {'type': 'boolean'},
- 'id': {'type': 'string'},
- 'instance-id': {'type': 'string'},
- 'status': {'type': 'string'},
- 'wants-vote': {'type': 'boolean'}},
- 'required': ['id'],
- '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'},
- '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'],
+ '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'},
+ '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'},
- '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'],
+ 'EntitiesVersion': {'additionalProperties': False,
+ 'properties': {'agent-tools': {'items': {'$ref': '#/definitions/EntityVersion'},
+ 'type': 'array'}},
+ 'required': ['agent-tools'],
'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'],
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
'type': 'object'},
- 'Placement': {'additionalProperties': False,
- 'properties': {'directive': {'type': 'string'},
- 'scope': {'type': 'string'}},
- 'required': ['scope', 'directive'],
+ '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'},
+ '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'},
- 'PrivateAddress': {'additionalProperties': False,
+ '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'},
+ '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'},
+ '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'},
+ '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'},
+ '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'},
+ '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'],
+ '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'},
+ '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'},
+ 'InstanceTypesResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'StringsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'UpdateCloudCredential': {'additionalProperties': False,
+ 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag', 'credential'],
'type': 'object'},
- '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'],
+ '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'}},
+ '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(CloudResults)
+ async def Cloud(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='Cloud',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(CloudsResult)
+ async def Clouds(self):
+ '''
+
+ Returns -> typing.Mapping[str, ~Cloud]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='Clouds',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(CloudCredentialResults)
+ async def Credential(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudCredentialResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='Credential',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResult)
+ async def DefaultCloud(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='DefaultCloud',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(InstanceTypesResults)
+ async def InstanceTypes(self, constraints):
+ '''
+ constraints : typing.Sequence[~CloudInstanceTypesConstraint]
+ Returns -> typing.Sequence[~InstanceTypesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='InstanceTypes',
+ version=1,
+ params=_params)
+ _params['constraints'] = constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def RevokeCredentials(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='RevokeCredentials',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def UpdateCredentials(self, credentials):
+ '''
+ credentials : typing.Sequence[~UpdateCloudCredential]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cloud',
+ request='UpdateCredentials',
+ version=1,
+ params=_params)
+ _params['credentials'] = credentials
+ 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'},
- 'PublicAddress': {'additionalProperties': False,
- 'properties': {'target': {'type': 'string'}},
- 'required': ['target'],
+ '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'},
- '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'],
+ '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
+
+
+
+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'},
- 'scope': {'type': 'string'}},
+ 'role': {'type': 'string'}},
'required': ['name',
'role',
'interface',
- 'limit',
- 'scope'],
+ 'limit'],
'type': 'object'},
- 'ResolveCharmResult': {'additionalProperties': False,
- 'properties': {'error': {'type': 'string'},
- 'url': {'type': 'string'}},
+ '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'},
- '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'],
+ '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'},
- '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'},
+ 'RemoteRelationsChanges': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
'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'},
+ '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'},
- 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
- 'type': 'object'},
- 'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}},
+ 'SettingsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'settings': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'}},
+ 'required': ['settings'],
'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'}},
+ 'SettingsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
'type': 'object'},
- 'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+ 'StringsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
'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'}},
+ 'StringsWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
'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'}},
+ '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(APIHostPortsResult)
- async def APIHostPorts(self):
- '''
-
- Returns -> typing.Sequence<+T_co>[~HostPort]<~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<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~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<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~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):
+ @ReturnMapping(ErrorResults)
+ async def PublishIngressNetworkChanges(self, changes):
'''
-
- Returns -> typing.Sequence<+T_co>[int]
+ changes : typing.Sequence[~IngressNetworksChangeEvent]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='CACert', version=1, params=_params)
-
+ msg = dict(type='CrossModelRelations',
+ request='PublishIngressNetworkChanges',
+ version=1,
+ params=_params)
+ _params['changes'] = changes
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def DestroyMachines(self, force, machine_names):
+ @ReturnMapping(ErrorResults)
+ async def PublishRelationChanges(self, changes):
'''
- force : bool
- machine_names : typing.Sequence<+T_co>[str]
- Returns -> None
+ changes : typing.Sequence[~RemoteRelationChangeEvent]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='DestroyMachines', version=1, params=_params)
- _params['force'] = force
- _params['machine-names'] = machine_names
+ msg = dict(type='CrossModelRelations',
+ request='PublishRelationChanges',
+ version=1,
+ params=_params)
+ _params['changes'] = changes
reply = await self.rpc(msg)
return reply
- @ReturnMapping(FindToolsResult)
- async def FindTools(self, arch, major, minor, number, series):
+ @ReturnMapping(RegisterRemoteRelationResults)
+ async def RegisterRemoteRelations(self, relations):
'''
- arch : str
- major : int
- minor : int
- number : Number
- series : str
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>]
+ relations : typing.Sequence[~RegisterRemoteRelationArg]
+ Returns -> typing.Sequence[~RegisterRemoteRelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='FindTools', version=1, params=_params)
- _params['arch'] = arch
- _params['major'] = major
- _params['minor'] = minor
- _params['number'] = number
- _params['series'] = series
+ msg = dict(type='CrossModelRelations',
+ request='RegisterRemoteRelations',
+ version=1,
+ params=_params)
+ _params['relations'] = relations
reply = await self.rpc(msg)
return reply
- @ReturnMapping(FullStatus)
- async def FullStatus(self, patterns):
+ @ReturnMapping(SettingsResults)
+ async def RelationUnitSettings(self, relation_units):
'''
- 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>]
+ relation_units : typing.Sequence[~RemoteRelationUnit]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='FullStatus', version=1, params=_params)
- _params['patterns'] = patterns
+ msg = dict(type='CrossModelRelations',
+ request='RelationUnitSettings',
+ version=1,
+ params=_params)
+ _params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
- @ReturnMapping(BundleChangesResults)
- async def GetBundleChanges(self, yaml):
+ @ReturnMapping(StringsWatchResults)
+ async def WatchEgressAddressesForRelations(self, args):
'''
- yaml : str
- Returns -> typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
+ args : typing.Sequence[~RemoteEntityArg]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='GetBundleChanges', version=1, params=_params)
- _params['yaml'] = yaml
+ msg = dict(type='CrossModelRelations',
+ request='WatchEgressAddressesForRelations',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(GetConstraintsResults)
- async def GetModelConstraints(self):
+ @ReturnMapping(OfferStatusWatchResults)
+ async def WatchOfferStatus(self, args):
'''
-
- Returns -> Value
+ args : typing.Sequence[~OfferArg]
+ Returns -> typing.Sequence[~OfferStatusWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='GetModelConstraints', version=1, params=_params)
-
+ msg = dict(type='CrossModelRelations',
+ request='WatchOfferStatus',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(AddMachinesResults)
- async def InjectMachines(self, params):
+ @ReturnMapping(RelationUnitsWatchResults)
+ async def WatchRelationUnits(self, args):
'''
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+ args : typing.Sequence[~RemoteEntityArg]
+ Returns -> typing.Sequence[~RelationUnitsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='InjectMachines', version=1, params=_params)
- _params['params'] = params
+ msg = dict(type='CrossModelRelations',
+ request='WatchRelationUnits',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ModelConfigResults)
- async def ModelGet(self):
+ @ReturnMapping(RelationStatusWatchResults)
+ async def WatchRelationsSuspendedStatus(self, args):
'''
-
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+ args : typing.Sequence[~RemoteEntityArg]
+ Returns -> typing.Sequence[~RelationLifeSuspendedStatusWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='ModelGet', version=1, params=_params)
-
+ msg = dict(type='CrossModelRelations',
+ request='WatchRelationsSuspendedStatus',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ModelInfo)
- async def ModelInfo(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.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
+ @ReturnMapping(StringsResult)
+ async def APIAddresses(self):
'''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Client', request='ModelInfo', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
- @ReturnMapping(None)
- async def ModelSet(self, config):
- '''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- Returns -> None
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='ModelSet', version=1, params=_params)
- _params['config'] = config
- reply = await self.rpc(msg)
- return reply
-
+ msg = dict(type='Deployer',
+ request='APIAddresses',
+ version=1,
+ params=_params)
-
- @ReturnMapping(None)
- async def ModelUnset(self, keys):
- '''
- keys : typing.Sequence<+T_co>[str]
- Returns -> None
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Client', request='ModelUnset', version=1, params=_params)
- _params['keys'] = keys
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ModelUserInfoResults)
- async def ModelUserInfo(self):
- '''
-
- Returns -> typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult>
+ @ReturnMapping(APIHostPortsResult)
+ async def APIHostPorts(self):
'''
- # 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
+ Returns -> typing.Sequence[~HostPort]
'''
# 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
-
-
+ msg = dict(type='Deployer',
+ request='APIHostPorts',
+ version=1,
+ params=_params)
- @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
+ @ReturnMapping(DeployerConnectionValues)
+ async def ConnectionInfo(self):
'''
- # 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<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult>
+ Returns -> typing.Sequence[str]
'''
# 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
-
+ msg = dict(type='Deployer',
+ request='ConnectionInfo',
+ version=1,
+ params=_params)
-
- @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):
+ @ReturnMapping(LifeResults)
+ async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='RetryProvisioning', version=1, params=_params)
+ msg = dict(type='Deployer',
+ request='Life',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResult)
- async def SLALevel(self):
+ async def ModelUUID(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)
+ msg = dict(type='Deployer',
+ request='ModelUUID',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetModelAgentVersion(self, version):
+ @ReturnMapping(ErrorResults)
+ async def Remove(self, entities):
'''
- version : Number
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='SetModelAgentVersion', version=1, params=_params)
- _params['version'] = version
+ msg = dict(type='Deployer',
+ request='Remove',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetModelConstraints(self, application, constraints):
+ @ReturnMapping(ErrorResults)
+ async def SetPasswords(self, changes):
'''
- application : str
- constraints : Value
- Returns -> None
+ changes : typing.Sequence[~EntityPassword]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='SetModelConstraints', version=1, params=_params)
- _params['application'] = application
- _params['constraints'] = constraints
+ msg = dict(type='Deployer',
+ request='SetPasswords',
+ version=1,
+ params=_params)
+ _params['changes'] = changes
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetSLALevel(self, creds, level):
+ @ReturnMapping(ErrorResults)
+ async def SetStatus(self, entities):
'''
- creds : typing.Sequence<+T_co>[int]
- level : str
- Returns -> None
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='SetSLALevel', version=1, params=_params)
- _params['creds'] = creds
- _params['level'] = level
+ msg = dict(type='Deployer',
+ request='SetStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StatusHistoryResults)
- async def StatusHistory(self, requests):
+ @ReturnMapping(ErrorResults)
+ async def UpdateStatus(self, entities):
'''
- requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
- Returns -> typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='StatusHistory', version=1, params=_params)
- _params['requests'] = requests
+ msg = dict(type='Deployer',
+ request='UpdateStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(AllWatcherId)
- async def WatchAll(self):
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchAPIHostPorts(self):
'''
- Returns -> str
+ Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Client', request='WatchAll', version=1, params=_params)
+ msg = dict(type='Deployer',
+ request='WatchAPIHostPorts',
+ 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'},
- '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,
+
+ @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='Deployer',
+ request='WatchUnits',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class ExternalControllerUpdaterFacade(Type):
+ name = 'ExternalControllerUpdater'
+ version = 1
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': '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'},
+ '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'},
- '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'],
+ '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'},
- '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'}},
- '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'}},
+ 'SetExternalControllerInfo': {'properties': {'Params': {'$ref': '#/definitions/SetExternalControllersInfoParams'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'WatchExternalControllers': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(CloudResults)
- async def Cloud(self, entities):
+ @ReturnMapping(ExternalControllerInfoResults)
+ async def ExternalControllerInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudResult]<~CloudResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ExternalControllerInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='Cloud', version=1, params=_params)
+ msg = dict(type='ExternalControllerUpdater',
+ request='ExternalControllerInfo',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(CloudsResult)
- async def Clouds(self):
+ @ReturnMapping(ErrorResults)
+ async def SetExternalControllerInfo(self, controllers):
+ '''
+ controllers : typing.Sequence[~SetExternalControllerInfoParams]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ExternalControllerUpdater',
+ request='SetExternalControllerInfo',
+ version=1,
+ params=_params)
+ _params['controllers'] = controllers
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchExternalControllers(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud>
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='Clouds', version=1, params=_params)
+ msg = dict(type='ExternalControllerUpdater',
+ request='WatchExternalControllers',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(CloudCredentialResults)
- async def Credential(self, entities):
+class FanConfigurerFacade(Type):
+ name = 'FanConfigurer'
+ 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'},
+ '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'},
+ 'WatchForFanConfigChanges': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(FanConfigResult)
+ async def FanConfig(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult>
+
+ Returns -> typing.Sequence[~FanConfigEntry]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='Credential', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='FanConfigurer',
+ request='FanConfig',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringResult)
- async def DefaultCloud(self):
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchForFanConfigChanges(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), str]
+ Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='DefaultCloud', version=1, params=_params)
+ msg = dict(type='FanConfigurer',
+ request='WatchForFanConfigChanges',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(InstanceTypesResults)
- async def InstanceTypes(self, constraints):
+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'},
+ 'FirewallRule': {'additionalProperties': False,
+ 'properties': {'known-service': {'type': 'string'},
+ 'whitelist-cidrs': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['known-service'],
+ 'type': 'object'},
+ 'FirewallRuleArgs': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'$ref': '#/definitions/FirewallRule'},
+ 'type': 'array'}},
+ 'required': ['args'],
+ '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'},
+ 'SetFirewallRules': {'properties': {'Params': {'$ref': '#/definitions/FirewallRuleArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(ListFirewallRulesResults)
+ async def ListFirewallRules(self):
'''
- constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
+
+ Returns -> typing.Sequence[~FirewallRule]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='InstanceTypes', version=1, params=_params)
- _params['constraints'] = constraints
+ msg = dict(type='FirewallRules',
+ request='ListFirewallRules',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def RevokeCredentials(self, entities):
+ async def SetFirewallRules(self, args):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ args : typing.Sequence[~FirewallRule]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='RevokeCredentials', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='FirewallRules',
+ request='SetFirewallRules',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
+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'}
+
+
@ReturnMapping(ErrorResults)
- async def UpdateCredentials(self, credentials):
- '''
- credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
- '''
- # map input types to rpc msg
- _params = dict()
- 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):
+ async def ReportKeys(self, entity_keys):
'''
- user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entity_keys : typing.Sequence[~SSHHostKeys]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cloud', request='UserCredentials', version=1, params=_params)
- _params['user-clouds'] = user_clouds
+ msg = dict(type='HostKeyReporter',
+ request='ReportKeys',
+ version=1,
+ params=_params)
+ _params['entity-keys'] = entity_keys
reply = await self.rpc(msg)
return reply
-class DeployerFacade(Type):
- name = 'Deployer'
+class KeyManagerFacade(Type):
+ name = 'KeyManager'
version = 1
- schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
- 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
- 'type': 'array'},
- 'type': 'array'}},
- 'required': ['servers'],
- 'type': 'object'},
- 'Address': {'additionalProperties': False,
- 'properties': {'scope': {'type': 'string'},
- 'space-name': {'type': 'string'},
- 'type': {'type': 'string'},
- 'value': {'type': 'string'}},
- 'required': ['value', 'type', 'scope'],
- 'type': 'object'},
- 'BytesResult': {'additionalProperties': False,
- 'properties': {'result': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['result'],
- 'type': 'object'},
- 'DeployerConnectionValues': {'additionalProperties': False,
- 'properties': {'api-addresses': {'items': {'type': 'string'},
- 'type': 'array'},
- 'state-addresses': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['state-addresses',
- 'api-addresses'],
- 'type': 'object'},
- 'Entities': {'additionalProperties': False,
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'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'},
'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'],
+ 'ListSSHKeys': {'additionalProperties': False,
+ 'properties': {'entities': {'$ref': '#/definitions/Entities'},
+ 'mode': {'type': 'boolean'}},
+ 'required': ['entities', 'mode'],
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'NotifyWatchResult': {'additionalProperties': False,
- 'properties': {'NotifyWatcherId': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['NotifyWatcherId'],
+ 'ModifyUserSSHKeys': {'additionalProperties': False,
+ 'properties': {'ssh-keys': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'user': {'type': 'string'}},
+ 'required': ['user', 'ssh-keys'],
'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'},
- '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'}},
- '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': {'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(StringsResult)
- async def APIAddresses(self):
- '''
-
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Deployer', request='APIAddresses', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(APIHostPortsResult)
- async def APIHostPorts(self):
+ @ReturnMapping(ErrorResults)
+ async def AddKeys(self, ssh_keys, user):
'''
-
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ ssh_keys : typing.Sequence[str]
+ user : str
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='APIHostPorts', version=1, params=_params)
-
+ 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(BytesResult)
- async def CACert(self):
+ @ReturnMapping(ErrorResults)
+ async def DeleteKeys(self, ssh_keys, user):
'''
-
- Returns -> typing.Sequence<+T_co>[int]
+ ssh_keys : typing.Sequence[str]
+ user : str
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='CACert', version=1, params=_params)
-
+ 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(DeployerConnectionValues)
- async def ConnectionInfo(self):
+ @ReturnMapping(ErrorResults)
+ async def ImportKeys(self, ssh_keys, user):
'''
-
- Returns -> typing.Sequence<+T_co>[str]
+ ssh_keys : typing.Sequence[str]
+ user : str
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='ConnectionInfo', version=1, params=_params)
-
+ 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(LifeResults)
- async def Life(self, entities):
+ @ReturnMapping(StringsResults)
+ async def ListKeys(self, entities, mode):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : Entities
+ mode : bool
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='Life', version=1, params=_params)
+ msg = dict(type='KeyManager',
+ request='ListKeys',
+ version=1,
+ params=_params)
_params['entities'] = entities
+ _params['mode'] = mode
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringResult)
- async def ModelUUID(self):
+class KeyUpdaterFacade(Type):
+ name = 'KeyUpdater'
+ 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'},
+ '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'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(StringsResults)
+ async def AuthorisedKeys(self, entities):
'''
-
- Returns -> typing.Union[_ForwardRef('Error'), str]
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='ModelUUID', version=1, params=_params)
-
+ msg = dict(type='KeyUpdater',
+ request='AuthorisedKeys',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def Remove(self, entities):
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchAuthorisedKeys(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='Remove', version=1, params=_params)
+ msg = dict(type='KeyUpdater',
+ request='WatchAuthorisedKeys',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetPasswords(self, changes):
- '''
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Deployer', request='SetPasswords', version=1, params=_params)
- _params['changes'] = changes
- reply = await self.rpc(msg)
- return reply
-
-
+class LifeFlagFacade(Type):
+ name = 'LifeFlag'
+ version = 1
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'LifeResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'life': {'type': 'string'}},
+ 'required': ['life'],
+ 'type': 'object'},
+ 'LifeResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/LifeResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'NotifyWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/LifeResults'}},
+ 'type': 'object'},
+ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
- @ReturnMapping(ErrorResults)
- async def SetStatus(self, entities):
+ @ReturnMapping(LifeResults)
+ async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='SetStatus', version=1, params=_params)
+ msg = dict(type='LifeFlag',
+ request='Life',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(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
-
-
-
- @ReturnMapping(ErrorResults)
- async def UpdateStatus(self, entities):
+ @ReturnMapping(NotifyWatchResults)
+ async def Watch(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='UpdateStatus', version=1, params=_params)
+ msg = dict(type='LifeFlag',
+ request='Watch',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResult)
- async def WatchAPIHostPorts(self):
- '''
+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'}
+
- Returns -> typing.Union[str, _ForwardRef('Error')]
+ @ReturnMapping(LogForwardingGetLastSentResults)
+ async def GetLastSent(self, ids):
+ '''
+ ids : typing.Sequence[~LogForwardingID]
+ Returns -> typing.Sequence[~LogForwardingGetLastSentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='WatchAPIHostPorts', version=1, params=_params)
-
+ msg = dict(type='LogForwarding',
+ request='GetLastSent',
+ version=1,
+ params=_params)
+ _params['ids'] = ids
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringsWatchResults)
- async def WatchUnits(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def SetLastSent(self, params):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ params : typing.Sequence[~LogForwardingSetLastSentParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Deployer', request='WatchUnits', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='LogForwarding',
+ request='SetLastSent',
+ version=1,
+ params=_params)
+ _params['params'] = params
reply = await self.rpc(msg)
return reply
-class HostKeyReporterFacade(Type):
- name = 'HostKeyReporter'
+class LoggerFacade(Type):
+ name = 'Logger'
version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'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'}},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'NotifyWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'LoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/StringResults'}},
+ 'type': 'object'},
+ 'WatchLoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ErrorResults)
- async def ReportKeys(self, entity_keys):
+ @ReturnMapping(StringResults)
+ async def LoggingConfig(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Logger',
+ request='LoggingConfig',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchLoggingConfig(self, entities):
'''
- entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='HostKeyReporter', request='ReportKeys', version=1, params=_params)
- _params['entity-keys'] = entity_keys
+ msg = dict(type='Logger',
+ request='WatchLoggingConfig',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class KeyManagerFacade(Type):
- name = 'KeyManager'
+class MachineActionsFacade(Type):
+ name = 'MachineActions'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 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': 'array'}},
'required': ['results'],
'type': 'object'},
- 'ListSSHKeys': {'additionalProperties': False,
- 'properties': {'entities': {'$ref': '#/definitions/Entities'},
- 'mode': {'type': 'boolean'}},
- 'required': ['entities', 'mode'],
- 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'ModifyUserSSHKeys': {'additionalProperties': False,
- 'properties': {'ssh-keys': {'items': {'type': 'string'},
+ 'StringsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'type': 'string'},
'type': 'array'},
- 'user': {'type': 'string'}},
- 'required': ['user', 'ssh-keys'],
- 'type': 'object'},
- 'StringsResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'StringsResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'AddKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
+ 'type': 'object'},
+ 'StringsWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ActionResults'}},
'type': 'object'},
- 'DeleteKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'ImportKeys': {'properties': {'Params': {'$ref': '#/definitions/ModifyUserSSHKeys'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'ListKeys': {'properties': {'Params': {'$ref': '#/definitions/ListSSHKeys'},
- 'Result': {'$ref': '#/definitions/StringsResults'}},
- 'type': 'object'}},
+ 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'RunningActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
+ 'type': 'object'},
+ 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ErrorResults)
- async def AddKeys(self, ssh_keys, user):
+ @ReturnMapping(ActionResults)
+ async def Actions(self, entities):
'''
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyManager', request='AddKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
+ msg = dict(type='MachineActions',
+ request='Actions',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def DeleteKeys(self, ssh_keys, user):
+ async def BeginActions(self, entities):
'''
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyManager', request='DeleteKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
+ msg = dict(type='MachineActions',
+ request='BeginActions',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def ImportKeys(self, ssh_keys, user):
+ async def FinishActions(self, results):
'''
- ssh_keys : typing.Sequence<+T_co>[str]
- user : str
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ results : typing.Sequence[~ActionExecutionResult]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyManager', request='ImportKeys', version=1, params=_params)
- _params['ssh-keys'] = ssh_keys
- _params['user'] = user
+ msg = dict(type='MachineActions',
+ request='FinishActions',
+ version=1,
+ params=_params)
+ _params['results'] = results
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringsResults)
- async def ListKeys(self, entities, mode):
+ @ReturnMapping(ActionsByReceivers)
+ async def RunningActions(self, entities):
'''
- entities : Entities
- mode : bool
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionsByReceiver]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyManager', request='ListKeys', version=1, params=_params)
+ msg = dict(type='MachineActions',
+ request='RunningActions',
+ version=1,
+ params=_params)
_params['entities'] = entities
- _params['mode'] = mode
reply = await self.rpc(msg)
return reply
-class KeyUpdaterFacade(Type):
- name = 'KeyUpdater'
+ @ReturnMapping(StringsWatchResults)
+ async def WatchActionNotifications(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MachineActions',
+ request='WatchActionNotifications',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class MachineUndertakerFacade(Type):
+ name = 'MachineUndertaker'
version = 1
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'type': 'object'},
+ 'EntitiesResult': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'EntitiesResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'type': 'array'}},
'required': ['results'],
'type': 'object'},
- 'StringsResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'StringsResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'AuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/StringsResults'}},
- 'type': 'object'},
- 'WatchAuthorisedKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ 'ProviderInterfaceInfo': {'additionalProperties': False,
+ 'properties': {'interface-name': {'type': 'string'},
+ 'mac-address': {'type': 'string'},
+ 'provider-id': {'type': 'string'}},
+ 'required': ['interface-name',
+ 'mac-address',
+ 'provider-id'],
+ 'type': 'object'},
+ 'ProviderInterfaceInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'interfaces': {'items': {'$ref': '#/definitions/ProviderInterfaceInfo'},
+ 'type': 'array'},
+ 'machine-tag': {'type': 'string'}},
+ 'required': ['machine-tag',
+ 'interfaces'],
+ 'type': 'object'},
+ 'ProviderInterfaceInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ProviderInterfaceInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'AllMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/EntitiesResults'}},
+ 'type': 'object'},
+ 'CompleteMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'}},
+ 'type': 'object'},
+ 'GetMachineProviderInterfaceInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ProviderInterfaceInfoResults'}},
+ 'type': 'object'},
+ 'WatchMachineRemovals': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(StringsResults)
- async def AuthorisedKeys(self, entities):
+ @ReturnMapping(EntitiesResults)
+ async def AllMachineRemovals(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~EntitiesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MachineUndertaker',
+ request='AllMachineRemovals',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def CompleteMachineRemovals(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MachineUndertaker',
+ request='CompleteMachineRemovals',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ProviderInterfaceInfoResults)
+ async def GetMachineProviderInterfaceInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ProviderInterfaceInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyUpdater', request='AuthorisedKeys', version=1, params=_params)
+ msg = dict(type='MachineUndertaker',
+ request='GetMachineProviderInterfaceInfo',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
- async def WatchAuthorisedKeys(self, entities):
+ async def WatchMachineRemovals(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='KeyUpdater', request='WatchAuthorisedKeys', version=1, params=_params)
+ msg = dict(type='MachineUndertaker',
+ request='WatchMachineRemovals',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class LifeFlagFacade(Type):
- name = 'LifeFlag'
+class MachinerFacade(Type):
+ name = 'Machiner'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
+ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+ 'type': 'array'},
+ 'type': 'array'}},
+ 'required': ['servers'],
+ 'type': 'object'},
+ 'Address': {'additionalProperties': False,
+ 'properties': {'scope': {'type': 'string'},
+ 'space-name': {'type': 'string'},
+ 'type': {'type': 'string'},
+ 'value': {'type': 'string'}},
+ 'required': ['value', 'type', 'scope'],
+ 'type': 'object'},
+ 'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'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'},
'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': ['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'}},
'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
'type': 'array'}},
'required': ['results'],
- 'type': 'object'}},
- 'properties': {'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'type': 'object'},
+ 'SetMachineNetworkConfig': {'additionalProperties': False,
+ 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'},
+ 'type': 'array'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag', 'config'],
+ 'type': 'object'},
+ 'SetMachinesAddresses': {'additionalProperties': False,
+ 'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'},
+ 'type': 'array'}},
+ 'required': ['machine-addresses'],
+ 'type': 'object'},
+ 'SetStatus': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'}},
+ 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
+ 'type': 'object'},
+ 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+ 'type': 'object'},
+ 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Jobs': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/JobsResults'}},
+ 'type': 'object'},
+ 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/LifeResults'}},
'type': 'object'},
+ 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'SetMachineAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
+ 'type': 'object'},
+ 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ 'type': 'object'},
+ 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(LifeResults)
- async def Life(self, entities):
- '''
- 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='LifeFlag', 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<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='LifeFlag', request='Watch', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
-
-class LogForwardingFacade(Type):
- name = 'LogForwarding'
- version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ErrorResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'LogForwardingGetLastSentParams': {'additionalProperties': False,
- 'properties': {'ids': {'items': {'$ref': '#/definitions/LogForwardingID'},
- 'type': 'array'}},
- 'required': ['ids'],
- 'type': 'object'},
- 'LogForwardingGetLastSentResult': {'additionalProperties': False,
- 'properties': {'err': {'$ref': '#/definitions/Error'},
- 'record-id': {'type': 'integer'},
- 'record-timestamp': {'type': 'integer'}},
- 'required': ['record-id',
- 'record-timestamp',
- 'err'],
- 'type': 'object'},
- 'LogForwardingGetLastSentResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/LogForwardingGetLastSentResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'LogForwardingID': {'additionalProperties': False,
- 'properties': {'model': {'type': 'string'},
- 'sink': {'type': 'string'}},
- 'required': ['model', 'sink'],
- 'type': 'object'},
- 'LogForwardingSetLastSentParam': {'additionalProperties': False,
- 'properties': {'LogForwardingID': {'$ref': '#/definitions/LogForwardingID'},
- 'record-id': {'type': 'integer'},
- 'record-timestamp': {'type': 'integer'}},
- 'required': ['LogForwardingID',
- 'record-id',
- 'record-timestamp'],
- 'type': 'object'},
- 'LogForwardingSetLastSentParams': {'additionalProperties': False,
- 'properties': {'params': {'items': {'$ref': '#/definitions/LogForwardingSetLastSentParam'},
- 'type': 'array'}},
- 'required': ['params'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
- 'properties': {'GetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingGetLastSentParams'},
- 'Result': {'$ref': '#/definitions/LogForwardingGetLastSentResults'}},
- 'type': 'object'},
- 'SetLastSent': {'properties': {'Params': {'$ref': '#/definitions/LogForwardingSetLastSentParams'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'}},
- 'type': 'object'}
-
+ @ReturnMapping(StringsResult)
+ async def APIAddresses(self):
+ '''
- @ReturnMapping(LogForwardingGetLastSentResults)
- async def GetLastSent(self, ids):
+ 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):
'''
- ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
- Returns -> typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
+
+ Returns -> typing.Sequence[~HostPort]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='LogForwarding', request='GetLastSent', version=1, params=_params)
- _params['ids'] = ids
+ msg = dict(type='Machiner',
+ request='APIHostPorts',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def SetLastSent(self, params):
+ async def EnsureDead(self, entities):
'''
- params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='LogForwarding', request='SetLastSent', version=1, params=_params)
- _params['params'] = params
+ msg = dict(type='Machiner',
+ request='EnsureDead',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class LoggerFacade(Type):
- name = 'Logger'
- version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'NotifyWatchResult': {'additionalProperties': False,
- 'properties': {'NotifyWatcherId': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['NotifyWatcherId'],
- 'type': 'object'},
- 'NotifyWatchResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'StringResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'type': 'string'}},
- 'required': ['result'],
- 'type': 'object'},
- 'StringResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'LoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/StringResults'}},
- 'type': 'object'},
- 'WatchLoggingConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
- 'type': 'object'}
-
-
- @ReturnMapping(StringResults)
- async def LoggingConfig(self, entities):
+ @ReturnMapping(JobsResults)
+ async def Jobs(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~JobsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Logger', request='LoggingConfig', version=1, params=_params)
+ msg = dict(type='Machiner',
+ request='Jobs',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResults)
- async def WatchLoggingConfig(self, entities):
+ @ReturnMapping(LifeResults)
+ async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Logger', request='WatchLoggingConfig', version=1, params=_params)
+ msg = dict(type='Machiner',
+ request='Life',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class MachineActionsFacade(Type):
- name = 'MachineActions'
- version = 1
- schema = {'definitions': {'Action': {'additionalProperties': False,
- 'properties': {'name': {'type': 'string'},
- 'parameters': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'receiver': {'type': 'string'},
- 'tag': {'type': 'string'}},
- 'required': ['tag', 'receiver', 'name'],
- 'type': 'object'},
- 'ActionExecutionResult': {'additionalProperties': False,
- 'properties': {'action-tag': {'type': 'string'},
- 'message': {'type': 'string'},
- 'results': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'status': {'type': 'string'}},
- 'required': ['action-tag', 'status'],
- 'type': 'object'},
- 'ActionExecutionResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ActionExecutionResult'},
- 'type': 'array'}},
- 'type': 'object'},
- 'ActionResult': {'additionalProperties': False,
- 'properties': {'action': {'$ref': '#/definitions/Action'},
- 'completed': {'format': 'date-time',
- 'type': 'string'},
- 'enqueued': {'format': 'date-time',
- 'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'},
- 'message': {'type': 'string'},
- 'output': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'started': {'format': 'date-time',
- 'type': 'string'},
- 'status': {'type': 'string'}},
- 'type': 'object'},
- 'ActionResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ActionResult'},
- 'type': 'array'}},
- 'type': 'object'},
- 'ActionsByReceiver': {'additionalProperties': False,
- 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionResult'},
- 'type': 'array'},
- 'error': {'$ref': '#/definitions/Error'},
- 'receiver': {'type': 'string'}},
- 'type': 'object'},
- 'ActionsByReceivers': {'additionalProperties': False,
- 'properties': {'actions': {'items': {'$ref': '#/definitions/ActionsByReceiver'},
- 'type': 'array'}},
- 'type': 'object'},
- 'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ErrorResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'StringsWatchResult': {'additionalProperties': False,
- 'properties': {'changes': {'items': {'type': 'string'},
- 'type': 'array'},
- 'error': {'$ref': '#/definitions/Error'},
- 'watcher-id': {'type': 'string'}},
- 'required': ['watcher-id'],
- 'type': 'object'},
- 'StringsWatchResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'Actions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ActionResults'}},
- 'type': 'object'},
- 'BeginActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'FinishActions': {'properties': {'Params': {'$ref': '#/definitions/ActionExecutionResults'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'RunningActions': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ActionsByReceivers'}},
- 'type': 'object'},
- 'WatchActionNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/StringsWatchResults'}},
- 'type': 'object'}},
- 'type': 'object'}
-
+ @ReturnMapping(StringResult)
+ async def ModelUUID(self):
+ '''
- @ReturnMapping(ActionResults)
- async def Actions(self, entities):
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Machiner',
+ request='ModelUUID',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetMachineAddresses(self, machine_addresses):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ machine_addresses : typing.Sequence[~MachineAddresses]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineActions', request='Actions', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='Machiner',
+ request='SetMachineAddresses',
+ version=1,
+ params=_params)
+ _params['machine-addresses'] = machine_addresses
+ 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='Machiner',
+ request='SetObservedNetworkConfig',
+ version=1,
+ params=_params)
+ _params['config'] = config
+ _params['tag'] = tag
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def BeginActions(self, entities):
+ async def SetProviderNetworkConfig(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineActions', request='BeginActions', version=1, params=_params)
+ msg = dict(type='Machiner',
+ request='SetProviderNetworkConfig',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def FinishActions(self, results):
+ async def SetStatus(self, entities):
'''
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineActions', request='FinishActions', version=1, params=_params)
- _params['results'] = results
+ msg = dict(type='Machiner',
+ request='SetStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ActionsByReceivers)
- async def RunningActions(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def UpdateStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineActions', request='RunningActions', version=1, params=_params)
+ msg = dict(type='Machiner',
+ request='UpdateStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringsWatchResults)
- async def WatchActionNotifications(self, entities):
+ @ReturnMapping(NotifyWatchResults)
+ async def Watch(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineActions', request='WatchActionNotifications', version=1, params=_params)
+ msg = dict(type='Machiner',
+ request='Watch',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class MachineUndertakerFacade(Type):
- name = 'MachineUndertaker'
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchAPIHostPorts(self):
+ '''
+
+ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Machiner',
+ request='WatchAPIHostPorts',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class MeterStatusFacade(Type):
+ name = 'MeterStatus'
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'],
'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'}},
'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'}},
+ '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(EntitiesResults)
- async def AllMachineRemovals(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MachineUndertaker', request='AllMachineRemovals', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(None)
- async def CompleteMachineRemovals(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> None
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MachineUndertaker', request='CompleteMachineRemovals', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(ProviderInterfaceInfoResults)
- async def GetMachineProviderInterfaceInfo(self, entities):
+ @ReturnMapping(MeterStatusResults)
+ async def GetMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MeterStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineUndertaker', request='GetMachineProviderInterfaceInfo', version=1, params=_params)
+ msg = dict(type='MeterStatus',
+ request='GetMeterStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
- async def WatchMachineRemovals(self, entities):
+ async def WatchMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineUndertaker', request='WatchMachineRemovals', version=1, params=_params)
+ msg = dict(type='MeterStatus',
+ request='WatchMeterStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class MachinerFacade(Type):
- name = 'Machiner'
+class MetricsManagerFacade(Type):
+ name = 'MetricsManager'
version = 1
- schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
- 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
- 'type': 'array'},
- 'type': 'array'}},
- 'required': ['servers'],
- 'type': 'object'},
- 'Address': {'additionalProperties': False,
- 'properties': {'scope': {'type': 'string'},
- 'space-name': {'type': 'string'},
- 'type': {'type': 'string'},
- 'value': {'type': 'string'}},
- 'required': ['value', 'type', 'scope'],
- 'type': 'object'},
- 'BytesResult': {'additionalProperties': False,
- 'properties': {'result': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['result'],
- 'type': 'object'},
- 'Entities': {'additionalProperties': False,
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'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'},
'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'],
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+ 'properties': {'AddJujuMachineMetrics': {'type': 'object'},
+ 'CleanupOldMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
'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'},
+ 'SendMetrics': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(None)
+ async def AddJujuMachineMetrics(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MetricsManager',
+ request='AddJujuMachineMetrics',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def CleanupOldMetrics(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MetricsManager',
+ request='CleanupOldMetrics',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SendMetrics(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MetricsManager',
+ request='SendMetrics',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class MigrationFlagFacade(Type):
+ name = 'MigrationFlag'
+ 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'}},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
- 'SetMachineNetworkConfig': {'additionalProperties': False,
- 'properties': {'config': {'items': {'$ref': '#/definitions/NetworkConfig'},
- 'type': 'array'},
- 'tag': {'type': 'string'}},
- 'required': ['tag', 'config'],
- 'type': 'object'},
- 'SetMachinesAddresses': {'additionalProperties': False,
- 'properties': {'machine-addresses': {'items': {'$ref': '#/definitions/MachineAddresses'},
- 'type': 'array'}},
- 'required': ['machine-addresses'],
- 'type': 'object'},
- 'SetStatus': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'StringResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'type': 'string'}},
- 'required': ['result'],
- 'type': 'object'},
- 'StringsResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'}},
- 'properties': {'APIAddresses': {'properties': {'Result': {'$ref': '#/definitions/StringsResult'}},
- 'type': 'object'},
- 'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+ 'PhaseResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'phase': {'type': 'string'}},
'type': 'object'},
- 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+ 'PhaseResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/PhaseResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'Phase': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/PhaseResults'}},
+ 'type': 'object'},
+ 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(PhaseResults)
+ async def Phase(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~PhaseResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationFlag',
+ request='Phase',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def Watch(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationFlag',
+ request='Watch',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class MigrationMasterFacade(Type):
+ name = 'MigrationMaster'
+ version = 1
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
'type': 'object'},
- 'EnsureDead': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'Jobs': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/JobsResults'}},
- 'type': 'object'},
- 'Life': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/LifeResults'}},
- 'type': 'object'},
- 'ModelUUID': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
- 'type': 'object'},
- 'SetMachineAddresses': {'properties': {'Params': {'$ref': '#/definitions/SetMachinesAddresses'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'MasterMigrationStatus': {'additionalProperties': False,
+ 'properties': {'migration-id': {'type': 'string'},
+ 'phase': {'type': 'string'},
+ 'phase-changed-time': {'format': 'date-time',
+ 'type': 'string'},
+ 'spec': {'$ref': '#/definitions/MigrationSpec'}},
+ 'required': ['spec',
+ 'migration-id',
+ 'phase',
+ 'phase-changed-time'],
+ 'type': 'object'},
+ 'MigrationModelInfo': {'additionalProperties': False,
+ 'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+ 'controller-agent-version': {'$ref': '#/definitions/Number'},
+ 'name': {'type': 'string'},
+ 'owner-tag': {'type': 'string'},
+ 'uuid': {'type': 'string'}},
+ 'required': ['uuid',
+ 'name',
+ 'owner-tag',
+ 'agent-version',
+ 'controller-agent-version'],
'type': 'object'},
- 'SetObservedNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/SetMachineNetworkConfig'}},
- 'type': 'object'},
- 'SetProviderNetworkConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'MigrationSpec': {'additionalProperties': False,
+ 'properties': {'model-tag': {'type': 'string'},
+ 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}},
+ 'required': ['model-tag', 'target-info'],
+ 'type': 'object'},
+ 'MigrationTargetInfo': {'additionalProperties': False,
+ 'properties': {'addrs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'auth-tag': {'type': 'string'},
+ 'ca-cert': {'type': 'string'},
+ 'controller-tag': {'type': 'string'},
+ 'macaroons': {'type': 'string'},
+ 'password': {'type': 'string'}},
+ 'required': ['controller-tag',
+ 'addrs',
+ 'ca-cert',
+ 'auth-tag'],
+ 'type': 'object'},
+ 'MinionReports': {'additionalProperties': False,
+ 'properties': {'failed': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'migration-id': {'type': 'string'},
+ 'phase': {'type': 'string'},
+ 'success-count': {'type': 'integer'},
+ 'unknown-count': {'type': 'integer'},
+ 'unknown-sample': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['migration-id',
+ 'phase',
+ 'success-count',
+ 'unknown-count',
+ 'unknown-sample',
+ 'failed'],
+ 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'Number': {'additionalProperties': False,
+ 'properties': {'Build': {'type': 'integer'},
+ 'Major': {'type': 'integer'},
+ 'Minor': {'type': 'integer'},
+ 'Patch': {'type': 'integer'},
+ 'Tag': {'type': 'string'}},
+ 'required': ['Major',
+ 'Minor',
+ 'Tag',
+ 'Patch',
+ 'Build'],
+ 'type': 'object'},
+ 'SerializedModel': {'additionalProperties': False,
+ 'properties': {'bytes': {'items': {'type': 'integer'},
+ 'type': 'array'},
+ 'charms': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'resources': {'items': {'$ref': '#/definitions/SerializedModelResource'},
+ 'type': 'array'},
+ 'tools': {'items': {'$ref': '#/definitions/SerializedModelTools'},
+ 'type': 'array'}},
+ 'required': ['bytes',
+ 'charms',
+ 'tools',
+ 'resources'],
+ 'type': 'object'},
+ 'SerializedModelResource': {'additionalProperties': False,
+ 'properties': {'application': {'type': 'string'},
+ 'application-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
+ 'charmstore-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
+ 'name': {'type': 'string'},
+ 'unit-revisions': {'patternProperties': {'.*': {'$ref': '#/definitions/SerializedModelResourceRevision'}},
+ 'type': 'object'}},
+ 'required': ['application',
+ 'name',
+ 'application-revision',
+ 'charmstore-revision',
+ 'unit-revisions'],
'type': 'object'},
- 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'SerializedModelResourceRevision': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'fingerprint': {'type': 'string'},
+ 'origin': {'type': 'string'},
+ 'path': {'type': 'string'},
+ 'revision': {'type': 'integer'},
+ 'size': {'type': 'integer'},
+ 'timestamp': {'format': 'date-time',
+ 'type': 'string'},
+ 'type': {'type': 'string'},
+ 'username': {'type': 'string'}},
+ 'required': ['revision',
+ 'type',
+ 'path',
+ 'description',
+ 'origin',
+ 'fingerprint',
+ 'size',
+ 'timestamp'],
+ 'type': 'object'},
+ 'SerializedModelTools': {'additionalProperties': False,
+ 'properties': {'uri': {'type': 'string'},
+ 'version': {'type': 'string'}},
+ 'required': ['version', 'uri'],
+ 'type': 'object'},
+ 'SetMigrationPhaseArgs': {'additionalProperties': False,
+ 'properties': {'phase': {'type': 'string'}},
+ 'required': ['phase'],
+ 'type': 'object'},
+ 'SetMigrationStatusMessageArgs': {'additionalProperties': False,
+ 'properties': {'message': {'type': 'string'}},
+ 'required': ['message'],
+ 'type': 'object'}},
+ 'properties': {'Export': {'properties': {'Result': {'$ref': '#/definitions/SerializedModel'}},
+ 'type': 'object'},
+ 'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}},
+ 'type': 'object'},
+ 'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}},
+ 'type': 'object'},
+ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}},
'type': 'object'},
- 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'Prechecks': {'type': 'object'},
+ 'Reap': {'type': 'object'},
+ 'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}},
+ 'type': 'object'},
+ 'SetStatusMessage': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationStatusMessageArgs'}},
+ 'type': 'object'},
+ 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
'type': 'object'},
- 'WatchAPIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'}},
+ 'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(StringsResult)
- async def APIAddresses(self):
+ @ReturnMapping(SerializedModel)
+ async def Export(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[typing.Sequence[int], typing.Sequence[str], typing.Sequence[~SerializedModelTools]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='APIAddresses', version=1, params=_params)
+ msg = dict(type='MigrationMaster',
+ request='Export',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(APIHostPortsResult)
- async def APIHostPorts(self):
+ @ReturnMapping(MasterMigrationStatus)
+ async def MigrationStatus(self):
'''
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ Returns -> typing.Union[str, _ForwardRef('MigrationSpec')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='APIHostPorts', version=1, params=_params)
+ msg = dict(type='MigrationMaster',
+ request='MigrationStatus',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(BytesResult)
- async def CACert(self):
+ @ReturnMapping(MinionReports)
+ async def MinionReports(self):
'''
- Returns -> typing.Sequence<+T_co>[int]
+ Returns -> typing.Union[typing.Sequence[str], str, int]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='CACert', version=1, params=_params)
+ msg = dict(type='MigrationMaster',
+ request='MinionReports',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def EnsureDead(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ @ReturnMapping(MigrationModelInfo)
+ async def ModelInfo(self):
'''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Machiner', request='EnsureDead', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
- @ReturnMapping(JobsResults)
- async def Jobs(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~JobsResult]<~JobsResult>
+ Returns -> typing.Union[_ForwardRef('Number'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='Jobs', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
+ msg = dict(type='MigrationMaster',
+ request='ModelInfo',
+ version=1,
+ params=_params)
-
- @ReturnMapping(LifeResults)
- async def Life(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Machiner', request='Life', version=1, params=_params)
- _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringResult)
- async def ModelUUID(self):
+ @ReturnMapping(None)
+ async def Prechecks(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), str]
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='ModelUUID', version=1, params=_params)
+ msg = dict(type='MigrationMaster',
+ request='Prechecks',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetMachineAddresses(self, machine_addresses):
+ @ReturnMapping(None)
+ async def Reap(self):
'''
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='SetMachineAddresses', version=1, params=_params)
- _params['machine-addresses'] = machine_addresses
+ msg = dict(type='MigrationMaster',
+ request='Reap',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
- async def SetObservedNetworkConfig(self, config, tag):
+ async def SetPhase(self, phase):
'''
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
- tag : str
+ phase : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='SetObservedNetworkConfig', version=1, params=_params)
- _params['config'] = config
- _params['tag'] = tag
+ msg = dict(type='MigrationMaster',
+ request='SetPhase',
+ version=1,
+ params=_params)
+ _params['phase'] = phase
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetProviderNetworkConfig(self, entities):
+ @ReturnMapping(None)
+ async def SetStatusMessage(self, message):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ message : str
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='SetProviderNetworkConfig', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='MigrationMaster',
+ request='SetStatusMessage',
+ version=1,
+ params=_params)
+ _params['message'] = message
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ @ReturnMapping(NotifyWatchResult)
+ async def Watch(self):
'''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Machiner', request='SetStatus', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
- @ReturnMapping(ErrorResults)
- async def UpdateStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='UpdateStatus', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
+ msg = dict(type='MigrationMaster',
+ request='Watch',
+ version=1,
+ params=_params)
-
-
- @ReturnMapping(NotifyWatchResults)
- async def Watch(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Machiner', request='Watch', version=1, params=_params)
- _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResult)
- async def WatchAPIHostPorts(self):
+ async def WatchMinionReports(self):
'''
Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Machiner', request='WatchAPIHostPorts', version=1, params=_params)
+ msg = dict(type='MigrationMaster',
+ request='WatchMinionReports',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
-class MeterStatusFacade(Type):
- name = 'MeterStatus'
+class MigrationMinionFacade(Type):
+ name = 'MigrationMinion'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'MeterStatusResult': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'},
- 'info': {'type': 'string'}},
- 'required': ['code', 'info'],
- 'type': 'object'},
- 'MeterStatusResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/MeterStatusResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
+ 'MinionReport': {'additionalProperties': False,
+ 'properties': {'migration-id': {'type': 'string'},
+ 'phase': {'type': 'string'},
+ 'success': {'type': 'boolean'}},
+ 'required': ['migration-id',
+ 'phase',
+ 'success'],
+ 'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
- 'type': 'object'},
- 'NotifyWatchResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'GetMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/MeterStatusResults'}},
- 'type': 'object'},
- 'WatchMeterStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
- 'type': 'object'}
-
-
- @ReturnMapping(MeterStatusResults)
- async def GetMeterStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MeterStatus', request='GetMeterStatus', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(NotifyWatchResults)
- async def WatchMeterStatus(self, entities):
- '''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MeterStatus', request='WatchMeterStatus', version=1, params=_params)
- _params['entities'] = entities
- reply = await self.rpc(msg)
- return reply
-
-
-
-class MetricsManagerFacade(Type):
- name = 'MetricsManager'
- version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- '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'}
-
-
- @ReturnMapping(None)
- async def AddJujuMachineMetrics(self):
- '''
-
- Returns -> None
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MetricsManager', request='AddJujuMachineMetrics', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
+ 'type': 'object'}},
+ 'properties': {'Report': {'properties': {'Params': {'$ref': '#/definitions/MinionReport'}},
+ 'type': 'object'},
+ 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
- @ReturnMapping(ErrorResults)
- async def CleanupOldMetrics(self, entities):
+ @ReturnMapping(None)
+ async def Report(self, migration_id, phase, success):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ migration_id : str
+ phase : str
+ success : bool
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MetricsManager', request='CleanupOldMetrics', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='MigrationMinion',
+ request='Report',
+ version=1,
+ params=_params)
+ _params['migration-id'] = migration_id
+ _params['phase'] = phase
+ _params['success'] = success
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SendMetrics(self, entities):
+ @ReturnMapping(NotifyWatchResult)
+ async def Watch(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+
+ Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MetricsManager', request='SendMetrics', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='MigrationMinion',
+ request='Watch',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class MigrationFlagFacade(Type):
- name = 'MigrationFlag'
+class MigrationStatusWatcherFacade(Type):
+ name = 'MigrationStatusWatcher'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'NotifyWatchResult': {'additionalProperties': False,
- 'properties': {'NotifyWatcherId': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['NotifyWatcherId'],
- 'type': 'object'},
- 'NotifyWatchResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'PhaseResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'phase': {'type': 'string'}},
- 'type': 'object'},
- 'PhaseResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/PhaseResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'Phase': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/PhaseResults'}},
- 'type': 'object'},
- 'Watch': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ schema = {'definitions': {'MigrationStatus': {'additionalProperties': False,
+ 'properties': {'attempt': {'type': 'integer'},
+ 'migration-id': {'type': 'string'},
+ 'phase': {'type': 'string'},
+ 'source-api-addrs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'source-ca-cert': {'type': 'string'},
+ 'target-api-addrs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'target-ca-cert': {'type': 'string'}},
+ 'required': ['migration-id',
+ 'attempt',
+ 'phase',
+ 'source-api-addrs',
+ 'source-ca-cert',
+ 'target-api-addrs',
+ 'target-ca-cert'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MigrationStatus'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(PhaseResults)
- async def Phase(self, entities):
+ @ReturnMapping(MigrationStatus)
+ async def Next(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult>
+
+ Returns -> typing.Union[int, str, typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationFlag', request='Phase', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='MigrationStatusWatcher',
+ request='Next',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResults)
- async def Watch(self, entities):
+ @ReturnMapping(None)
+ async def Stop(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationFlag', request='Watch', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='MigrationStatusWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class MigrationMasterFacade(Type):
- name = 'MigrationMaster'
+class MigrationTargetFacade(Type):
+ name = 'MigrationTarget'
version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'AdoptResourcesArgs': {'additionalProperties': False,
+ 'properties': {'model-tag': {'type': 'string'},
+ 'source-controller-version': {'$ref': '#/definitions/Number'}},
+ 'required': ['model-tag',
+ 'source-controller-version'],
+ 'type': 'object'},
+ 'BytesResult': {'additionalProperties': False,
+ 'properties': {'result': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'MasterMigrationStatus': {'additionalProperties': False,
- 'properties': {'migration-id': {'type': 'string'},
- 'phase': {'type': 'string'},
- 'phase-changed-time': {'format': 'date-time',
- 'type': 'string'},
- 'spec': {'$ref': '#/definitions/MigrationSpec'}},
- 'required': ['spec',
- 'migration-id',
- 'phase',
- 'phase-changed-time'],
- 'type': 'object'},
'MigrationModelInfo': {'additionalProperties': False,
'properties': {'agent-version': {'$ref': '#/definitions/Number'},
'controller-agent-version': {'$ref': '#/definitions/Number'},
'agent-version',
'controller-agent-version'],
'type': 'object'},
- 'MigrationSpec': {'additionalProperties': False,
- 'properties': {'model-tag': {'type': 'string'},
- 'target-info': {'$ref': '#/definitions/MigrationTargetInfo'}},
- 'required': ['model-tag', 'target-info'],
- 'type': 'object'},
- 'MigrationTargetInfo': {'additionalProperties': False,
- 'properties': {'addrs': {'items': {'type': 'string'},
- 'type': 'array'},
- 'auth-tag': {'type': 'string'},
- 'ca-cert': {'type': 'string'},
- 'controller-tag': {'type': 'string'},
- 'macaroons': {'type': 'string'},
- 'password': {'type': 'string'}},
- 'required': ['controller-tag',
- 'addrs',
- 'ca-cert',
- 'auth-tag'],
- 'type': 'object'},
- 'MinionReports': {'additionalProperties': False,
- 'properties': {'failed': {'items': {'type': 'string'},
- 'type': 'array'},
- 'migration-id': {'type': 'string'},
- 'phase': {'type': 'string'},
- 'success-count': {'type': 'integer'},
- 'unknown-count': {'type': 'integer'},
- 'unknown-sample': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['migration-id',
- 'phase',
- 'success-count',
- 'unknown-count',
- 'unknown-sample',
- 'failed'],
- 'type': 'object'},
- 'NotifyWatchResult': {'additionalProperties': False,
- 'properties': {'NotifyWatcherId': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['NotifyWatcherId'],
- 'type': 'object'},
+ 'ModelArgs': {'additionalProperties': False,
+ 'properties': {'model-tag': {'type': 'string'}},
+ 'required': ['model-tag'],
+ 'type': 'object'},
'Number': {'additionalProperties': False,
'properties': {'Build': {'type': 'integer'},
'Major': {'type': 'integer'},
'properties': {'uri': {'type': 'string'},
'version': {'type': 'string'}},
'required': ['version', 'uri'],
- 'type': 'object'},
- 'SetMigrationPhaseArgs': {'additionalProperties': False,
- 'properties': {'phase': {'type': 'string'}},
- 'required': ['phase'],
- 'type': 'object'},
- 'SetMigrationStatusMessageArgs': {'additionalProperties': False,
- 'properties': {'message': {'type': 'string'}},
- 'required': ['message'],
- 'type': 'object'}},
- 'properties': {'Export': {'properties': {'Result': {'$ref': '#/definitions/SerializedModel'}},
+ 'type': 'object'}},
+ 'properties': {'Abort': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}},
+ 'type': 'object'},
+ 'Activate': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}},
+ 'type': 'object'},
+ 'AdoptResources': {'properties': {'Params': {'$ref': '#/definitions/AdoptResourcesArgs'}},
+ 'type': 'object'},
+ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+ 'type': 'object'},
+ 'CheckMachines': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Import': {'properties': {'Params': {'$ref': '#/definitions/SerializedModel'}},
+ 'type': 'object'},
+ 'LatestLogTime': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'},
+ 'Result': {'format': 'date-time',
+ 'type': 'string'}},
+ 'type': 'object'},
+ 'Prechecks': {'properties': {'Params': {'$ref': '#/definitions/MigrationModelInfo'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(None)
+ async def Abort(self, model_tag):
+ '''
+ model_tag : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='Abort',
+ version=1,
+ params=_params)
+ _params['model-tag'] = model_tag
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Activate(self, model_tag):
+ '''
+ model_tag : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='Activate',
+ version=1,
+ params=_params)
+ _params['model-tag'] = model_tag
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def AdoptResources(self, model_tag, source_controller_version):
+ '''
+ model_tag : str
+ source_controller_version : Number
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='AdoptResources',
+ version=1,
+ params=_params)
+ _params['model-tag'] = model_tag
+ _params['source-controller-version'] = source_controller_version
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BytesResult)
+ async def CACert(self):
+ '''
+
+ Returns -> typing.Sequence[int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='CACert',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def CheckMachines(self, model_tag):
+ '''
+ model_tag : str
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='CheckMachines',
+ version=1,
+ params=_params)
+ _params['model-tag'] = model_tag
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Import(self, bytes_, charms, tools):
+ '''
+ bytes_ : typing.Sequence[int]
+ charms : typing.Sequence[str]
+ tools : typing.Sequence[~SerializedModelTools]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='Import',
+ version=1,
+ params=_params)
+ _params['bytes'] = bytes_
+ _params['charms'] = charms
+ _params['tools'] = tools
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(str)
+ async def LatestLogTime(self, model_tag):
+ '''
+ model_tag : str
+ Returns -> str
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='LatestLogTime',
+ version=1,
+ params=_params)
+ _params['model-tag'] = model_tag
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Prechecks(self, agent_version, name, owner_tag, uuid):
+ '''
+ agent_version : Number
+ name : str
+ owner_tag : str
+ uuid : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='MigrationTarget',
+ request='Prechecks',
+ version=1,
+ params=_params)
+ _params['agent-version'] = agent_version
+ _params['name'] = name
+ _params['owner-tag'] = owner_tag
+ _params['uuid'] = uuid
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class ModelConfigFacade(Type):
+ name = 'ModelConfig'
+ version = 1
+ schema = {'definitions': {'ConfigValue': {'additionalProperties': False,
+ 'properties': {'source': {'type': 'string'},
+ 'value': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'required': ['value', 'source'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
'type': 'object'},
- 'MigrationStatus': {'properties': {'Result': {'$ref': '#/definitions/MasterMigrationStatus'}},
- 'type': 'object'},
- 'MinionReports': {'properties': {'Result': {'$ref': '#/definitions/MinionReports'}},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'ModelConfigResults': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'ModelSLA': {'additionalProperties': False,
+ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'},
+ 'creds': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['ModelSLAInfo', 'creds'],
+ 'type': 'object'},
+ 'ModelSLAInfo': {'additionalProperties': False,
+ 'properties': {'level': {'type': 'string'},
+ 'owner': {'type': 'string'}},
+ 'required': ['level', 'owner'],
'type': 'object'},
- 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/MigrationModelInfo'}},
+ 'ModelSet': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config'],
'type': 'object'},
- 'Prechecks': {'type': 'object'},
- 'Reap': {'type': 'object'},
- 'SetPhase': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationPhaseArgs'}},
+ 'ModelUnset': {'additionalProperties': False,
+ 'properties': {'keys': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['keys'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'}},
+ 'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
'type': 'object'},
- 'SetStatusMessage': {'properties': {'Params': {'$ref': '#/definitions/SetMigrationStatusMessageArgs'}},
- 'type': 'object'},
- 'Watch': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'},
- 'WatchMinionReports': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'}},
+ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}},
+ 'type': 'object'},
+ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}},
+ 'type': 'object'},
+ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(SerializedModel)
- async def Export(self):
+ @ReturnMapping(ModelConfigResults)
+ async def ModelGet(self):
'''
- Returns -> typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
+ Returns -> typing.Mapping[str, ~ConfigValue]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='Export', version=1, params=_params)
+ msg = dict(type='ModelConfig',
+ request='ModelGet',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(MasterMigrationStatus)
- async def MigrationStatus(self):
+ @ReturnMapping(None)
+ async def ModelSet(self, config):
'''
-
- Returns -> typing.Union[str, _ForwardRef('MigrationSpec')]
+ config : typing.Mapping[str, typing.Any]
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='MigrationStatus', version=1, params=_params)
-
+ msg = dict(type='ModelConfig',
+ request='ModelSet',
+ version=1,
+ params=_params)
+ _params['config'] = config
reply = await self.rpc(msg)
return reply
- @ReturnMapping(MinionReports)
- async def MinionReports(self):
+ @ReturnMapping(None)
+ async def ModelUnset(self, keys):
'''
-
- Returns -> typing.Union[typing.Sequence<+T_co>[str], int]
+ keys : typing.Sequence[str]
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='MinionReports', version=1, params=_params)
-
+ msg = dict(type='ModelConfig',
+ request='ModelUnset',
+ version=1,
+ params=_params)
+ _params['keys'] = keys
reply = await self.rpc(msg)
return reply
- @ReturnMapping(MigrationModelInfo)
- async def ModelInfo(self):
+ @ReturnMapping(StringResult)
+ async def SLALevel(self):
'''
- Returns -> typing.Union[_ForwardRef('Number'), str]
+ Returns -> typing.Union[_ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='ModelInfo', version=1, params=_params)
+ msg = dict(type='ModelConfig',
+ request='SLALevel',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
- async def Prechecks(self):
+ 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='MigrationMaster', request='Prechecks', version=1, params=_params)
-
+ msg = dict(type='ModelConfig',
+ request='SetSLALevel',
+ version=1,
+ params=_params)
+ _params['creds'] = creds
+ _params['level'] = level
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Reap(self):
+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):
'''
-
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~IntResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='Reap', version=1, params=_params)
-
+ msg = dict(type='ModelUpgrader',
+ request='ModelEnvironVersion',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetPhase(self, phase):
+ @ReturnMapping(IntResults)
+ async def ModelTargetEnvironVersion(self, entities):
'''
- phase : str
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~IntResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='SetPhase', version=1, params=_params)
- _params['phase'] = phase
+ msg = dict(type='ModelUpgrader',
+ request='ModelTargetEnvironVersion',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetStatusMessage(self, message):
+ @ReturnMapping(ErrorResults)
+ async def SetModelEnvironVersion(self, models):
'''
- message : str
- Returns -> None
+ models : typing.Sequence[~SetModelEnvironVersion]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='SetStatusMessage', version=1, params=_params)
- _params['message'] = message
+ msg = dict(type='ModelUpgrader',
+ request='SetModelEnvironVersion',
+ version=1,
+ params=_params)
+ _params['models'] = models
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResult)
- async def Watch(self):
+ @ReturnMapping(ErrorResults)
+ async def SetModelStatus(self, entities):
'''
-
- Returns -> typing.Union[str, _ForwardRef('Error')]
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='Watch', version=1, params=_params)
-
+ msg = dict(type='ModelUpgrader',
+ request='SetModelStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResult)
- async def WatchMinionReports(self):
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchModelEnvironVersion(self, entities):
'''
-
- Returns -> typing.Union[str, _ForwardRef('Error')]
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMaster', request='WatchMinionReports', version=1, params=_params)
-
+ msg = dict(type='ModelUpgrader',
+ request='WatchModelEnvironVersion',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class MigrationMinionFacade(Type):
- name = 'MigrationMinion'
+class NotifyWatcherFacade(Type):
+ name = 'NotifyWatcher'
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'},
- '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'}},
+ schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
'type': 'object'}
@ReturnMapping(None)
- async def Report(self, migration_id, phase, success):
+ async def Next(self):
'''
- 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
+ msg = dict(type='NotifyWatcher',
+ request='Next',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResult)
- async def Watch(self):
+ @ReturnMapping(None)
+ async def Stop(self):
'''
- Returns -> typing.Union[str, _ForwardRef('Error')]
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationMinion', request='Watch', version=1, params=_params)
+ msg = dict(type='NotifyWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
-class MigrationStatusWatcherFacade(Type):
- name = 'MigrationStatusWatcher'
+class OfferStatusWatcherFacade(Type):
+ name = 'OfferStatusWatcher'
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)
+ @ReturnMapping(OfferStatusWatchResult)
async def Next(self):
'''
- Returns -> typing.Union[int, typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[typing.Sequence[~OfferStatusChange], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationStatusWatcher', request='Next', version=1, params=_params)
+ msg = dict(type='OfferStatusWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def Stop(self):
'''
-
- Returns -> None
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='MigrationStatusWatcher', request='Stop', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
-
-class MigrationTargetFacade(Type):
- name = 'MigrationTarget'
- version = 1
- schema = {'definitions': {'AdoptResourcesArgs': {'additionalProperties': False,
- 'properties': {'model-tag': {'type': 'string'},
- 'source-controller-version': {'$ref': '#/definitions/Number'}},
- 'required': ['model-tag',
- 'source-controller-version'],
- 'type': 'object'},
- 'BytesResult': {'additionalProperties': False,
- 'properties': {'result': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['result'],
- 'type': 'object'},
- 'MigrationModelInfo': {'additionalProperties': False,
- 'properties': {'agent-version': {'$ref': '#/definitions/Number'},
- 'controller-agent-version': {'$ref': '#/definitions/Number'},
- 'name': {'type': 'string'},
- 'owner-tag': {'type': 'string'},
- 'uuid': {'type': 'string'}},
- 'required': ['uuid',
- 'name',
- 'owner-tag',
- 'agent-version',
- 'controller-agent-version'],
- 'type': 'object'},
- 'ModelArgs': {'additionalProperties': False,
- 'properties': {'model-tag': {'type': 'string'}},
- 'required': ['model-tag'],
- 'type': 'object'},
- 'Number': {'additionalProperties': False,
- 'properties': {'Build': {'type': 'integer'},
- 'Major': {'type': 'integer'},
- 'Minor': {'type': 'integer'},
- 'Patch': {'type': 'integer'},
- 'Tag': {'type': 'string'}},
- 'required': ['Major',
- 'Minor',
- 'Tag',
- 'Patch',
- 'Build'],
- 'type': 'object'},
- 'SerializedModel': {'additionalProperties': False,
- 'properties': {'bytes': {'items': {'type': 'integer'},
- 'type': 'array'},
- 'charms': {'items': {'type': 'string'},
- 'type': 'array'},
- 'resources': {'items': {'$ref': '#/definitions/SerializedModelResource'},
- 'type': 'array'},
- 'tools': {'items': {'$ref': '#/definitions/SerializedModelTools'},
- 'type': 'array'}},
- 'required': ['bytes',
- 'charms',
- 'tools',
- 'resources'],
- 'type': 'object'},
- 'SerializedModelResource': {'additionalProperties': False,
- 'properties': {'application': {'type': 'string'},
- 'application-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
- 'charmstore-revision': {'$ref': '#/definitions/SerializedModelResourceRevision'},
- 'name': {'type': 'string'},
- 'unit-revisions': {'patternProperties': {'.*': {'$ref': '#/definitions/SerializedModelResourceRevision'}},
- 'type': 'object'}},
- 'required': ['application',
- 'name',
- 'application-revision',
- 'charmstore-revision',
- 'unit-revisions'],
- 'type': 'object'},
- 'SerializedModelResourceRevision': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'fingerprint': {'type': 'string'},
- 'origin': {'type': 'string'},
- 'path': {'type': 'string'},
- 'revision': {'type': 'integer'},
- 'size': {'type': 'integer'},
- 'timestamp': {'format': 'date-time',
- 'type': 'string'},
- 'type': {'type': 'string'},
- 'username': {'type': 'string'}},
- 'required': ['revision',
- 'type',
- 'path',
- 'description',
- 'origin',
- 'fingerprint',
- 'size',
- 'timestamp'],
- 'type': 'object'},
- 'SerializedModelTools': {'additionalProperties': False,
- 'properties': {'uri': {'type': 'string'},
- 'version': {'type': 'string'}},
- 'required': ['version', 'uri'],
- 'type': 'object'}},
- 'properties': {'Abort': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}},
- 'type': 'object'},
- 'Activate': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'}},
- 'type': 'object'},
- 'AdoptResources': {'properties': {'Params': {'$ref': '#/definitions/AdoptResourcesArgs'}},
- 'type': 'object'},
- 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
- 'type': 'object'},
- 'Import': {'properties': {'Params': {'$ref': '#/definitions/SerializedModel'}},
- 'type': 'object'},
- 'LatestLogTime': {'properties': {'Params': {'$ref': '#/definitions/ModelArgs'},
- 'Result': {'format': 'date-time',
- 'type': 'string'}},
- 'type': 'object'},
- 'Prechecks': {'properties': {'Params': {'$ref': '#/definitions/MigrationModelInfo'}},
- 'type': 'object'}},
- '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
+ msg = dict(type='OfferStatusWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Activate(self, model_tag):
+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(PayloadListResults)
+ async def List(self, patterns):
'''
- model_tag : str
- Returns -> None
+ patterns : typing.Sequence[str]
+ Returns -> typing.Sequence[~Payload]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationTarget', request='Activate', version=1, params=_params)
- _params['model-tag'] = model_tag
+ msg = dict(type='Payloads',
+ request='List',
+ version=1,
+ params=_params)
+ _params['patterns'] = patterns
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def AdoptResources(self, model_tag, source_controller_version):
+class PayloadsHookContextFacade(Type):
+ name = 'PayloadsHookContext'
+ version = 1
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'LookUpPayloadArg': {'additionalProperties': False,
+ 'properties': {'id': {'type': 'string'},
+ 'name': {'type': 'string'}},
+ 'required': ['name', 'id'],
+ 'type': 'object'},
+ 'LookUpPayloadArgs': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'$ref': '#/definitions/LookUpPayloadArg'},
+ 'type': 'array'}},
+ 'required': ['args'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'Payload': {'additionalProperties': False,
+ 'properties': {'class': {'type': 'string'},
+ 'id': {'type': 'string'},
+ 'labels': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'machine': {'type': 'string'},
+ 'status': {'type': 'string'},
+ 'type': {'type': 'string'},
+ 'unit': {'type': 'string'}},
+ 'required': ['class',
+ 'type',
+ 'id',
+ 'status',
+ 'labels',
+ 'unit',
+ 'machine'],
+ 'type': 'object'},
+ 'PayloadResult': {'additionalProperties': False,
+ 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'not-found': {'type': 'boolean'},
+ 'payload': {'$ref': '#/definitions/Payload'}},
+ 'required': ['Entity',
+ 'payload',
+ 'not-found'],
+ 'type': 'object'},
+ 'PayloadResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/PayloadResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'SetPayloadStatusArg': {'additionalProperties': False,
+ 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
+ 'status': {'type': 'string'}},
+ 'required': ['Entity', 'status'],
+ 'type': 'object'},
+ 'SetPayloadStatusArgs': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'$ref': '#/definitions/SetPayloadStatusArg'},
+ 'type': 'array'}},
+ 'required': ['args'],
+ 'type': 'object'},
+ 'TrackPayloadArgs': {'additionalProperties': False,
+ 'properties': {'payloads': {'items': {'$ref': '#/definitions/Payload'},
+ 'type': 'array'}},
+ 'required': ['payloads'],
+ 'type': 'object'}},
+ 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'type': 'object'},
+ 'LookUp': {'properties': {'Params': {'$ref': '#/definitions/LookUpPayloadArgs'},
+ 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'type': 'object'},
+ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetPayloadStatusArgs'},
+ 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'type': 'object'},
+ 'Track': {'properties': {'Params': {'$ref': '#/definitions/TrackPayloadArgs'},
+ 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'type': 'object'},
+ 'Untrack': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(PayloadResults)
+ async def List(self, entities):
'''
- model_tag : str
- source_controller_version : Number
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~PayloadResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationTarget', request='AdoptResources', version=1, params=_params)
- _params['model-tag'] = model_tag
- _params['source-controller-version'] = source_controller_version
+ msg = dict(type='PayloadsHookContext',
+ request='List',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(BytesResult)
- async def CACert(self):
+ @ReturnMapping(PayloadResults)
+ async def LookUp(self, args):
'''
-
- Returns -> typing.Sequence<+T_co>[int]
+ args : typing.Sequence[~LookUpPayloadArg]
+ Returns -> typing.Sequence[~PayloadResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationTarget', request='CACert', version=1, params=_params)
-
+ msg = dict(type='PayloadsHookContext',
+ request='LookUp',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Import(self, bytes_, charms, tools):
+ @ReturnMapping(PayloadResults)
+ async def SetStatus(self, args):
'''
- bytes_ : typing.Sequence<+T_co>[int]
- charms : typing.Sequence<+T_co>[str]
- tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
- Returns -> None
+ args : typing.Sequence[~SetPayloadStatusArg]
+ Returns -> typing.Sequence[~PayloadResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationTarget', request='Import', version=1, params=_params)
- _params['bytes'] = bytes_
- _params['charms'] = charms
- _params['tools'] = tools
+ msg = dict(type='PayloadsHookContext',
+ request='SetStatus',
+ version=1,
+ params=_params)
+ _params['args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(str)
- async def LatestLogTime(self, model_tag):
+ @ReturnMapping(PayloadResults)
+ async def Track(self, payloads):
'''
- model_tag : str
- Returns -> str
+ payloads : typing.Sequence[~Payload]
+ Returns -> typing.Sequence[~PayloadResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MigrationTarget', request='LatestLogTime', version=1, params=_params)
- _params['model-tag'] = model_tag
+ msg = dict(type='PayloadsHookContext',
+ request='Track',
+ version=1,
+ params=_params)
+ _params['payloads'] = payloads
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Prechecks(self, agent_version, name, owner_tag, uuid):
+ @ReturnMapping(PayloadResults)
+ async def Untrack(self, entities):
'''
- agent_version : Number
- name : str
- owner_tag : str
- uuid : str
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~PayloadResult]
'''
# 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
+ msg = dict(type='PayloadsHookContext',
+ request='Untrack',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class ModelConfigFacade(Type):
- name = 'ModelConfig'
+class PingerFacade(Type):
+ name = 'Pinger'
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'}},
+ schema = {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ModelConfigResults)
- async def ModelGet(self):
+ @ReturnMapping(None)
+ async def Ping(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelConfig', request='ModelGet', version=1, params=_params)
+ msg = dict(type='Pinger',
+ request='Ping',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
- async def ModelSet(self, config):
+ async def Stop(self):
'''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelConfig', request='ModelSet', version=1, params=_params)
- _params['config'] = config
+ msg = dict(type='Pinger',
+ request='Stop',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def ModelUnset(self, keys):
+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):
'''
- keys : typing.Sequence<+T_co>[str]
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ProxyConfigResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelConfig', request='ModelUnset', version=1, params=_params)
- _params['keys'] = keys
+ msg = dict(type='ProxyUpdater',
+ request='ProxyConfig',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringResult)
- async def SLALevel(self):
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
+ # map input types to rpc msg
+ _params = dict()
+ 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):
+ '''
+
+ Returns -> typing.Union[typing.Sequence[~RelationLifeSuspendedStatusChange], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelConfig', request='SLALevel', version=1, params=_params)
+ msg = dict(type='RelationStatusWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
- async def SetSLALevel(self, creds, level):
+ async def Stop(self):
'''
- creds : typing.Sequence<+T_co>[int]
- level : str
+
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelConfig', request='SetSLALevel', version=1, params=_params)
- _params['creds'] = creds
- _params['level'] = level
+ msg = dict(type='RelationStatusWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class NotifyWatcherFacade(Type):
- name = 'NotifyWatcher'
+class RelationUnitsWatcherFacade(Type):
+ name = 'RelationUnitsWatcher'
version = 1
- schema = {'properties': {'Next': {'type': 'object'}, 'Stop': {'type': 'object'}},
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'RelationUnitsChange': {'additionalProperties': False,
+ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+ 'type': 'object'},
+ 'departed': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['changed'],
+ 'type': 'object'},
+ 'RelationUnitsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id',
+ 'changes'],
+ 'type': 'object'},
+ 'UnitSettings': {'additionalProperties': False,
+ 'properties': {'version': {'type': 'integer'}},
+ 'required': ['version'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(None)
+ @ReturnMapping(RelationUnitsWatchResult)
async def Next(self):
'''
- Returns -> None
+ Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='NotifyWatcher', request='Next', version=1, params=_params)
+ msg = dict(type='RelationUnitsWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='NotifyWatcher', request='Stop', version=1, params=_params)
+ msg = dict(type='RelationUnitsWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
-class PayloadsFacade(Type):
- name = 'Payloads'
+class RemoteApplicationWatcherFacade(Type):
+ name = 'RemoteApplicationWatcher'
version = 1
- schema = {'definitions': {'Payload': {'additionalProperties': False,
- 'properties': {'class': {'type': 'string'},
- 'id': {'type': 'string'},
- 'labels': {'items': {'type': 'string'},
- 'type': 'array'},
- 'machine': {'type': 'string'},
- 'status': {'type': 'string'},
- 'type': {'type': 'string'},
- 'unit': {'type': 'string'}},
- 'required': ['class',
- 'type',
- 'id',
- 'status',
- 'labels',
- 'unit',
- 'machine'],
- 'type': 'object'},
- 'PayloadListArgs': {'additionalProperties': False,
- 'properties': {'patterns': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['patterns'],
- 'type': 'object'},
- 'PayloadListResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/Payload'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/PayloadListArgs'},
- 'Result': {'$ref': '#/definitions/PayloadListResults'}},
- 'type': 'object'}},
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'RemoteApplicationChange': {'additionalProperties': False,
+ 'properties': {'application-tag': {'type': 'string'},
+ 'life': {'type': 'string'},
+ 'relations': {'$ref': '#/definitions/RemoteRelationsChange'}},
+ 'required': ['application-tag',
+ 'life',
+ 'relations'],
+ 'type': 'object'},
+ 'RemoteApplicationWatchResult': {'additionalProperties': False,
+ 'properties': {'change': {'$ref': '#/definitions/RemoteApplicationChange'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'id': {'type': 'string'}},
+ 'required': ['id'],
+ 'type': 'object'},
+ 'RemoteEntityId': {'additionalProperties': False,
+ 'properties': {'model-uuid': {'type': 'string'},
+ 'token': {'type': 'string'}},
+ 'required': ['model-uuid', 'token'],
+ 'type': 'object'},
+ 'RemoteRelationChange': {'additionalProperties': False,
+ 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
+ 'type': 'object'},
+ 'departed-units': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'id': {'type': 'integer'},
+ 'life': {'type': 'string'}},
+ 'required': ['id', 'life'],
+ 'type': 'object'},
+ 'RemoteRelationUnitChange': {'additionalProperties': False,
+ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
+ 'required': ['unit-id'],
+ 'type': 'object'},
+ 'RemoteRelationsChange': {'additionalProperties': False,
+ 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
+ 'type': 'array'},
+ 'initial': {'type': 'boolean'},
+ 'removed': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['initial'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteApplicationWatchResult'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(PayloadListResults)
- async def List(self, patterns):
+ @ReturnMapping(RemoteApplicationWatchResult)
+ async def Next(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('RemoteApplicationChange'), _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteApplicationWatcher',
+ request='Next',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Stop(self):
'''
- patterns : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~Payload]<~Payload>
+
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Payloads', request='List', version=1, params=_params)
- _params['patterns'] = patterns
+ msg = dict(type='RemoteApplicationWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class PayloadsHookContextFacade(Type):
- name = 'PayloadsHookContext'
+class RemoteRelationsFacade(Type):
+ name = 'RemoteRelations'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
+ schema = {'definitions': {'ControllerAPIInfoResult': {'additionalProperties': False,
+ 'properties': {'addresses': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'cacert': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['addresses',
+ 'cacert'],
+ 'type': 'object'},
+ 'ControllerAPIInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ControllerAPIInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'ControllerConfigResult': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
'required': ['entities'],
'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'},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'LookUpPayloadArg': {'additionalProperties': False,
- 'properties': {'id': {'type': 'string'},
- 'name': {'type': 'string'}},
- 'required': ['name', 'id'],
- 'type': 'object'},
- 'LookUpPayloadArgs': {'additionalProperties': False,
- 'properties': {'args': {'items': {'$ref': '#/definitions/LookUpPayloadArg'},
- 'type': 'array'}},
- 'required': ['args'],
- 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'GetTokenArg': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'GetTokenArgs': {'additionalProperties': False,
+ 'properties': {'Args': {'items': {'$ref': '#/definitions/GetTokenArg'},
+ 'type': 'array'}},
+ 'required': ['Args'],
+ 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'Payload': {'additionalProperties': False,
- 'properties': {'class': {'type': 'string'},
- 'id': {'type': 'string'},
- 'labels': {'items': {'type': 'string'},
- 'type': 'array'},
- 'machine': {'type': 'string'},
- 'status': {'type': 'string'},
- 'type': {'type': 'string'},
- 'unit': {'type': 'string'}},
- 'required': ['class',
- 'type',
- 'id',
- 'status',
- 'labels',
- 'unit',
- 'machine'],
- 'type': 'object'},
- 'PayloadResult': {'additionalProperties': False,
- 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
- 'error': {'$ref': '#/definitions/Error'},
- 'not-found': {'type': 'boolean'},
- 'payload': {'$ref': '#/definitions/Payload'}},
- 'required': ['Entity',
- 'payload',
- 'not-found'],
+ 'RelationUnit': {'additionalProperties': False,
+ 'properties': {'relation': {'type': 'string'},
+ 'unit': {'type': 'string'}},
+ 'required': ['relation', 'unit'],
+ 'type': 'object'},
+ 'RelationUnits': {'additionalProperties': False,
+ 'properties': {'relation-units': {'items': {'$ref': '#/definitions/RelationUnit'},
+ 'type': 'array'}},
+ 'required': ['relation-units'],
'type': 'object'},
- 'PayloadResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/PayloadResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'SetPayloadStatusArg': {'additionalProperties': False,
- 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
- 'status': {'type': 'string'}},
- 'required': ['Entity', 'status'],
+ 'RelationUnitsChange': {'additionalProperties': False,
+ 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
+ 'type': 'object'},
+ 'departed': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['changed'],
'type': 'object'},
- 'SetPayloadStatusArgs': {'additionalProperties': False,
- 'properties': {'args': {'items': {'$ref': '#/definitions/SetPayloadStatusArg'},
- 'type': 'array'}},
- 'required': ['args'],
+ 'RelationUnitsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id',
+ 'changes'],
+ 'type': 'object'},
+ 'RelationUnitsWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/RelationUnitsWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'RemoteApplication': {'additionalProperties': False,
+ 'properties': {'is-consumer-proxy': {'type': 'boolean'},
+ 'life': {'type': 'string'},
+ 'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'model-uuid': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'offer-uuid': {'type': 'string'},
+ 'status': {'type': 'string'}},
+ 'required': ['name',
+ 'offer-uuid',
+ 'model-uuid',
+ 'is-consumer-proxy'],
+ 'type': 'object'},
+ 'RemoteApplicationResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/RemoteApplication'}},
+ 'type': 'object'},
+ 'RemoteApplicationResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'RemoteEndpoint': {'additionalProperties': False,
+ 'properties': {'interface': {'type': 'string'},
+ 'limit': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'role': {'type': 'string'}},
+ 'required': ['name',
+ 'role',
+ 'interface',
+ 'limit'],
+ 'type': 'object'},
+ 'RemoteEntityTokenArg': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'},
+ 'token': {'type': 'string'}},
+ 'required': ['tag'],
'type': 'object'},
- 'TrackPayloadArgs': {'additionalProperties': False,
- 'properties': {'payloads': {'items': {'$ref': '#/definitions/Payload'},
- 'type': 'array'}},
- 'required': ['payloads'],
- 'type': 'object'}},
- 'properties': {'List': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'},
- 'LookUp': {'properties': {'Params': {'$ref': '#/definitions/LookUpPayloadArgs'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'},
- 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetPayloadStatusArgs'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
+ 'RemoteEntityTokenArgs': {'additionalProperties': False,
+ 'properties': {'Args': {'items': {'$ref': '#/definitions/RemoteEntityTokenArg'},
+ 'type': 'array'}},
+ 'required': ['Args'],
+ 'type': 'object'},
+ 'RemoteRelation': {'additionalProperties': False,
+ 'properties': {'application-name': {'type': 'string'},
+ 'endpoint': {'$ref': '#/definitions/RemoteEndpoint'},
+ 'id': {'type': 'integer'},
+ 'key': {'type': 'string'},
+ 'life': {'type': 'string'},
+ 'remote-application-name': {'type': 'string'},
+ 'remote-endpoint-name': {'type': 'string'},
+ 'source-model-uuid': {'type': 'string'},
+ 'suspended': {'type': 'boolean'}},
+ 'required': ['life',
+ 'suspended',
+ 'id',
+ 'key',
+ 'application-name',
+ 'endpoint',
+ 'remote-application-name',
+ 'remote-endpoint-name',
+ 'source-model-uuid'],
+ 'type': 'object'},
+ 'RemoteRelationChangeEvent': {'additionalProperties': False,
+ 'properties': {'application-token': {'type': 'string'},
+ 'changed-units': {'items': {'$ref': '#/definitions/RemoteRelationUnitChange'},
+ 'type': 'array'},
+ 'departed-units': {'items': {'type': 'integer'},
+ 'type': 'array'},
+ 'force-cleanup': {'type': 'boolean'},
+ 'life': {'type': 'string'},
+ 'macaroons': {'items': {'$ref': '#/definitions/Macaroon'},
+ 'type': 'array'},
+ 'relation-token': {'type': 'string'},
+ 'suspended': {'type': 'boolean'},
+ 'suspended-reason': {'type': 'string'}},
+ 'required': ['relation-token',
+ 'application-token',
+ 'life'],
+ 'type': 'object'},
+ 'RemoteRelationResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/RemoteRelation'}},
+ 'type': 'object'},
+ 'RemoteRelationResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoteRelationResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'RemoteRelationUnitChange': {'additionalProperties': False,
+ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'unit-id': {'type': 'integer'}},
+ 'required': ['unit-id'],
+ 'type': 'object'},
+ 'RemoteRelationsChanges': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/RemoteRelationChangeEvent'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'SetStatus': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'SettingsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'settings': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'}},
+ 'required': ['settings'],
+ 'type': 'object'},
+ 'SettingsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/SettingsResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'StringsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
+ 'type': 'object'},
+ 'StringsWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'TokenResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'token': {'type': 'string'}},
+ 'type': 'object'},
+ 'TokenResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/TokenResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'UnitSettings': {'additionalProperties': False,
+ 'properties': {'version': {'type': 'integer'}},
+ 'required': ['version'],
+ 'type': 'object'}},
+ 'properties': {'ConsumeRemoteRelationChanges': {'properties': {'Params': {'$ref': '#/definitions/RemoteRelationsChanges'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'ControllerAPIInfoForModels': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ControllerAPIInfoResults'}},
+ 'type': 'object'},
+ 'ControllerConfig': {'properties': {'Result': {'$ref': '#/definitions/ControllerConfigResult'}},
+ 'type': 'object'},
+ 'ExportEntities': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/TokenResults'}},
+ 'type': 'object'},
+ 'GetTokens': {'properties': {'Params': {'$ref': '#/definitions/GetTokenArgs'},
+ 'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
- 'Track': {'properties': {'Params': {'$ref': '#/definitions/TrackPayloadArgs'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'},
- 'Untrack': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/PayloadResults'}},
- 'type': 'object'}},
+ 'ImportRemoteEntities': {'properties': {'Params': {'$ref': '#/definitions/RemoteEntityTokenArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'RelationUnitSettings': {'properties': {'Params': {'$ref': '#/definitions/RelationUnits'},
+ 'Result': {'$ref': '#/definitions/SettingsResults'}},
+ 'type': 'object'},
+ 'Relations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/RemoteRelationResults'}},
+ 'type': 'object'},
+ 'RemoteApplications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/RemoteApplicationResults'}},
+ 'type': 'object'},
+ 'SaveMacaroons': {'properties': {'Params': {'$ref': '#/definitions/EntityMacaroonArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SetRemoteApplicationsStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'WatchLocalRelationUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/RelationUnitsWatchResults'}},
+ 'type': 'object'},
+ 'WatchRemoteApplicationRelations': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/StringsWatchResults'}},
+ 'type': 'object'},
+ 'WatchRemoteApplications': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+ 'type': 'object'},
+ 'WatchRemoteRelations': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(PayloadResults)
- async def List(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def ConsumeRemoteRelationChanges(self, changes):
+ '''
+ changes : typing.Sequence[~RemoteRelationChangeEvent]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='ConsumeRemoteRelationChanges',
+ version=1,
+ params=_params)
+ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ControllerAPIInfoResults)
+ async def ControllerAPIInfoForModels(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ControllerAPIInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='ControllerAPIInfoForModels',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ControllerConfigResult)
+ async def ControllerConfig(self):
+ '''
+
+ Returns -> typing.Mapping[str, typing.Any]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='ControllerConfig',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(TokenResults)
+ async def ExportEntities(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~TokenResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='PayloadsHookContext', request='List', version=1, params=_params)
+ msg = dict(type='RemoteRelations',
+ request='ExportEntities',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(PayloadResults)
- async def LookUp(self, args):
+ @ReturnMapping(StringResults)
+ async def GetTokens(self, args):
'''
- args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ args : typing.Sequence[~GetTokenArg]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='PayloadsHookContext', request='LookUp', version=1, params=_params)
- _params['args'] = args
+ msg = dict(type='RemoteRelations',
+ request='GetTokens',
+ version=1,
+ params=_params)
+ _params['Args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(PayloadResults)
- async def SetStatus(self, args):
+ @ReturnMapping(ErrorResults)
+ async def ImportRemoteEntities(self, args):
'''
- args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ args : typing.Sequence[~RemoteEntityTokenArg]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='PayloadsHookContext', request='SetStatus', version=1, params=_params)
- _params['args'] = args
+ msg = dict(type='RemoteRelations',
+ request='ImportRemoteEntities',
+ version=1,
+ params=_params)
+ _params['Args'] = args
reply = await self.rpc(msg)
return reply
- @ReturnMapping(PayloadResults)
- async def Track(self, payloads):
+ @ReturnMapping(SettingsResults)
+ async def RelationUnitSettings(self, relation_units):
'''
- payloads : typing.Sequence<+T_co>[~Payload]<~Payload>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='PayloadsHookContext', request='Track', version=1, params=_params)
- _params['payloads'] = payloads
+ msg = dict(type='RemoteRelations',
+ request='RelationUnitSettings',
+ version=1,
+ params=_params)
+ _params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
- @ReturnMapping(PayloadResults)
- async def Untrack(self, entities):
+ @ReturnMapping(RemoteRelationResults)
+ async def Relations(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~RemoteRelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='PayloadsHookContext', request='Untrack', version=1, params=_params)
+ msg = dict(type='RemoteRelations',
+ request='Relations',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class PingerFacade(Type):
- name = 'Pinger'
+ @ReturnMapping(RemoteApplicationResults)
+ async def RemoteApplications(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~RemoteApplicationResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='RemoteApplications',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SaveMacaroons(self, args):
+ '''
+ args : typing.Sequence[~EntityMacaroonArg]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='SaveMacaroons',
+ version=1,
+ params=_params)
+ _params['Args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetRemoteApplicationsStatus(self, entities):
+ '''
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='SetRemoteApplicationsStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(RelationUnitsWatchResults)
+ async def WatchLocalRelationUnits(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~RelationUnitsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='WatchLocalRelationUnits',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResults)
+ async def WatchRemoteApplicationRelations(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='WatchRemoteApplicationRelations',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResult)
+ async def WatchRemoteApplications(self):
+ '''
+
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='WatchRemoteApplications',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringsWatchResult)
+ async def WatchRemoteRelations(self):
+ '''
+
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='RemoteRelations',
+ request='WatchRemoteRelations',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class RemoteRelationsWatcherFacade(Type):
+ name = 'RemoteRelationsWatcher'
version = 1
- schema = {'properties': {'Ping': {'type': 'object'}, 'Stop': {'type': 'object'}},
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'RemoteEntityId': {'additionalProperties': False,
+ 'properties': {'model-uuid': {'type': 'string'},
+ 'token': {'type': 'string'}},
+ 'required': ['model-uuid', 'token'],
+ 'type': 'object'},
+ 'RemoteRelationChange': {'additionalProperties': False,
+ 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
+ 'type': 'object'},
+ 'departed-units': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'id': {'type': 'integer'},
+ 'life': {'type': 'string'}},
+ 'required': ['id', 'life'],
+ 'type': 'object'},
+ 'RemoteRelationUnitChange': {'additionalProperties': False,
+ 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
+ 'required': ['unit-id'],
+ 'type': 'object'},
+ 'RemoteRelationsChange': {'additionalProperties': False,
+ 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
+ 'type': 'array'},
+ 'initial': {'type': 'boolean'},
+ 'removed': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['initial'],
+ 'type': 'object'},
+ 'RemoteRelationsWatchResult': {'additionalProperties': False,
+ 'properties': {'RemoteRelationsWatcherId': {'type': 'string'},
+ 'change': {'$ref': '#/definitions/RemoteRelationsChange'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['RemoteRelationsWatcherId'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteRelationsWatchResult'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(None)
- async def Ping(self):
+ @ReturnMapping(RemoteRelationsWatchResult)
+ async def Next(self):
'''
- Returns -> None
+ Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Pinger', request='Ping', version=1, params=_params)
+ msg = dict(type='RemoteRelationsWatcher',
+ request='Next',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Pinger', request='Stop', version=1, params=_params)
+ msg = dict(type='RemoteRelationsWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
-class ProxyUpdaterFacade(Type):
- name = 'ProxyUpdater'
+class ResourcesFacade(Type):
+ name = 'Resources'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
+ schema = {'definitions': {'AddCharmWithAuthorization': {'additionalProperties': False,
+ 'properties': {'channel': {'type': 'string'},
+ 'force': {'type': 'boolean'},
+ 'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'url': {'type': 'string'}},
+ 'required': ['url',
+ 'channel',
+ 'macaroon',
+ 'force'],
+ 'type': 'object'},
+ 'AddPendingResourcesArgs': {'additionalProperties': False,
+ 'properties': {'AddCharmWithAuthorization': {'$ref': '#/definitions/AddCharmWithAuthorization'},
+ 'Entity': {'$ref': '#/definitions/Entity'},
+ 'resources': {'items': {'$ref': '#/definitions/CharmResource'},
+ 'type': 'array'}},
+ 'required': ['Entity',
+ 'AddCharmWithAuthorization',
+ 'resources'],
+ 'type': 'object'},
+ 'AddPendingResourcesResult': {'additionalProperties': False,
+ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+ 'pending-ids': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['ErrorResult',
+ 'pending-ids'],
+ 'type': 'object'},
+ 'CharmResource': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'fingerprint': {'items': {'type': 'integer'},
+ 'type': 'array'},
+ 'name': {'type': 'string'},
+ 'origin': {'type': 'string'},
+ 'path': {'type': 'string'},
+ 'revision': {'type': 'integer'},
+ 'size': {'type': 'integer'},
+ 'type': {'type': 'string'}},
+ 'required': ['name',
+ 'type',
+ 'path',
+ 'origin',
+ 'revision',
+ 'fingerprint',
+ 'size'],
+ 'type': 'object'},
'Entity': {'additionalProperties': False,
'properties': {'tag': {'type': 'string'}},
'required': ['tag'],
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'NotifyWatchResult': {'additionalProperties': False,
- 'properties': {'NotifyWatcherId': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['NotifyWatcherId'],
- 'type': 'object'},
- 'NotifyWatchResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ListResourcesArgs': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'type': 'array'}},
- 'required': ['results'],
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'Resource': {'additionalProperties': False,
+ 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'},
+ 'application': {'type': 'string'},
+ 'id': {'type': 'string'},
+ 'pending-id': {'type': 'string'},
+ 'timestamp': {'format': 'date-time',
+ 'type': 'string'},
+ 'username': {'type': 'string'}},
+ 'required': ['CharmResource',
+ 'id',
+ 'pending-id',
+ 'application',
+ 'username',
+ 'timestamp'],
+ 'type': 'object'},
+ 'ResourcesResult': {'additionalProperties': False,
+ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+ 'charm-store-resources': {'items': {'$ref': '#/definitions/CharmResource'},
+ 'type': 'array'},
+ 'resources': {'items': {'$ref': '#/definitions/Resource'},
+ 'type': 'array'},
+ 'unit-resources': {'items': {'$ref': '#/definitions/UnitResources'},
+ 'type': 'array'}},
+ 'required': ['ErrorResult',
+ 'resources',
+ 'charm-store-resources',
+ 'unit-resources'],
+ 'type': 'object'},
+ 'ResourcesResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ResourcesResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'UnitResources': {'additionalProperties': False,
+ 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
+ 'download-progress': {'patternProperties': {'.*': {'type': 'integer'}},
+ 'type': 'object'},
+ 'resources': {'items': {'$ref': '#/definitions/Resource'},
+ 'type': 'array'}},
+ 'required': ['Entity',
+ 'resources',
+ 'download-progress'],
+ 'type': 'object'}},
+ 'properties': {'AddPendingResources': {'properties': {'Params': {'$ref': '#/definitions/AddPendingResourcesArgs'},
+ 'Result': {'$ref': '#/definitions/AddPendingResourcesResult'}},
'type': 'object'},
- 'ProxyConfig': {'additionalProperties': False,
- 'properties': {'ftp': {'type': 'string'},
- 'http': {'type': 'string'},
- 'https': {'type': 'string'},
- 'no-proxy': {'type': 'string'}},
- 'required': ['http',
- 'https',
- 'ftp',
- 'no-proxy'],
- 'type': 'object'},
- 'ProxyConfigResult': {'additionalProperties': False,
- 'properties': {'apt-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
- 'error': {'$ref': '#/definitions/Error'},
- 'proxy-settings': {'$ref': '#/definitions/ProxyConfig'}},
- 'required': ['proxy-settings',
- 'apt-proxy-settings'],
- 'type': 'object'},
- 'ProxyConfigResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ProxyConfigResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'ProxyConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ProxyConfigResults'}},
- 'type': 'object'},
- 'WatchForProxyConfigAndAPIHostPortChanges': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ 'ListResources': {'properties': {'Params': {'$ref': '#/definitions/ListResourcesArgs'},
+ 'Result': {'$ref': '#/definitions/ResourcesResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ProxyConfigResults)
- async def ProxyConfig(self, entities):
+ @ReturnMapping(AddPendingResourcesResult)
+ async def AddPendingResources(self, addcharmwithauthorization, entity, resources):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult>
+ addcharmwithauthorization : AddCharmWithAuthorization
+ entity : Entity
+ resources : typing.Sequence[~CharmResource]
+ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ProxyUpdater', request='ProxyConfig', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='Resources',
+ request='AddPendingResources',
+ version=1,
+ params=_params)
+ _params['AddCharmWithAuthorization'] = addcharmwithauthorization
+ _params['Entity'] = entity
+ _params['Resources'] = resources
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResults)
- async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
+ @ReturnMapping(ResourcesResults)
+ async def ListResources(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ResourcesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ProxyUpdater', request='WatchForProxyConfigAndAPIHostPortChanges', version=1, params=_params)
+ msg = dict(type='Resources',
+ request='ListResources',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class RelationUnitsWatcherFacade(Type):
- name = 'RelationUnitsWatcher'
+class ResourcesHookContextFacade(Type):
+ name = 'ResourcesHookContext'
version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'CharmResource': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'fingerprint': {'items': {'type': 'integer'},
+ 'type': 'array'},
+ 'name': {'type': 'string'},
+ 'origin': {'type': 'string'},
+ 'path': {'type': 'string'},
+ 'revision': {'type': 'integer'},
+ 'size': {'type': 'integer'},
+ 'type': {'type': 'string'}},
+ 'required': ['name',
+ 'type',
+ 'path',
+ 'origin',
+ 'revision',
+ 'fingerprint',
+ 'size'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ListUnitResourcesArgs': {'additionalProperties': False,
+ 'properties': {'resource-names': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['resource-names'],
+ 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'RelationUnitsChange': {'additionalProperties': False,
- 'properties': {'changed': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitSettings'}},
- 'type': 'object'},
- 'departed': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['changed'],
- 'type': 'object'},
- 'RelationUnitsWatchResult': {'additionalProperties': False,
- 'properties': {'changes': {'$ref': '#/definitions/RelationUnitsChange'},
- 'error': {'$ref': '#/definitions/Error'},
- 'watcher-id': {'type': 'string'}},
- 'required': ['watcher-id',
- 'changes'],
- 'type': 'object'},
- 'UnitSettings': {'additionalProperties': False,
- 'properties': {'version': {'type': 'integer'}},
- 'required': ['version'],
- 'type': 'object'}},
- 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RelationUnitsWatchResult'}},
- 'type': 'object'},
- 'Stop': {'type': 'object'}},
+ 'Resource': {'additionalProperties': False,
+ 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'},
+ 'application': {'type': 'string'},
+ 'id': {'type': 'string'},
+ 'pending-id': {'type': 'string'},
+ 'timestamp': {'format': 'date-time',
+ 'type': 'string'},
+ 'username': {'type': 'string'}},
+ 'required': ['CharmResource',
+ 'id',
+ 'pending-id',
+ 'application',
+ 'username',
+ 'timestamp'],
+ 'type': 'object'},
+ 'UnitResourceResult': {'additionalProperties': False,
+ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+ 'resource': {'$ref': '#/definitions/Resource'}},
+ 'required': ['ErrorResult', 'resource'],
+ 'type': 'object'},
+ 'UnitResourcesResult': {'additionalProperties': False,
+ 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
+ 'resources': {'items': {'$ref': '#/definitions/UnitResourceResult'},
+ 'type': 'array'}},
+ 'required': ['ErrorResult',
+ 'resources'],
+ 'type': 'object'}},
+ 'properties': {'GetResourceInfo': {'properties': {'Params': {'$ref': '#/definitions/ListUnitResourcesArgs'},
+ 'Result': {'$ref': '#/definitions/UnitResourcesResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(RelationUnitsWatchResult)
- async def Next(self):
- '''
-
- Returns -> typing.Union[_ForwardRef('RelationUnitsChange'), _ForwardRef('Error'), str]
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='RelationUnitsWatcher', request='Next', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(None)
- async def Stop(self):
+ @ReturnMapping(UnitResourcesResult)
+ async def GetResourceInfo(self, resource_names):
'''
-
- Returns -> None
+ resource_names : typing.Sequence[str]
+ Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence[~UnitResourceResult]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RelationUnitsWatcher', request='Stop', version=1, params=_params)
-
+ msg = dict(type='ResourcesHookContext',
+ request='GetResourceInfo',
+ version=1,
+ params=_params)
+ _params['resource-names'] = resource_names
reply = await self.rpc(msg)
return reply
-class RemoteApplicationWatcherFacade(Type):
- name = 'RemoteApplicationWatcher'
+class RetryStrategyFacade(Type):
+ name = 'RetryStrategy'
version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'RemoteApplicationChange': {'additionalProperties': False,
- 'properties': {'application-tag': {'type': 'string'},
- 'life': {'type': 'string'},
- 'relations': {'$ref': '#/definitions/RemoteRelationsChange'}},
- 'required': ['application-tag',
- 'life',
- 'relations'],
- 'type': 'object'},
- 'RemoteApplicationWatchResult': {'additionalProperties': False,
- 'properties': {'change': {'$ref': '#/definitions/RemoteApplicationChange'},
- 'error': {'$ref': '#/definitions/Error'},
- 'id': {'type': 'string'}},
- 'required': ['id'],
- 'type': 'object'},
- 'RemoteEntityId': {'additionalProperties': False,
- 'properties': {'model-uuid': {'type': 'string'},
- 'token': {'type': 'string'}},
- 'required': ['model-uuid', 'token'],
- 'type': 'object'},
- 'RemoteRelationChange': {'additionalProperties': False,
- 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
- 'type': 'object'},
- 'departed-units': {'items': {'type': 'string'},
- 'type': 'array'},
- 'id': {'type': 'integer'},
- 'life': {'type': 'string'}},
- 'required': ['id', 'life'],
- 'type': 'object'},
- 'RemoteRelationUnitChange': {'additionalProperties': False,
- 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
- 'required': ['unit-id'],
- 'type': 'object'},
- 'RemoteRelationsChange': {'additionalProperties': False,
- 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
- 'type': 'array'},
- 'initial': {'type': 'boolean'},
- 'removed': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['initial'],
- 'type': 'object'}},
- 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteApplicationWatchResult'}},
- 'type': 'object'},
- 'Stop': {'type': 'object'}},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'NotifyWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'RetryStrategy': {'additionalProperties': False,
+ 'properties': {'jitter-retry-time': {'type': 'boolean'},
+ 'max-retry-time': {'type': 'integer'},
+ 'min-retry-time': {'type': 'integer'},
+ 'retry-time-factor': {'type': 'integer'},
+ 'should-retry': {'type': 'boolean'}},
+ 'required': ['should-retry',
+ 'min-retry-time',
+ 'max-retry-time',
+ 'jitter-retry-time',
+ 'retry-time-factor'],
+ 'type': 'object'},
+ 'RetryStrategyResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/RetryStrategy'}},
+ 'type': 'object'},
+ 'RetryStrategyResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/RetryStrategyResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'RetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/RetryStrategyResults'}},
+ 'type': 'object'},
+ 'WatchRetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(RemoteApplicationWatchResult)
- async def Next(self):
+ @ReturnMapping(RetryStrategyResults)
+ async def RetryStrategy(self, entities):
'''
-
- Returns -> typing.Union[_ForwardRef('RemoteApplicationChange'), _ForwardRef('Error'), str]
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~RetryStrategyResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RemoteApplicationWatcher', request='Next', version=1, params=_params)
-
+ msg = dict(type='RetryStrategy',
+ request='RetryStrategy',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Stop(self):
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchRetryStrategy(self, entities):
'''
-
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RemoteApplicationWatcher', request='Stop', version=1, params=_params)
-
+ msg = dict(type='RetryStrategy',
+ request='WatchRetryStrategy',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class RemoteRelationsWatcherFacade(Type):
- name = 'RemoteRelationsWatcher'
+class SSHClientFacade(Type):
+ name = 'SSHClient'
version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'RemoteEntityId': {'additionalProperties': False,
- 'properties': {'model-uuid': {'type': 'string'},
- 'token': {'type': 'string'}},
- 'required': ['model-uuid', 'token'],
+ 'SSHAddressResult': {'additionalProperties': False,
+ 'properties': {'address': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'SSHAddressResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'SSHProxyResult': {'additionalProperties': False,
+ 'properties': {'use-proxy': {'type': 'boolean'}},
+ 'required': ['use-proxy'],
'type': 'object'},
- 'RemoteRelationChange': {'additionalProperties': False,
- 'properties': {'changed-units': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteRelationUnitChange'}},
- 'type': 'object'},
- 'departed-units': {'items': {'type': 'string'},
- 'type': 'array'},
- 'id': {'type': 'integer'},
- 'life': {'type': 'string'}},
- 'required': ['id', 'life'],
- 'type': 'object'},
- 'RemoteRelationUnitChange': {'additionalProperties': False,
- 'properties': {'settings': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'unit-id': {'$ref': '#/definitions/RemoteEntityId'}},
- 'required': ['unit-id'],
- 'type': 'object'},
- 'RemoteRelationsChange': {'additionalProperties': False,
- 'properties': {'changed': {'items': {'$ref': '#/definitions/RemoteRelationChange'},
- 'type': 'array'},
- 'initial': {'type': 'boolean'},
- 'removed': {'items': {'type': 'integer'},
- 'type': 'array'}},
- 'required': ['initial'],
- 'type': 'object'},
- 'RemoteRelationsWatchResult': {'additionalProperties': False,
- 'properties': {'RemoteRelationsWatcherId': {'type': 'string'},
- 'change': {'$ref': '#/definitions/RemoteRelationsChange'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'required': ['RemoteRelationsWatcherId'],
- 'type': 'object'}},
- 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/RemoteRelationsWatchResult'}},
- 'type': 'object'},
- 'Stop': {'type': 'object'}},
+ 'SSHPublicKeysResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'public-keys': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'SSHPublicKeysResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/SSHAddressResults'}},
+ 'type': 'object'},
+ 'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}},
+ 'type': 'object'},
+ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/SSHAddressResults'}},
+ 'type': 'object'},
+ 'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(RemoteRelationsWatchResult)
- async def Next(self):
+ @ReturnMapping(SSHAddressResults)
+ async def PrivateAddress(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHAddressResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='SSHClient',
+ request='PrivateAddress',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(SSHProxyResult)
+ async def Proxy(self):
'''
- Returns -> typing.Union[str, _ForwardRef('RemoteRelationsChange'), _ForwardRef('Error')]
+ Returns -> bool
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RemoteRelationsWatcher', request='Next', version=1, params=_params)
+ msg = dict(type='SSHClient',
+ request='Proxy',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Stop(self):
+ @ReturnMapping(SSHAddressResults)
+ async def PublicAddress(self, entities):
'''
-
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHAddressResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RemoteRelationsWatcher', request='Stop', version=1, params=_params)
+ msg = dict(type='SSHClient',
+ request='PublicAddress',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+ @ReturnMapping(SSHPublicKeysResults)
+ async def PublicKeys(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHPublicKeysResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='SSHClient',
+ request='PublicKeys',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class ResourcesFacade(Type):
- name = 'Resources'
- version = 1
- schema = {'definitions': {'AddCharmWithAuthorization': {'additionalProperties': False,
- 'properties': {'channel': {'type': 'string'},
- 'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'url': {'type': 'string'}},
- 'required': ['url',
- 'channel',
- 'macaroon'],
- 'type': 'object'},
- 'AddPendingResourcesArgs': {'additionalProperties': False,
- 'properties': {'AddCharmWithAuthorization': {'$ref': '#/definitions/AddCharmWithAuthorization'},
- 'Entity': {'$ref': '#/definitions/Entity'},
- 'resources': {'items': {'$ref': '#/definitions/CharmResource'},
- 'type': 'array'}},
- 'required': ['Entity',
- 'AddCharmWithAuthorization',
- 'resources'],
- 'type': 'object'},
- 'AddPendingResourcesResult': {'additionalProperties': False,
- 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
- 'pending-ids': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['ErrorResult',
- 'pending-ids'],
- 'type': 'object'},
- 'CharmResource': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'fingerprint': {'items': {'type': 'integer'},
- 'type': 'array'},
- 'name': {'type': 'string'},
- 'origin': {'type': 'string'},
- 'path': {'type': 'string'},
- 'revision': {'type': 'integer'},
- 'size': {'type': 'integer'},
- 'type': {'type': 'string'}},
- 'required': ['name',
- 'type',
- 'path',
- 'origin',
- 'revision',
- 'fingerprint',
- 'size'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ListResourcesArgs': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'Resource': {'additionalProperties': False,
- 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'},
- 'application': {'type': 'string'},
- 'id': {'type': 'string'},
- 'pending-id': {'type': 'string'},
- 'timestamp': {'format': 'date-time',
- 'type': 'string'},
- 'username': {'type': 'string'}},
- 'required': ['CharmResource',
- 'id',
- 'pending-id',
- 'application',
- 'username',
- 'timestamp'],
- 'type': 'object'},
- 'ResourcesResult': {'additionalProperties': False,
- 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
- 'charm-store-resources': {'items': {'$ref': '#/definitions/CharmResource'},
- 'type': 'array'},
- 'resources': {'items': {'$ref': '#/definitions/Resource'},
- 'type': 'array'},
- 'unit-resources': {'items': {'$ref': '#/definitions/UnitResources'},
- 'type': 'array'}},
- 'required': ['ErrorResult',
- 'resources',
- 'charm-store-resources',
- 'unit-resources'],
- 'type': 'object'},
- 'ResourcesResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ResourcesResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'UnitResources': {'additionalProperties': False,
- 'properties': {'Entity': {'$ref': '#/definitions/Entity'},
- 'download-progress': {'patternProperties': {'.*': {'type': 'integer'}},
- 'type': 'object'},
- 'resources': {'items': {'$ref': '#/definitions/Resource'},
- 'type': 'array'}},
- 'required': ['Entity',
- 'resources',
- 'download-progress'],
- 'type': 'object'}},
- 'properties': {'AddPendingResources': {'properties': {'Params': {'$ref': '#/definitions/AddPendingResourcesArgs'},
- 'Result': {'$ref': '#/definitions/AddPendingResourcesResult'}},
- 'type': 'object'},
- 'ListResources': {'properties': {'Params': {'$ref': '#/definitions/ListResourcesArgs'},
- 'Result': {'$ref': '#/definitions/ResourcesResults'}},
- 'type': 'object'}},
+class SingularFacade(Type):
+ name = 'Singular'
+ version = 1
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'SingularClaim': {'additionalProperties': False,
+ 'properties': {'controller-tag': {'type': 'string'},
+ 'duration': {'type': 'integer'},
+ 'model-tag': {'type': 'string'}},
+ 'required': ['model-tag',
+ 'controller-tag',
+ 'duration'],
+ 'type': 'object'},
+ 'SingularClaims': {'additionalProperties': False,
+ 'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'},
+ 'type': 'array'}},
+ 'required': ['claims'],
+ 'type': 'object'}},
+ 'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(AddPendingResourcesResult)
- async def AddPendingResources(self, addcharmwithauthorization, entity, resources):
+ @ReturnMapping(ErrorResults)
+ async def Claim(self, claims):
'''
- addcharmwithauthorization : AddCharmWithAuthorization
- entity : Entity
- resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
- Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[str]]
+ claims : typing.Sequence[~SingularClaim]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Resources', request='AddPendingResources', version=1, params=_params)
- _params['AddCharmWithAuthorization'] = addcharmwithauthorization
- _params['Entity'] = entity
- _params['Resources'] = resources
+ msg = dict(type='Singular',
+ request='Claim',
+ version=1,
+ params=_params)
+ _params['claims'] = claims
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ResourcesResults)
- async def ListResources(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def Wait(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Resources', request='ListResources', version=1, params=_params)
+ msg = dict(type='Singular',
+ request='Wait',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class ResourcesHookContextFacade(Type):
- name = 'ResourcesHookContext'
+class StringsWatcherFacade(Type):
+ name = 'StringsWatcher'
version = 1
- schema = {'definitions': {'CharmResource': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'fingerprint': {'items': {'type': 'integer'},
- 'type': 'array'},
- 'name': {'type': 'string'},
- 'origin': {'type': 'string'},
- 'path': {'type': 'string'},
- 'revision': {'type': 'integer'},
- 'size': {'type': 'integer'},
- 'type': {'type': 'string'}},
- 'required': ['name',
- 'type',
- 'path',
- 'origin',
- 'revision',
- 'fingerprint',
- 'size'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ListUnitResourcesArgs': {'additionalProperties': False,
- 'properties': {'resource-names': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['resource-names'],
- 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'Resource': {'additionalProperties': False,
- 'properties': {'CharmResource': {'$ref': '#/definitions/CharmResource'},
- 'application': {'type': 'string'},
- 'id': {'type': 'string'},
- 'pending-id': {'type': 'string'},
- 'timestamp': {'format': 'date-time',
- 'type': 'string'},
- 'username': {'type': 'string'}},
- 'required': ['CharmResource',
- 'id',
- 'pending-id',
- 'application',
- 'username',
- 'timestamp'],
- 'type': 'object'},
- 'UnitResourceResult': {'additionalProperties': False,
- 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
- 'resource': {'$ref': '#/definitions/Resource'}},
- 'required': ['ErrorResult', 'resource'],
- 'type': 'object'},
- 'UnitResourcesResult': {'additionalProperties': False,
- 'properties': {'ErrorResult': {'$ref': '#/definitions/ErrorResult'},
- 'resources': {'items': {'$ref': '#/definitions/UnitResourceResult'},
- 'type': 'array'}},
- 'required': ['ErrorResult',
- 'resources'],
- 'type': 'object'}},
- 'properties': {'GetResourceInfo': {'properties': {'Params': {'$ref': '#/definitions/ListUnitResourcesArgs'},
- 'Result': {'$ref': '#/definitions/UnitResourcesResult'}},
- 'type': 'object'}},
+ 'StringsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
'type': 'object'}
- @ReturnMapping(UnitResourcesResult)
- async def GetResourceInfo(self, resource_names):
+ @ReturnMapping(StringsWatchResult)
+ async def Next(self):
'''
- resource_names : typing.Sequence<+T_co>[str]
- Returns -> typing.Union[_ForwardRef('ErrorResult'), typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>]
+
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ResourcesHookContext', request='GetResourceInfo', version=1, params=_params)
- _params['resource-names'] = resource_names
+ msg = dict(type='StringsWatcher',
+ request='Next',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class RetryStrategyFacade(Type):
- name = 'RetryStrategy'
+ @ReturnMapping(None)
+ async def Stop(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='StringsWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class UndertakerFacade(Type):
+ name = 'Undertaker'
version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
+ schema = {'definitions': {'EntityStatusArgs': {'additionalProperties': False,
+ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'info': {'type': 'string'},
+ 'status': {'type': 'string'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag',
+ 'status',
+ 'info',
+ 'data'],
+ 'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'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'}},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
- 'RetryStrategy': {'additionalProperties': False,
- 'properties': {'jitter-retry-time': {'type': 'boolean'},
- 'max-retry-time': {'type': 'integer'},
- 'min-retry-time': {'type': 'integer'},
- 'retry-time-factor': {'type': 'integer'},
- 'should-retry': {'type': 'boolean'}},
- 'required': ['should-retry',
- 'min-retry-time',
- 'max-retry-time',
- 'jitter-retry-time',
- 'retry-time-factor'],
- 'type': 'object'},
- 'RetryStrategyResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'$ref': '#/definitions/RetryStrategy'}},
+ 'SetStatus': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'UndertakerModelInfo': {'additionalProperties': False,
+ 'properties': {'global-name': {'type': 'string'},
+ 'is-system': {'type': 'boolean'},
+ 'life': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'uuid': {'type': 'string'}},
+ 'required': ['uuid',
+ 'name',
+ 'global-name',
+ 'is-system',
+ 'life'],
'type': 'object'},
- 'RetryStrategyResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/RetryStrategyResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'RetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/RetryStrategyResults'}},
- 'type': 'object'},
- 'WatchRetryStrategy': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ 'UndertakerModelInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/UndertakerModelInfo'}},
+ 'required': ['result'],
+ 'type': 'object'}},
+ 'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
+ 'type': 'object'},
+ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/UndertakerModelInfoResult'}},
+ 'type': 'object'},
+ 'ProcessDyingModel': {'type': 'object'},
+ 'RemoveModel': {'type': 'object'},
+ 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(RetryStrategyResults)
- async def RetryStrategy(self, entities):
+ @ReturnMapping(ModelConfigResult)
+ async def ModelConfig(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
+
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RetryStrategy', request='RetryStrategy', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='Undertaker',
+ request='ModelConfig',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResults)
- async def WatchRetryStrategy(self, entities):
+ @ReturnMapping(UndertakerModelInfoResult)
+ async def ModelInfo(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+
+ Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='RetryStrategy', request='WatchRetryStrategy', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='Undertaker',
+ request='ModelInfo',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
-class SSHClientFacade(Type):
- name = 'SSHClient'
- version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'SSHAddressResult': {'additionalProperties': False,
- 'properties': {'address': {'type': 'string'},
- 'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'SSHAddressResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/SSHAddressResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'SSHProxyResult': {'additionalProperties': False,
- 'properties': {'use-proxy': {'type': 'boolean'}},
- 'required': ['use-proxy'],
- 'type': 'object'},
- 'SSHPublicKeysResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'public-keys': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'type': 'object'},
- 'SSHPublicKeysResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/SSHPublicKeysResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'}},
- 'properties': {'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/SSHAddressResults'}},
- 'type': 'object'},
- 'Proxy': {'properties': {'Result': {'$ref': '#/definitions/SSHProxyResult'}},
- 'type': 'object'},
- 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/SSHAddressResults'}},
- 'type': 'object'},
- 'PublicKeys': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/SSHPublicKeysResults'}},
- 'type': 'object'}},
- 'type': 'object'}
-
-
- @ReturnMapping(SSHAddressResults)
- async def PrivateAddress(self, entities):
+ @ReturnMapping(None)
+ async def ProcessDyingModel(self):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PrivateAddress', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='Undertaker',
+ request='ProcessDyingModel',
+ version=1,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(SSHProxyResult)
- async def Proxy(self):
+ @ReturnMapping(None)
+ async def RemoveModel(self):
'''
- Returns -> bool
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='Proxy', version=1, params=_params)
+ msg = dict(type='Undertaker',
+ request='RemoveModel',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(SSHAddressResults)
- async def PublicAddress(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def SetStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PublicAddress', version=1, params=_params)
+ msg = dict(type='Undertaker',
+ request='SetStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(SSHPublicKeysResults)
- async def PublicKeys(self, entities):
+ @ReturnMapping(ErrorResults)
+ async def UpdateStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PublicKeys', version=1, params=_params)
+ msg = dict(type='Undertaker',
+ request='UpdateStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class SingularFacade(Type):
- name = 'Singular'
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchModelResources(self):
+ '''
+
+ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Undertaker',
+ request='WatchModelResources',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class UnitAssignerFacade(Type):
+ name = 'UnitAssigner'
version = 1
schema = {'definitions': {'Entities': {'additionalProperties': False,
'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
'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'},
'required': ['results'],
'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'SingularClaim': {'additionalProperties': False,
- 'properties': {'controller-tag': {'type': 'string'},
- 'duration': {'type': 'integer'},
- 'model-tag': {'type': 'string'}},
- 'required': ['model-tag',
- 'controller-tag',
- 'duration'],
+ 'SetStatus': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'StringsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
+ 'type': 'object'}},
+ 'properties': {'AssignUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
- 'SingularClaims': {'additionalProperties': False,
- 'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'},
- 'type': 'array'}},
- 'required': ['claims'],
- 'type': 'object'}},
- 'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'}},
+ 'WatchUnitAssignments': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
+ 'type': 'object'}},
'type': 'object'}
@ReturnMapping(ErrorResults)
- async def Claim(self, claims):
+ async def AssignUnits(self, entities):
'''
- claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Singular', request='Claim', version=1, params=_params)
- _params['claims'] = claims
+ msg = dict(type='UnitAssigner',
+ request='AssignUnits',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def Wait(self, entities):
+ async def SetAgentStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Singular', request='Wait', version=1, params=_params)
+ msg = dict(type='UnitAssigner',
+ request='SetAgentStatus',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class StringsWatcherFacade(Type):
- name = 'StringsWatcher'
- version = 1
- schema = {'definitions': {'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'StringsWatchResult': {'additionalProperties': False,
- 'properties': {'changes': {'items': {'type': 'string'},
- 'type': 'array'},
- 'error': {'$ref': '#/definitions/Error'},
- 'watcher-id': {'type': 'string'}},
- 'required': ['watcher-id'],
- 'type': 'object'}},
- 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
- 'type': 'object'},
- 'Stop': {'type': 'object'}},
- 'type': 'object'}
-
-
@ReturnMapping(StringsWatchResult)
- async def Next(self):
- '''
-
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='StringsWatcher', request='Next', version=1, params=_params)
-
- reply = await self.rpc(msg)
- return reply
-
-
-
- @ReturnMapping(None)
- async def Stop(self):
+ async def WatchUnitAssignments(self):
'''
- Returns -> None
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StringsWatcher', request='Stop', version=1, params=_params)
+ msg = dict(type='UnitAssigner',
+ request='WatchUnitAssignments',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
-class UndertakerFacade(Type):
- name = 'Undertaker'
+class UpgradeSeriesFacade(Type):
+ name = 'UpgradeSeries'
version = 1
- schema = {'definitions': {'EntityStatusArgs': {'additionalProperties': False,
- 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'info': {'type': 'string'},
- 'status': {'type': 'string'},
- 'tag': {'type': 'string'}},
- 'required': ['tag',
- 'status',
- 'info',
- 'data'],
- 'type': 'object'},
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'EntitiesResult': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'EntitiesResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/EntitiesResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'type': 'object'},
'ErrorResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'ModelConfigResult': {'additionalProperties': False,
- 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'}},
- 'required': ['config'],
- 'type': 'object'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'type': 'array'}},
'required': ['results'],
'type': 'object'},
- 'SetStatus': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'UndertakerModelInfo': {'additionalProperties': False,
- 'properties': {'global-name': {'type': 'string'},
- 'is-system': {'type': 'boolean'},
- 'life': {'type': 'string'},
- 'name': {'type': 'string'},
- 'uuid': {'type': 'string'}},
- 'required': ['uuid',
- 'name',
- 'global-name',
- 'is-system',
- 'life'],
- 'type': 'object'},
- 'UndertakerModelInfoResult': {'additionalProperties': False,
+ 'PinApplicationResult': {'additionalProperties': False,
+ 'properties': {'application-name': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['application-name'],
+ 'type': 'object'},
+ 'PinApplicationsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/PinApplicationResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'PinnedLeadershipResult': {'additionalProperties': False,
+ 'properties': {'result': {'patternProperties': {'.*': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'UpdateSeriesArg': {'additionalProperties': False,
+ 'properties': {'force': {'type': 'boolean'},
+ 'series': {'type': 'string'},
+ 'tag': {'$ref': '#/definitions/Entity'}},
+ 'required': ['tag', 'force', 'series'],
+ 'type': 'object'},
+ 'UpdateSeriesArgs': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'$ref': '#/definitions/UpdateSeriesArg'},
+ 'type': 'array'}},
+ 'required': ['args'],
+ 'type': 'object'},
+ 'UpgradeSeriesStartUnitCompletionParam': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'},
+ 'message': {'type': 'string'}},
+ 'required': ['entities',
+ 'message'],
+ 'type': 'object'},
+ 'UpgradeSeriesStatusParam': {'additionalProperties': False,
+ 'properties': {'entity': {'$ref': '#/definitions/Entity'},
+ 'message': {'type': 'string'},
+ 'status': {'type': 'string'}},
+ 'required': ['entity',
+ 'status',
+ 'message'],
+ 'type': 'object'},
+ 'UpgradeSeriesStatusParams': {'additionalProperties': False,
+ 'properties': {'params': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusParam'},
+ 'type': 'array'}},
+ 'required': ['params'],
+ 'type': 'object'},
+ 'UpgradeSeriesStatusResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'$ref': '#/definitions/UndertakerModelInfo'}},
- 'required': ['result'],
- 'type': 'object'}},
- 'properties': {'ModelConfig': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResult'}},
- 'type': 'object'},
- 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/UndertakerModelInfoResult'}},
- 'type': 'object'},
- 'ProcessDyingModel': {'type': 'object'},
- 'RemoveModel': {'type': 'object'},
- 'SetStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'UpdateStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'status': {'type': 'string'}},
+ 'type': 'object'},
+ 'UpgradeSeriesStatusResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/UpgradeSeriesStatusResult'},
+ 'type': 'array'}},
+ 'type': 'object'}},
+ 'properties': {'FinishUpgradeSeries': {'properties': {'Params': {'$ref': '#/definitions/UpdateSeriesArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'MachineStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/UpgradeSeriesStatusResults'}},
+ 'type': 'object'},
+ 'PinMachineApplications': {'properties': {'Result': {'$ref': '#/definitions/PinApplicationsResults'}},
+ 'type': 'object'},
+ 'PinnedLeadership': {'properties': {'Result': {'$ref': '#/definitions/PinnedLeadershipResult'}},
+ 'type': 'object'},
+ 'SetMachineStatus': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStatusParams'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SetUpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStatusParams'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'StartUnitCompletion': {'properties': {'Params': {'$ref': '#/definitions/UpgradeSeriesStartUnitCompletionParam'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'TargetSeries': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/StringResults'}},
'type': 'object'},
- 'WatchModelResources': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
- 'type': 'object'}},
+ 'UnitsCompleted': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/EntitiesResults'}},
+ 'type': 'object'},
+ 'UnitsPrepared': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/EntitiesResults'}},
+ 'type': 'object'},
+ 'UnpinMachineApplications': {'properties': {'Result': {'$ref': '#/definitions/PinApplicationsResults'}},
+ 'type': 'object'},
+ 'UpgradeSeriesUnitStatus': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/UpgradeSeriesStatusResults'}},
+ 'type': 'object'},
+ 'WatchUpgradeSeriesNotifications': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ModelConfigResult)
- async def ModelConfig(self):
+ @ReturnMapping(ErrorResults)
+ async def FinishUpgradeSeries(self, args):
'''
-
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ args : typing.Sequence[~UpdateSeriesArg]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='ModelConfig', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='FinishUpgradeSeries',
+ version=1,
+ params=_params)
+ _params['args'] = args
+ reply = await self.rpc(msg)
+ return reply
+
+
+ @ReturnMapping(UpgradeSeriesStatusResults)
+ async def MachineStatus(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~UpgradeSeriesStatusResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='UpgradeSeries',
+ request='MachineStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(UndertakerModelInfoResult)
- async def ModelInfo(self):
+ @ReturnMapping(PinApplicationsResults)
+ async def PinMachineApplications(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), _ForwardRef('UndertakerModelInfo')]
+ Returns -> typing.Sequence[~PinApplicationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='ModelInfo', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='PinMachineApplications',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def ProcessDyingModel(self):
+ @ReturnMapping(PinnedLeadershipResult)
+ async def PinnedLeadership(self):
'''
- Returns -> None
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='ProcessDyingModel', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='PinnedLeadership',
+ version=1,
+ params=_params)
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def RemoveModel(self):
+ @ReturnMapping(ErrorResults)
+ async def SetMachineStatus(self, params):
'''
-
- Returns -> None
+ params : typing.Sequence[~UpgradeSeriesStatusParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='RemoveModel', version=1, params=_params)
-
+ msg = dict(type='UpgradeSeries',
+ request='SetMachineStatus',
+ version=1,
+ params=_params)
+ _params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def SetStatus(self, entities):
+ async def SetUpgradeSeriesUnitStatus(self, params):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ params : typing.Sequence[~UpgradeSeriesStatusParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='SetStatus', version=1, params=_params)
- _params['entities'] = entities
+ msg = dict(type='UpgradeSeries',
+ request='SetUpgradeSeriesUnitStatus',
+ version=1,
+ params=_params)
+ _params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def UpdateStatus(self, entities):
+ async def StartUnitCompletion(self, entities, message):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ message : str
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='UpdateStatus', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='StartUnitCompletion',
+ version=1,
+ params=_params)
_params['entities'] = entities
+ _params['message'] = message
reply = await self.rpc(msg)
return reply
- @ReturnMapping(NotifyWatchResults)
- async def WatchModelResources(self):
+ @ReturnMapping(StringResults)
+ async def TargetSeries(self, entities):
'''
-
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Undertaker', request='WatchModelResources', version=1, params=_params)
-
+ msg = dict(type='UpgradeSeries',
+ request='TargetSeries',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
-class UnitAssignerFacade(Type):
- name = 'UnitAssigner'
- version = 1
- schema = {'definitions': {'Entities': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'Entity': {'additionalProperties': False,
- 'properties': {'tag': {'type': 'string'}},
- 'required': ['tag'],
- 'type': 'object'},
- 'EntityStatusArgs': {'additionalProperties': False,
- 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'},
- 'info': {'type': 'string'},
- 'status': {'type': 'string'},
- 'tag': {'type': 'string'}},
- 'required': ['tag',
- 'status',
- 'info',
- 'data'],
- 'type': 'object'},
- 'Error': {'additionalProperties': False,
- 'properties': {'code': {'type': 'string'},
- 'info': {'$ref': '#/definitions/ErrorInfo'},
- 'message': {'type': 'string'}},
- 'required': ['message', 'code'],
- 'type': 'object'},
- 'ErrorInfo': {'additionalProperties': False,
- 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
- 'macaroon-path': {'type': 'string'}},
- 'type': 'object'},
- 'ErrorResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'}},
- 'type': 'object'},
- 'ErrorResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
- 'type': 'array'}},
- 'required': ['results'],
- 'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'},
- 'SetStatus': {'additionalProperties': False,
- 'properties': {'entities': {'items': {'$ref': '#/definitions/EntityStatusArgs'},
- 'type': 'array'}},
- 'required': ['entities'],
- 'type': 'object'},
- 'StringsWatchResult': {'additionalProperties': False,
- 'properties': {'changes': {'items': {'type': 'string'},
- 'type': 'array'},
- 'error': {'$ref': '#/definitions/Error'},
- 'watcher-id': {'type': 'string'}},
- 'required': ['watcher-id'],
- 'type': 'object'}},
- 'properties': {'AssignUnits': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'SetAgentStatus': {'properties': {'Params': {'$ref': '#/definitions/SetStatus'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'WatchUnitAssignments': {'properties': {'Result': {'$ref': '#/definitions/StringsWatchResult'}},
- 'type': 'object'}},
- 'type': 'object'}
-
-
- @ReturnMapping(ErrorResults)
- async def AssignUnits(self, entities):
+ @ReturnMapping(EntitiesResults)
+ async def UnitsCompleted(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~EntitiesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UnitAssigner', request='AssignUnits', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='UnitsCompleted',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetAgentStatus(self, entities):
+ @ReturnMapping(EntitiesResults)
+ async def UnitsPrepared(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~EntitiesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UnitAssigner', request='SetAgentStatus', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='UnitsPrepared',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(StringsWatchResult)
- async def WatchUnitAssignments(self):
+ @ReturnMapping(PinApplicationsResults)
+ async def UnpinMachineApplications(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ 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
+
+
+
+ @ReturnMapping(UpgradeSeriesStatusResults)
+ async def UpgradeSeriesUnitStatus(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~UpgradeSeriesStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UnitAssigner', request='WatchUnitAssignments', version=1, params=_params)
+ msg = dict(type='UpgradeSeries',
+ request='UpgradeSeriesUnitStatus',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchUpgradeSeriesNotifications(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='UpgradeSeries',
+ request='WatchUpgradeSeriesNotifications',
+ version=1,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(VersionResults)
async def DesiredVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~VersionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Upgrader', request='DesiredVersion', version=1, params=_params)
+ msg = dict(type='Upgrader',
+ request='DesiredVersion',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetTools(self, agent_tools):
'''
- agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ agent_tools : typing.Sequence[~EntityVersion]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Upgrader', request='SetTools', version=1, params=_params)
+ msg = dict(type='Upgrader',
+ request='SetTools',
+ version=1,
+ params=_params)
_params['agent-tools'] = agent_tools
reply = await self.rpc(msg)
return reply
@ReturnMapping(ToolsResults)
async def Tools(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ToolsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Upgrader', request='Tools', version=1, params=_params)
+ msg = dict(type='Upgrader',
+ request='Tools',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchAPIVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Upgrader', request='WatchAPIVersion', version=1, params=_params)
+ msg = dict(type='Upgrader',
+ request='WatchAPIVersion',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddUserResults)
async def AddUser(self, users):
'''
- users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
- Returns -> typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
+ users : typing.Sequence[~AddUser]
+ Returns -> typing.Sequence[~AddUserResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='AddUser', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='AddUser',
+ version=1,
+ params=_params)
_params['users'] = users
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DisableUser(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='DisableUser', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='DisableUser',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnableUser(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='EnableUser', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='EnableUser',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RemoveUser(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='RemoveUser', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='RemoveUser',
+ version=1,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetPassword(self, changes):
'''
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ changes : typing.Sequence[~EntityPassword]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='SetPassword', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='SetPassword',
+ version=1,
+ params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
@ReturnMapping(UserInfoResults)
async def UserInfo(self, entities, include_disabled):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
include_disabled : bool
- Returns -> typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
+ Returns -> typing.Sequence[~UserInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='UserManager', request='UserInfo', version=1, params=_params)
+ msg = dict(type='UserManager',
+ request='UserInfo',
+ version=1,
+ params=_params)
_params['entities'] = entities
_params['include-disabled'] = include_disabled
reply = await self.rpc(msg)
return reply
+
+class VolumeAttachmentPlansWatcherFacade(Type):
+ name = 'VolumeAttachmentPlansWatcher'
+ version = 1
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'MachineStorageId': {'additionalProperties': False,
+ 'properties': {'attachment-tag': {'type': 'string'},
+ 'machine-tag': {'type': 'string'}},
+ 'required': ['machine-tag',
+ 'attachment-tag'],
+ 'type': 'object'},
+ 'MachineStorageIdsWatchResult': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/MachineStorageId'},
+ 'type': 'array'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id',
+ 'changes'],
+ 'type': 'object'}},
+ 'properties': {'Next': {'properties': {'Result': {'$ref': '#/definitions/MachineStorageIdsWatchResult'}},
+ 'type': 'object'},
+ 'Stop': {'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(MachineStorageIdsWatchResult)
+ async def Next(self):
+ '''
+
+ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='VolumeAttachmentPlansWatcher',
+ request='Next',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Stop(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='VolumeAttachmentPlansWatcher',
+ request='Stop',
+ version=1,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
@ReturnMapping(ActionResults)
async def Actions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='Actions', version=2, params=_params)
+ msg = dict(type='Action',
+ request='Actions',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ApplicationsCharmActionsResults)
async def ApplicationsCharmsActions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ApplicationCharmActionsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='ApplicationsCharmsActions', version=2, params=_params)
+ msg = dict(type='Action',
+ request='ApplicationsCharmsActions',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionResults)
async def Cancel(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='Cancel', version=2, params=_params)
+ msg = dict(type='Action',
+ request='Cancel',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionResults)
async def Enqueue(self, actions):
'''
- actions : typing.Sequence<+T_co>[~Action]<~Action>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ actions : typing.Sequence[~Action]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='Enqueue', version=2, params=_params)
+ msg = dict(type='Action',
+ request='Enqueue',
+ version=2,
+ params=_params)
_params['actions'] = actions
reply = await self.rpc(msg)
return reply
@ReturnMapping(FindTagsResults)
async def FindActionTagsByPrefix(self, prefixes):
'''
- prefixes : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~Entity]<~Entity>
+ prefixes : typing.Sequence[str]
+ Returns -> typing.Sequence[~Entity]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='FindActionTagsByPrefix', version=2, params=_params)
+ msg = dict(type='Action',
+ request='FindActionTagsByPrefix',
+ version=2,
+ params=_params)
_params['prefixes'] = prefixes
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionsByNames)
async def FindActionsByNames(self, names):
'''
- names : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName>
+ names : typing.Sequence[str]
+ Returns -> typing.Sequence[~ActionsByName]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='FindActionsByNames', version=2, params=_params)
+ msg = dict(type='Action',
+ request='FindActionsByNames',
+ version=2,
+ params=_params)
_params['names'] = names
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionsByReceivers)
async def ListAll(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionsByReceiver]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='ListAll', version=2, params=_params)
+ msg = dict(type='Action',
+ request='ListAll',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionsByReceivers)
async def ListCompleted(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionsByReceiver]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='ListCompleted', version=2, params=_params)
+ msg = dict(type='Action',
+ request='ListCompleted',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionsByReceivers)
async def ListPending(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionsByReceiver]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='ListPending', version=2, params=_params)
+ msg = dict(type='Action',
+ request='ListPending',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionsByReceivers)
async def ListRunning(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionsByReceiver]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='ListRunning', version=2, params=_params)
+ msg = dict(type='Action',
+ request='ListRunning',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionResults)
async def Run(self, applications, commands, machines, timeout, units):
'''
- applications : typing.Sequence<+T_co>[str]
+ applications : typing.Sequence[str]
commands : str
- machines : typing.Sequence<+T_co>[str]
+ machines : typing.Sequence[str]
timeout : int
- units : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ units : typing.Sequence[str]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='Run', version=2, params=_params)
+ msg = dict(type='Action',
+ request='Run',
+ version=2,
+ params=_params)
_params['applications'] = applications
_params['commands'] = commands
_params['machines'] = machines
@ReturnMapping(ActionResults)
async def RunOnAllMachines(self, applications, commands, machines, timeout, units):
'''
- applications : typing.Sequence<+T_co>[str]
+ applications : typing.Sequence[str]
commands : str
- machines : typing.Sequence<+T_co>[str]
+ machines : typing.Sequence[str]
timeout : int
- units : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ units : typing.Sequence[str]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Action', request='RunOnAllMachines', version=2, params=_params)
+ msg = dict(type='Action',
+ request='RunOnAllMachines',
+ version=2,
+ params=_params)
_params['applications'] = applications
_params['commands'] = commands
_params['machines'] = machines
'required': ['auth-type'],
'type': 'object'},
'CloudSpec': {'additionalProperties': False,
- 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+ 'properties': {'cacertificates': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'credential': {'$ref': '#/definitions/CloudCredential'},
'endpoint': {'type': 'string'},
'identity-endpoint': {'type': 'string'},
'name': {'type': 'string'},
'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'}},
'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'},
'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'},
@ReturnMapping(ErrorResults)
async def ClearReboot(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='ClearReboot', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='ClearReboot',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(CloudSpecResults)
async def CloudSpec(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudSpecResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Agent',
+ request='CloudSpec',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ControllerAPIInfoResults)
+ async def ControllerAPIInfoForModels(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ControllerAPIInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='CloudSpec', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='ControllerAPIInfoForModels',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ControllerConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='ControllerConfig', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='ControllerConfig',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='GetCloudSpec', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='GetCloudSpec',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(AgentGetEntitiesResults)
async def GetEntities(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~AgentGetEntitiesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='GetEntities', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='GetEntities',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='IsMaster', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='IsMaster',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='ModelConfig', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='ModelConfig',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetPasswords(self, changes):
'''
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ changes : typing.Sequence[~EntityPassword]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='SetPasswords', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='SetPasswords',
+ version=2,
+ params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='StateServingInfo', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='StateServingInfo',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchCredentials(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='WatchCredentials', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='WatchCredentials',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Agent', request='WatchForModelConfigChanges', version=2, params=_params)
+ msg = dict(type='Agent',
+ request='WatchForModelConfigChanges',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def Next(self):
'''
- Returns -> typing.Sequence<+T_co>[~Delta]<~Delta>
+ Returns -> typing.Sequence[~Delta]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='AllModelWatcher', request='Next', version=2, params=_params)
+ msg = dict(type='AllModelWatcher',
+ request='Next',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='AllModelWatcher', request='Stop', version=2, params=_params)
+ msg = dict(type='AllModelWatcher',
+ request='Stop',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(AnnotationsGetResults)
async def Get(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~AnnotationsGetResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Annotations', request='Get', version=2, params=_params)
+ msg = dict(type='Annotations',
+ request='Get',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Set(self, annotations):
'''
- annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ annotations : typing.Sequence[~EntityAnnotations]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Annotations', request='Set', version=2, params=_params)
+ msg = dict(type='Annotations',
+ request='Set',
+ version=2,
+ params=_params)
_params['annotations'] = annotations
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddRelationResults)
async def AddRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+ endpoints : typing.Sequence[str]
+ Returns -> typing.Mapping[str, ~CharmRelation]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddRelation', version=2, params=_params)
+ msg = dict(type='Application',
+ request='AddRelation',
+ version=2,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
'''
application : str
num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
+ placement : typing.Sequence[~Placement]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddUnits', version=2, params=_params)
+ msg = dict(type='Application',
+ request='AddUnits',
+ version=2,
+ params=_params)
_params['application'] = application
_params['num-units'] = num_units
_params['placement'] = placement
async def CharmRelations(self, application):
'''
application : str
- Returns -> typing.Sequence<+T_co>[str]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='CharmRelations', version=2, params=_params)
+ msg = dict(type='Application',
+ request='CharmRelations',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Deploy(self, applications):
'''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ applications : typing.Sequence[~ApplicationDeploy]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Deploy', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Deploy',
+ version=2,
+ params=_params)
_params['applications'] = applications
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Destroy', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Destroy',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
+ endpoints : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyRelation', version=2, params=_params)
+ msg = dict(type='Application',
+ request='DestroyRelation',
+ version=2,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyUnits(self, unit_names):
'''
- unit_names : typing.Sequence<+T_co>[str]
+ unit_names : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnits', version=2, params=_params)
+ msg = dict(type='Application',
+ request='DestroyUnits',
+ version=2,
+ params=_params)
_params['unit-names'] = unit_names
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Expose', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Expose',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Get(self, application):
'''
application : str
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Get', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Get',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetCharmURL', version=2, params=_params)
+ msg = dict(type='Application',
+ request='GetCharmURL',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetConstraints', version=2, params=_params)
+ msg = dict(type='Application',
+ request='GetConstraints',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Set(self, application, options):
'''
application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
+ options : typing.Mapping[str, str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Set', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Set',
+ version=2,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
application : str
channel : str
charm_url : str
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+ config_settings : typing.Mapping[str, str]
config_settings_yaml : str
force_series : bool
force_units : bool
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
+ resource_ids : typing.Mapping[str, str]
+ storage_constraints : typing.Mapping[str, ~StorageConstraints]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetCharm', version=2, params=_params)
+ msg = dict(type='Application',
+ request='SetCharm',
+ version=2,
+ params=_params)
_params['application'] = application
_params['channel'] = channel
_params['charm-url'] = charm_url
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetConstraints', version=2, params=_params)
+ msg = dict(type='Application',
+ request='SetConstraints',
+ version=2,
+ params=_params)
_params['application'] = application
_params['constraints'] = constraints
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def SetMetricCredentials(self, creds):
'''
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ creds : typing.Sequence[~ApplicationMetricCredential]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetMetricCredentials', version=2, params=_params)
+ msg = dict(type='Application',
+ request='SetMetricCredentials',
+ version=2,
+ params=_params)
_params['creds'] = creds
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unexpose', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Unexpose',
+ version=2,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Unset(self, application, options):
'''
application : str
- options : typing.Sequence<+T_co>[str]
+ options : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unset', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Unset',
+ version=2,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
force_charm_url : bool
force_series : bool
min_units : int
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
settings_yaml : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Update', version=2, params=_params)
+ msg = dict(type='Application',
+ request='Update',
+ version=2,
+ params=_params)
_params['application'] = application
_params['charm-url'] = charm_url
_params['constraints'] = constraints
-class BlockFacade(Type):
- name = 'Block'
+class ApplicationOffersFacade(Type):
+ name = 'ApplicationOffers'
version = 2
- schema = {'definitions': {'Block': {'additionalProperties': False,
- 'properties': {'id': {'type': 'string'},
- 'message': {'type': 'string'},
- 'tag': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['id', 'tag', 'type'],
- 'type': 'object'},
- 'BlockResult': {'additionalProperties': False,
- 'properties': {'error': {'$ref': '#/definitions/Error'},
- 'result': {'$ref': '#/definitions/Block'}},
- 'required': ['result'],
- 'type': 'object'},
- 'BlockResults': {'additionalProperties': False,
- 'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'},
- 'type': 'array'}},
+ schema = {'definitions': {'AddApplicationOffer': {'additionalProperties': False,
+ 'properties': {'application-description': {'type': 'string'},
+ 'application-name': {'type': 'string'},
+ 'endpoints': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'model-tag': {'type': 'string'},
+ 'offer-name': {'type': 'string'}},
+ 'required': ['model-tag',
+ 'offer-name',
+ 'application-name',
+ 'application-description',
+ 'endpoints'],
+ 'type': 'object'},
+ 'AddApplicationOffers': {'additionalProperties': False,
+ 'properties': {'Offers': {'items': {'$ref': '#/definitions/AddApplicationOffer'},
+ 'type': 'array'}},
+ 'required': ['Offers'],
+ 'type': 'object'},
+ 'ApplicationOfferAdminDetails': {'additionalProperties': False,
+ 'properties': {'ApplicationOfferDetails': {'$ref': '#/definitions/ApplicationOfferDetails'},
+ 'application-name': {'type': 'string'},
+ 'charm-url': {'type': 'string'},
+ 'connections': {'items': {'$ref': '#/definitions/OfferConnection'},
+ 'type': 'array'}},
+ 'required': ['ApplicationOfferDetails',
+ 'application-name',
+ 'charm-url'],
+ 'type': 'object'},
+ 'ApplicationOfferDetails': {'additionalProperties': False,
+ 'properties': {'application-description': {'type': 'string'},
+ 'bindings': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+ 'type': 'array'},
+ 'offer-name': {'type': 'string'},
+ 'offer-url': {'type': 'string'},
+ 'offer-uuid': {'type': 'string'},
+ 'source-model-tag': {'type': 'string'},
+ 'spaces': {'items': {'$ref': '#/definitions/RemoteSpace'},
+ 'type': 'array'},
+ 'users': {'items': {'$ref': '#/definitions/OfferUserDetails'},
+ 'type': 'array'}},
+ 'required': ['source-model-tag',
+ 'offer-uuid',
+ 'offer-url',
+ 'offer-name',
+ 'application-description'],
+ 'type': 'object'},
+ 'ApplicationOfferResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/ApplicationOfferAdminDetails'}},
+ 'type': 'object'},
+ 'ApplicationOffersResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationOfferResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'ConsumeOfferDetails': {'additionalProperties': False,
+ 'properties': {'external-controller': {'$ref': '#/definitions/ExternalControllerInfo'},
+ 'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'offer': {'$ref': '#/definitions/ApplicationOfferDetails'}},
+ 'type': 'object'},
+ 'ConsumeOfferDetailsResult': {'additionalProperties': False,
+ 'properties': {'ConsumeOfferDetails': {'$ref': '#/definitions/ConsumeOfferDetails'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['ConsumeOfferDetails'],
+ 'type': 'object'},
+ 'ConsumeOfferDetailsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ConsumeOfferDetailsResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'DestroyApplicationOffers': {'additionalProperties': False,
+ 'properties': {'force': {'type': 'boolean'},
+ 'offer-urls': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['offer-urls'],
+ 'type': 'object'},
+ 'EndpointFilterAttributes': {'additionalProperties': False,
+ 'properties': {'interface': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'role': {'type': 'string'}},
+ 'required': ['role',
+ 'interface',
+ 'name'],
+ 'type': 'object'},
+ 'EntityStatus': {'additionalProperties': False,
+ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'info': {'type': 'string'},
+ 'since': {'format': 'date-time',
+ 'type': 'string'},
+ 'status': {'type': 'string'}},
+ 'required': ['status', 'info', 'since'],
'type': 'object'},
- 'BlockSwitchParams': {'additionalProperties': False,
- 'properties': {'message': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['type'],
- 'type': 'object'},
'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
- 'properties': {'List': {'properties': {'Result': {'$ref': '#/definitions/BlockResults'}},
- 'type': 'object'},
- 'SwitchBlockOff': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
- 'Result': {'$ref': '#/definitions/ErrorResult'}},
- 'type': 'object'},
- 'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
- 'Result': {'$ref': '#/definitions/ErrorResult'}},
- 'type': 'object'}},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'ExternalControllerInfo': {'additionalProperties': False,
+ 'properties': {'addrs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'ca-cert': {'type': 'string'},
+ 'controller-alias': {'type': 'string'},
+ 'controller-tag': {'type': 'string'}},
+ 'required': ['controller-tag',
+ 'controller-alias',
+ 'addrs',
+ 'ca-cert'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'ModifyOfferAccess': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'action': {'type': 'string'},
+ 'offer-url': {'type': 'string'},
+ 'user-tag': {'type': 'string'}},
+ 'required': ['user-tag',
+ 'action',
+ 'access',
+ 'offer-url'],
+ 'type': 'object'},
+ 'ModifyOfferAccessRequest': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyOfferAccess'},
+ 'type': 'array'}},
+ 'required': ['changes'],
+ 'type': 'object'},
+ 'OfferConnection': {'additionalProperties': False,
+ 'properties': {'endpoint': {'type': 'string'},
+ 'ingress-subnets': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'relation-id': {'type': 'integer'},
+ 'source-model-tag': {'type': 'string'},
+ 'status': {'$ref': '#/definitions/EntityStatus'},
+ 'username': {'type': 'string'}},
+ 'required': ['source-model-tag',
+ 'relation-id',
+ 'username',
+ 'endpoint',
+ 'status',
+ 'ingress-subnets'],
+ 'type': 'object'},
+ 'OfferFilter': {'additionalProperties': False,
+ 'properties': {'allowed-users': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'application-description': {'type': 'string'},
+ 'application-name': {'type': 'string'},
+ 'application-user': {'type': 'string'},
+ 'connected-users': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'endpoints': {'items': {'$ref': '#/definitions/EndpointFilterAttributes'},
+ 'type': 'array'},
+ 'model-name': {'type': 'string'},
+ 'offer-name': {'type': 'string'},
+ 'owner-name': {'type': 'string'}},
+ 'required': ['owner-name',
+ 'model-name',
+ 'offer-name',
+ 'application-name',
+ 'application-description',
+ 'application-user',
+ 'endpoints',
+ 'connected-users',
+ 'allowed-users'],
+ 'type': 'object'},
+ 'OfferFilters': {'additionalProperties': False,
+ 'properties': {'Filters': {'items': {'$ref': '#/definitions/OfferFilter'},
+ 'type': 'array'}},
+ 'required': ['Filters'],
+ 'type': 'object'},
+ 'OfferURLs': {'additionalProperties': False,
+ 'properties': {'offer-urls': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'OfferUserDetails': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'display-name': {'type': 'string'},
+ 'user': {'type': 'string'}},
+ 'required': ['user',
+ 'display-name',
+ 'access'],
+ 'type': 'object'},
+ 'QueryApplicationOffersResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ApplicationOfferAdminDetails'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'RemoteApplicationInfo': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+ 'type': 'array'},
+ 'icon-url-path': {'type': 'string'},
+ 'model-tag': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'offer-url': {'type': 'string'},
+ 'source-model-label': {'type': 'string'}},
+ 'required': ['model-tag',
+ 'name',
+ 'description',
+ 'offer-url',
+ 'endpoints',
+ 'icon-url-path'],
+ 'type': 'object'},
+ 'RemoteApplicationInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/RemoteApplicationInfo'}},
+ 'type': 'object'},
+ 'RemoteApplicationInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/RemoteApplicationInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'RemoteEndpoint': {'additionalProperties': False,
+ 'properties': {'interface': {'type': 'string'},
+ 'limit': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'role': {'type': 'string'}},
+ 'required': ['name',
+ 'role',
+ 'interface',
+ 'limit'],
+ 'type': 'object'},
+ 'RemoteSpace': {'additionalProperties': False,
+ 'properties': {'cloud-type': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'provider-attributes': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'provider-id': {'type': 'string'},
+ 'subnets': {'items': {'$ref': '#/definitions/Subnet'},
+ 'type': 'array'}},
+ 'required': ['cloud-type',
+ 'name',
+ 'provider-id',
+ 'provider-attributes',
+ 'subnets'],
+ 'type': 'object'},
+ 'Subnet': {'additionalProperties': False,
+ 'properties': {'cidr': {'type': 'string'},
+ 'life': {'type': 'string'},
+ 'provider-id': {'type': 'string'},
+ 'provider-network-id': {'type': 'string'},
+ 'provider-space-id': {'type': 'string'},
+ 'space-tag': {'type': 'string'},
+ 'status': {'type': 'string'},
+ 'vlan-tag': {'type': 'integer'},
+ 'zones': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['cidr',
+ 'vlan-tag',
+ 'life',
+ 'space-tag',
+ 'zones'],
+ 'type': 'object'}},
+ 'properties': {'ApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'},
+ 'Result': {'$ref': '#/definitions/ApplicationOffersResults'}},
+ 'type': 'object'},
+ 'DestroyOffers': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationOffers'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'FindApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferFilters'},
+ 'Result': {'$ref': '#/definitions/QueryApplicationOffersResults'}},
+ 'type': 'object'},
+ 'GetConsumeDetails': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'},
+ 'Result': {'$ref': '#/definitions/ConsumeOfferDetailsResults'}},
+ 'type': 'object'},
+ 'ListApplicationOffers': {'properties': {'Params': {'$ref': '#/definitions/OfferFilters'},
+ 'Result': {'$ref': '#/definitions/QueryApplicationOffersResults'}},
+ 'type': 'object'},
+ 'ModifyOfferAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyOfferAccessRequest'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Offer': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationOffers'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'RemoteApplicationInfo': {'properties': {'Params': {'$ref': '#/definitions/OfferURLs'},
+ 'Result': {'$ref': '#/definitions/RemoteApplicationInfoResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(BlockResults)
- async def List(self):
+ @ReturnMapping(ApplicationOffersResults)
+ async def ApplicationOffers(self, offer_urls):
+ '''
+ offer_urls : typing.Sequence[str]
+ Returns -> typing.Sequence[~ApplicationOfferResult]
'''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ApplicationOffers',
+ request='ApplicationOffers',
+ version=2,
+ params=_params)
+ _params['offer-urls'] = offer_urls
+ reply = await self.rpc(msg)
+ return reply
+
+
- Returns -> typing.Sequence<+T_co>[~BlockResult]<~BlockResult>
+ @ReturnMapping(ErrorResults)
+ async def DestroyOffers(self, force, offer_urls):
+ '''
+ force : bool
+ offer_urls : typing.Sequence[str]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Block', request='List', version=2, params=_params)
+ msg = dict(type='ApplicationOffers',
+ request='DestroyOffers',
+ version=2,
+ params=_params)
+ _params['force'] = force
+ _params['offer-urls'] = offer_urls
+ reply = await self.rpc(msg)
+ return reply
+
+
+ @ReturnMapping(QueryApplicationOffersResults)
+ async def FindApplicationOffers(self, filters):
+ '''
+ filters : typing.Sequence[~OfferFilter]
+ Returns -> typing.Sequence[~ApplicationOfferAdminDetails]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ApplicationOffers',
+ request='FindApplicationOffers',
+ version=2,
+ params=_params)
+ _params['Filters'] = filters
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResult)
- async def SwitchBlockOff(self, message, type_):
+ @ReturnMapping(ConsumeOfferDetailsResults)
+ async def GetConsumeDetails(self, offer_urls):
'''
- message : str
- type_ : str
- Returns -> Error
+ offer_urls : typing.Sequence[str]
+ Returns -> typing.Sequence[~ConsumeOfferDetailsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Block', request='SwitchBlockOff', version=2, params=_params)
- _params['message'] = message
- _params['type'] = type_
+ msg = dict(type='ApplicationOffers',
+ request='GetConsumeDetails',
+ version=2,
+ params=_params)
+ _params['offer-urls'] = offer_urls
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResult)
- async def SwitchBlockOn(self, message, type_):
+ @ReturnMapping(QueryApplicationOffersResults)
+ async def ListApplicationOffers(self, filters):
'''
- message : str
- type_ : str
- Returns -> Error
+ filters : typing.Sequence[~OfferFilter]
+ Returns -> typing.Sequence[~ApplicationOfferAdminDetails]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Block', request='SwitchBlockOn', version=2, params=_params)
- _params['message'] = message
- _params['type'] = type_
+ msg = dict(type='ApplicationOffers',
+ request='ListApplicationOffers',
+ version=2,
+ params=_params)
+ _params['Filters'] = filters
reply = await self.rpc(msg)
return reply
-class CharmRevisionUpdaterFacade(Type):
- name = 'CharmRevisionUpdater'
+ @ReturnMapping(ErrorResults)
+ async def ModifyOfferAccess(self, changes):
+ '''
+ changes : typing.Sequence[~ModifyOfferAccess]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ApplicationOffers',
+ request='ModifyOfferAccess',
+ version=2,
+ params=_params)
+ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Offer(self, offers):
+ '''
+ offers : typing.Sequence[~AddApplicationOffer]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ApplicationOffers',
+ request='Offer',
+ version=2,
+ params=_params)
+ _params['Offers'] = offers
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(RemoteApplicationInfoResults)
+ async def RemoteApplicationInfo(self, offer_urls):
+ '''
+ offer_urls : typing.Sequence[str]
+ Returns -> typing.Sequence[~RemoteApplicationInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ApplicationOffers',
+ request='RemoteApplicationInfo',
+ version=2,
+ params=_params)
+ _params['offer-urls'] = offer_urls
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class BackupsFacade(Type):
+ name = 'Backups'
version = 2
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'BackupsCreateArgs': {'additionalProperties': False,
+ 'properties': {'keep-copy': {'type': 'boolean'},
+ 'no-download': {'type': 'boolean'},
+ 'notes': {'type': 'string'}},
+ 'required': ['notes',
+ 'keep-copy',
+ 'no-download'],
+ 'type': 'object'},
+ 'BackupsInfoArgs': {'additionalProperties': False,
+ 'properties': {'id': {'type': 'string'}},
+ 'required': ['id'],
+ 'type': 'object'},
+ 'BackupsListArgs': {'additionalProperties': False,
+ 'type': 'object'},
+ 'BackupsListResult': {'additionalProperties': False,
+ 'properties': {'list': {'items': {'$ref': '#/definitions/BackupsMetadataResult'},
+ 'type': 'array'}},
+ 'required': ['list'],
+ 'type': 'object'},
+ 'BackupsMetadataResult': {'additionalProperties': False,
+ 'properties': {'ca-cert': {'type': 'string'},
+ 'ca-private-key': {'type': 'string'},
+ 'checksum': {'type': 'string'},
+ 'checksum-format': {'type': 'string'},
+ 'filename': {'type': 'string'},
+ 'finished': {'format': 'date-time',
+ 'type': 'string'},
+ 'hostname': {'type': 'string'},
+ 'id': {'type': 'string'},
+ 'machine': {'type': 'string'},
+ 'model': {'type': 'string'},
+ 'notes': {'type': 'string'},
+ 'series': {'type': 'string'},
+ 'size': {'type': 'integer'},
+ 'started': {'format': 'date-time',
+ 'type': 'string'},
+ 'stored': {'format': 'date-time',
+ 'type': 'string'},
+ 'version': {'$ref': '#/definitions/Number'}},
+ 'required': ['id',
+ 'checksum',
+ 'checksum-format',
+ 'size',
+ 'stored',
+ 'started',
+ 'finished',
+ 'notes',
+ 'model',
+ 'machine',
+ 'hostname',
+ 'version',
+ 'series',
+ 'ca-cert',
+ 'ca-private-key',
+ 'filename'],
+ 'type': 'object'},
+ 'BackupsRemoveArgs': {'additionalProperties': False,
+ 'properties': {'ids': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['ids'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'ErrorResult': {'additionalProperties': False,
'properties': {'error': {'$ref': '#/definitions/Error'}},
'type': 'object'},
- 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
- 'properties': {'UpdateLatestRevisions': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
- 'type': 'object'}},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'Number': {'additionalProperties': False,
+ 'properties': {'Build': {'type': 'integer'},
+ 'Major': {'type': 'integer'},
+ 'Minor': {'type': 'integer'},
+ 'Patch': {'type': 'integer'},
+ 'Tag': {'type': 'string'}},
+ 'required': ['Major',
+ 'Minor',
+ 'Tag',
+ 'Patch',
+ 'Build'],
+ 'type': 'object'},
+ 'RestoreArgs': {'additionalProperties': False,
+ 'properties': {'backup-id': {'type': 'string'}},
+ 'required': ['backup-id'],
+ 'type': 'object'}},
+ 'properties': {'Create': {'properties': {'Params': {'$ref': '#/definitions/BackupsCreateArgs'},
+ 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}},
+ 'type': 'object'},
+ 'FinishRestore': {'type': 'object'},
+ 'Info': {'properties': {'Params': {'$ref': '#/definitions/BackupsInfoArgs'},
+ 'Result': {'$ref': '#/definitions/BackupsMetadataResult'}},
+ 'type': 'object'},
+ 'List': {'properties': {'Params': {'$ref': '#/definitions/BackupsListArgs'},
+ 'Result': {'$ref': '#/definitions/BackupsListResult'}},
+ 'type': 'object'},
+ 'PrepareRestore': {'type': 'object'},
+ 'Remove': {'properties': {'Params': {'$ref': '#/definitions/BackupsRemoveArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Restore': {'properties': {'Params': {'$ref': '#/definitions/RestoreArgs'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(ErrorResult)
- async def UpdateLatestRevisions(self):
+ @ReturnMapping(BackupsMetadataResult)
+ async def Create(self, notes):
'''
-
- Returns -> Error
+ notes : str
+ Returns -> typing.Union[str, int, _ForwardRef('Number')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='CharmRevisionUpdater', request='UpdateLatestRevisions', version=2, params=_params)
-
+ msg = dict(type='Backups',
+ request='Create',
+ version=2,
+ params=_params)
+ _params['notes'] = notes
reply = await self.rpc(msg)
return reply
-class CharmsFacade(Type):
- name = 'Charms'
- version = 2
- schema = {'definitions': {'CharmActionSpec': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'params': {'patternProperties': {'.*': {'additionalProperties': True,
- 'type': 'object'}},
- 'type': 'object'}},
- 'required': ['description', 'params'],
- 'type': 'object'},
- 'CharmActions': {'additionalProperties': False,
- 'properties': {'specs': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmActionSpec'}},
- 'type': 'object'}},
- 'type': 'object'},
- 'CharmInfo': {'additionalProperties': False,
- 'properties': {'actions': {'$ref': '#/definitions/CharmActions'},
- 'config': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmOption'}},
- 'type': 'object'},
- 'meta': {'$ref': '#/definitions/CharmMeta'},
- 'metrics': {'$ref': '#/definitions/CharmMetrics'},
- 'revision': {'type': 'integer'},
- 'url': {'type': 'string'}},
- 'required': ['revision', 'url', 'config'],
- 'type': 'object'},
- 'CharmMeta': {'additionalProperties': False,
- 'properties': {'categories': {'items': {'type': 'string'},
- 'type': 'array'},
- 'description': {'type': 'string'},
- 'extra-bindings': {'patternProperties': {'.*': {'type': 'string'}},
- 'type': 'object'},
- 'min-juju-version': {'type': 'string'},
- 'name': {'type': 'string'},
- 'payload-classes': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmPayloadClass'}},
- 'type': 'object'},
- 'peers': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
- 'type': 'object'},
- 'provides': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
- 'type': 'object'},
- 'requires': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
- 'type': 'object'},
- 'resources': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmResourceMeta'}},
- 'type': 'object'},
- 'series': {'items': {'type': 'string'},
- 'type': 'array'},
- 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmStorage'}},
- 'type': 'object'},
- 'subordinate': {'type': 'boolean'},
- 'summary': {'type': 'string'},
- 'tags': {'items': {'type': 'string'},
- 'type': 'array'},
- 'terms': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['name',
- 'summary',
- 'description',
- 'subordinate'],
- 'type': 'object'},
- 'CharmMetric': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['type', 'description'],
+ @ReturnMapping(None)
+ async def FinishRestore(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='FinishRestore',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BackupsMetadataResult)
+ async def Info(self, id_):
+ '''
+ id_ : str
+ Returns -> typing.Union[str, int, _ForwardRef('Number')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='Info',
+ version=2,
+ params=_params)
+ _params['id'] = id_
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BackupsListResult)
+ async def List(self):
+ '''
+
+ Returns -> typing.Sequence[~BackupsMetadataResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='List',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def PrepareRestore(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='PrepareRestore',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Remove(self, id_):
+ '''
+ id_ : str
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='Remove',
+ version=2,
+ params=_params)
+ _params['id'] = id_
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Restore(self, backup_id):
+ '''
+ backup_id : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Backups',
+ request='Restore',
+ version=2,
+ params=_params)
+ _params['backup-id'] = backup_id
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class BlockFacade(Type):
+ name = 'Block'
+ version = 2
+ schema = {'definitions': {'Block': {'additionalProperties': False,
+ 'properties': {'id': {'type': 'string'},
+ 'message': {'type': 'string'},
+ 'tag': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['id', 'tag', 'type'],
+ 'type': 'object'},
+ 'BlockResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/Block'}},
+ 'required': ['result'],
'type': 'object'},
- 'CharmMetrics': {'additionalProperties': False,
- 'properties': {'metrics': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmMetric'}},
- 'type': 'object'},
- 'plan': {'$ref': '#/definitions/CharmPlan'}},
- 'required': ['metrics', 'plan'],
+ 'BlockResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/BlockResult'},
+ 'type': 'array'}},
'type': 'object'},
- 'CharmOption': {'additionalProperties': False,
- 'properties': {'default': {'additionalProperties': True,
- 'type': 'object'},
- 'description': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['type'],
- 'type': 'object'},
- 'CharmPayloadClass': {'additionalProperties': False,
- 'properties': {'name': {'type': 'string'},
+ 'BlockSwitchParams': {'additionalProperties': False,
+ 'properties': {'message': {'type': 'string'},
'type': {'type': 'string'}},
- 'required': ['name', 'type'],
+ 'required': ['type'],
'type': 'object'},
- 'CharmPlan': {'additionalProperties': False,
- 'properties': {'required': {'type': 'boolean'}},
- 'required': ['required'],
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
'type': 'object'},
- 'CharmRelation': {'additionalProperties': False,
- 'properties': {'interface': {'type': 'string'},
- 'limit': {'type': 'integer'},
- 'name': {'type': 'string'},
- 'optional': {'type': 'boolean'},
- 'role': {'type': 'string'},
- 'scope': {'type': 'string'}},
- 'required': ['name',
- 'role',
- 'interface',
- 'optional',
- 'limit',
- 'scope'],
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+ 'properties': {'List': {'properties': {'Result': {'$ref': '#/definitions/BlockResults'}},
+ 'type': 'object'},
+ 'SwitchBlockOff': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
+ 'Result': {'$ref': '#/definitions/ErrorResult'}},
'type': 'object'},
- 'CharmResourceMeta': {'additionalProperties': False,
- 'properties': {'description': {'type': 'string'},
- 'name': {'type': 'string'},
- 'path': {'type': 'string'},
- 'type': {'type': 'string'}},
- 'required': ['name',
- 'type',
- 'path',
- 'description'],
- 'type': 'object'},
- 'CharmStorage': {'additionalProperties': False,
- 'properties': {'count-max': {'type': 'integer'},
- 'count-min': {'type': 'integer'},
- 'description': {'type': 'string'},
- 'location': {'type': 'string'},
- 'minimum-size': {'type': 'integer'},
- 'name': {'type': 'string'},
- 'properties': {'items': {'type': 'string'},
- 'type': 'array'},
- 'read-only': {'type': 'boolean'},
- 'shared': {'type': 'boolean'},
- 'type': {'type': 'string'}},
- 'required': ['name',
- 'description',
- 'type',
- 'shared',
- 'read-only',
- 'count-min',
- 'count-max',
- 'minimum-size'],
- 'type': 'object'},
- 'CharmURL': {'additionalProperties': False,
- 'properties': {'url': {'type': 'string'}},
- 'required': ['url'],
- 'type': 'object'},
- 'CharmsList': {'additionalProperties': False,
- 'properties': {'names': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['names'],
- 'type': 'object'},
- 'CharmsListResult': {'additionalProperties': False,
- 'properties': {'charm-urls': {'items': {'type': 'string'},
- 'type': 'array'}},
- 'required': ['charm-urls'],
- 'type': 'object'},
- 'IsMeteredResult': {'additionalProperties': False,
- 'properties': {'metered': {'type': 'boolean'}},
- 'required': ['metered'],
- 'type': 'object'}},
- 'properties': {'CharmInfo': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'},
- 'Result': {'$ref': '#/definitions/CharmInfo'}},
- 'type': 'object'},
- 'IsMetered': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'},
- 'Result': {'$ref': '#/definitions/IsMeteredResult'}},
- 'type': 'object'},
- 'List': {'properties': {'Params': {'$ref': '#/definitions/CharmsList'},
- 'Result': {'$ref': '#/definitions/CharmsListResult'}},
- 'type': 'object'}},
+ 'SwitchBlockOn': {'properties': {'Params': {'$ref': '#/definitions/BlockSwitchParams'},
+ 'Result': {'$ref': '#/definitions/ErrorResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(CharmInfo)
- async def CharmInfo(self, url):
+ @ReturnMapping(BlockResults)
+ async def List(self):
+ '''
+
+ Returns -> typing.Sequence[~BlockResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Block',
+ request='List',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResult)
+ async def SwitchBlockOff(self, message, type_):
+ '''
+ message : str
+ type_ : str
+ Returns -> Error
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Block',
+ request='SwitchBlockOff',
+ version=2,
+ params=_params)
+ _params['message'] = message
+ _params['type'] = type_
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResult)
+ async def SwitchBlockOn(self, message, type_):
+ '''
+ message : str
+ type_ : str
+ Returns -> Error
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Block',
+ request='SwitchBlockOn',
+ version=2,
+ params=_params)
+ _params['message'] = message
+ _params['type'] = type_
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class BundleFacade(Type):
+ name = 'Bundle'
+ version = 2
+ schema = {'definitions': {'BundleChange': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'additionalProperties': True,
+ 'type': 'object'},
+ 'type': 'array'},
+ 'id': {'type': 'string'},
+ 'method': {'type': 'string'},
+ 'requires': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['id',
+ 'method',
+ 'args',
+ 'requires'],
+ 'type': 'object'},
+ 'BundleChangesParams': {'additionalProperties': False,
+ 'properties': {'bundleURL': {'type': 'string'},
+ 'yaml': {'type': 'string'}},
+ 'required': ['yaml', 'bundleURL'],
+ 'type': 'object'},
+ 'BundleChangesResults': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'},
+ 'type': 'array'},
+ 'errors': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'}},
+ 'properties': {'ExportBundle': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'GetChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'},
+ 'Result': {'$ref': '#/definitions/BundleChangesResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(StringResult)
+ async def ExportBundle(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Bundle',
+ request='ExportBundle',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BundleChangesResults)
+ async def GetChanges(self, yaml):
+ '''
+ yaml : str
+ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Bundle',
+ request='GetChanges',
+ version=2,
+ params=_params)
+ _params['yaml'] = yaml
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CharmRevisionUpdaterFacade(Type):
+ name = 'CharmRevisionUpdater'
+ version = 2
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'}},
+ 'properties': {'UpdateLatestRevisions': {'properties': {'Result': {'$ref': '#/definitions/ErrorResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(ErrorResult)
+ async def UpdateLatestRevisions(self):
+ '''
+
+ Returns -> Error
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CharmRevisionUpdater',
+ request='UpdateLatestRevisions',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CharmsFacade(Type):
+ name = 'Charms'
+ version = 2
+ schema = {'definitions': {'CharmActionSpec': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'params': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['description', 'params'],
+ 'type': 'object'},
+ 'CharmActions': {'additionalProperties': False,
+ 'properties': {'specs': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmActionSpec'}},
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'CharmDevice': {'additionalProperties': False,
+ 'properties': {'CountMax': {'type': 'integer'},
+ 'CountMin': {'type': 'integer'},
+ 'Description': {'type': 'string'},
+ 'Name': {'type': 'string'},
+ 'Type': {'type': 'string'}},
+ 'required': ['Name',
+ 'Description',
+ 'Type',
+ 'CountMin',
+ 'CountMax'],
+ 'type': 'object'},
+ 'CharmInfo': {'additionalProperties': False,
+ 'properties': {'actions': {'$ref': '#/definitions/CharmActions'},
+ 'config': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmOption'}},
+ 'type': 'object'},
+ 'lxd-profile': {'$ref': '#/definitions/CharmLXDProfile'},
+ 'meta': {'$ref': '#/definitions/CharmMeta'},
+ 'metrics': {'$ref': '#/definitions/CharmMetrics'},
+ 'revision': {'type': 'integer'},
+ 'url': {'type': 'string'}},
+ 'required': ['revision', 'url', 'config'],
+ 'type': 'object'},
+ 'CharmLXDProfile': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'description': {'type': 'string'},
+ 'devices': {'patternProperties': {'.*': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config',
+ 'description',
+ 'devices'],
+ 'type': 'object'},
+ 'CharmMeta': {'additionalProperties': False,
+ 'properties': {'categories': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'description': {'type': 'string'},
+ 'devices': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmDevice'}},
+ 'type': 'object'},
+ 'extra-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'min-juju-version': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'payload-classes': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmPayloadClass'}},
+ 'type': 'object'},
+ 'peers': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+ 'type': 'object'},
+ 'provides': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+ 'type': 'object'},
+ 'requires': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmRelation'}},
+ 'type': 'object'},
+ 'resources': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmResourceMeta'}},
+ 'type': 'object'},
+ 'series': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'storage': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmStorage'}},
+ 'type': 'object'},
+ 'subordinate': {'type': 'boolean'},
+ 'summary': {'type': 'string'},
+ 'tags': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'terms': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['name',
+ 'summary',
+ 'description',
+ 'subordinate'],
+ 'type': 'object'},
+ 'CharmMetric': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['type', 'description'],
+ 'type': 'object'},
+ 'CharmMetrics': {'additionalProperties': False,
+ 'properties': {'metrics': {'patternProperties': {'.*': {'$ref': '#/definitions/CharmMetric'}},
+ 'type': 'object'},
+ 'plan': {'$ref': '#/definitions/CharmPlan'}},
+ 'required': ['metrics', 'plan'],
+ 'type': 'object'},
+ 'CharmOption': {'additionalProperties': False,
+ 'properties': {'default': {'additionalProperties': True,
+ 'type': 'object'},
+ 'description': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['type'],
+ 'type': 'object'},
+ 'CharmPayloadClass': {'additionalProperties': False,
+ 'properties': {'name': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['name', 'type'],
+ 'type': 'object'},
+ 'CharmPlan': {'additionalProperties': False,
+ 'properties': {'required': {'type': 'boolean'}},
+ 'required': ['required'],
+ 'type': 'object'},
+ 'CharmRelation': {'additionalProperties': False,
+ 'properties': {'interface': {'type': 'string'},
+ 'limit': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'optional': {'type': 'boolean'},
+ 'role': {'type': 'string'},
+ 'scope': {'type': 'string'}},
+ 'required': ['name',
+ 'role',
+ 'interface',
+ 'optional',
+ 'limit',
+ 'scope'],
+ 'type': 'object'},
+ 'CharmResourceMeta': {'additionalProperties': False,
+ 'properties': {'description': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'path': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['name',
+ 'type',
+ 'path',
+ 'description'],
+ 'type': 'object'},
+ 'CharmStorage': {'additionalProperties': False,
+ 'properties': {'count-max': {'type': 'integer'},
+ 'count-min': {'type': 'integer'},
+ 'description': {'type': 'string'},
+ 'location': {'type': 'string'},
+ 'minimum-size': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'properties': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'read-only': {'type': 'boolean'},
+ 'shared': {'type': 'boolean'},
+ 'type': {'type': 'string'}},
+ 'required': ['name',
+ 'description',
+ 'type',
+ 'shared',
+ 'read-only',
+ 'count-min',
+ 'count-max',
+ 'minimum-size'],
+ 'type': 'object'},
+ 'CharmURL': {'additionalProperties': False,
+ 'properties': {'url': {'type': 'string'}},
+ 'required': ['url'],
+ 'type': 'object'},
+ 'CharmsList': {'additionalProperties': False,
+ 'properties': {'names': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['names'],
+ 'type': 'object'},
+ 'CharmsListResult': {'additionalProperties': False,
+ 'properties': {'charm-urls': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['charm-urls'],
+ 'type': 'object'},
+ 'IsMeteredResult': {'additionalProperties': False,
+ 'properties': {'metered': {'type': 'boolean'}},
+ 'required': ['metered'],
+ 'type': 'object'}},
+ 'properties': {'CharmInfo': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'},
+ 'Result': {'$ref': '#/definitions/CharmInfo'}},
+ 'type': 'object'},
+ 'IsMetered': {'properties': {'Params': {'$ref': '#/definitions/CharmURL'},
+ 'Result': {'$ref': '#/definitions/IsMeteredResult'}},
+ 'type': 'object'},
+ 'List': {'properties': {'Params': {'$ref': '#/definitions/CharmsList'},
+ 'Result': {'$ref': '#/definitions/CharmsListResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(CharmInfo)
+ async def CharmInfo(self, url):
+ '''
+ url : str
+ Returns -> typing.Union[_ForwardRef('CharmActions'), typing.Mapping[str, ~CharmOption], _ForwardRef('CharmMeta'), _ForwardRef('CharmMetrics'), int, str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Charms',
+ request='CharmInfo',
+ version=2,
+ params=_params)
+ _params['url'] = url
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(IsMeteredResult)
+ async def IsMetered(self, url):
+ '''
+ url : str
+ Returns -> bool
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Charms',
+ request='IsMetered',
+ version=2,
+ params=_params)
+ _params['url'] = url
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(CharmsListResult)
+ async def List(self, names):
+ '''
+ names : typing.Sequence[str]
+ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Charms',
+ request='List',
+ version=2,
+ params=_params)
+ _params['names'] = names
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CleanerFacade(Type):
+ name = 'Cleaner'
+ version = 2
+ schema = {'definitions': {'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'}},
+ 'properties': {'Cleanup': {'type': 'object'},
+ 'WatchCleanups': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(None)
+ async def Cleanup(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cleaner',
+ request='Cleanup',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchCleanups(self):
+ '''
+
+ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Cleaner',
+ request='WatchCleanups',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class ClientFacade(Type):
+ name = 'Client'
+ version = 2
+ schema = {'definitions': {'APIHostPortsResult': {'additionalProperties': False,
+ 'properties': {'servers': {'items': {'items': {'$ref': '#/definitions/HostPort'},
+ 'type': 'array'},
+ 'type': 'array'}},
+ 'required': ['servers'],
+ 'type': 'object'},
+ 'AddCharm': {'additionalProperties': False,
+ 'properties': {'channel': {'type': 'string'},
+ 'force': {'type': 'boolean'},
+ 'url': {'type': 'string'}},
+ 'required': ['url', 'channel', 'force'],
+ 'type': 'object'},
+ 'AddCharmWithAuthorization': {'additionalProperties': False,
+ 'properties': {'channel': {'type': 'string'},
+ 'force': {'type': 'boolean'},
+ 'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'url': {'type': 'string'}},
+ 'required': ['url',
+ 'channel',
+ 'macaroon',
+ 'force'],
+ 'type': 'object'},
+ 'AddMachineParams': {'additionalProperties': False,
+ 'properties': {'addresses': {'items': {'$ref': '#/definitions/Address'},
+ 'type': 'array'},
+ 'constraints': {'$ref': '#/definitions/Value'},
+ 'container-type': {'type': 'string'},
+ 'disks': {'items': {'$ref': '#/definitions/Constraints'},
+ 'type': 'array'},
+ 'hardware-characteristics': {'$ref': '#/definitions/HardwareCharacteristics'},
+ 'instance-id': {'type': 'string'},
+ 'jobs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'nonce': {'type': 'string'},
+ 'parent-id': {'type': 'string'},
+ 'placement': {'$ref': '#/definitions/Placement'},
+ 'series': {'type': 'string'}},
+ 'required': ['series',
+ 'constraints',
+ 'jobs',
+ 'parent-id',
+ 'container-type',
+ 'instance-id',
+ 'nonce',
+ 'hardware-characteristics',
+ 'addresses'],
+ 'type': 'object'},
+ 'AddMachines': {'additionalProperties': False,
+ 'properties': {'params': {'items': {'$ref': '#/definitions/AddMachineParams'},
+ 'type': 'array'}},
+ 'required': ['params'],
+ 'type': 'object'},
+ 'AddMachinesResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'machine': {'type': 'string'}},
+ 'required': ['machine'],
+ 'type': 'object'},
+ 'AddMachinesResults': {'additionalProperties': False,
+ 'properties': {'machines': {'items': {'$ref': '#/definitions/AddMachinesResult'},
+ 'type': 'array'}},
+ 'required': ['machines'],
+ 'type': 'object'},
+ 'Address': {'additionalProperties': False,
+ 'properties': {'scope': {'type': 'string'},
+ 'space-name': {'type': 'string'},
+ 'type': {'type': 'string'},
+ 'value': {'type': 'string'}},
+ 'required': ['value', 'type', 'scope'],
+ 'type': 'object'},
+ 'AgentVersionResult': {'additionalProperties': False,
+ 'properties': {'version': {'$ref': '#/definitions/Number'}},
+ 'required': ['version'],
+ 'type': 'object'},
+ 'AllWatcherId': {'additionalProperties': False,
+ 'properties': {'watcher-id': {'type': 'string'}},
+ 'required': ['watcher-id'],
+ 'type': 'object'},
+ 'ApplicationOfferStatus': {'additionalProperties': False,
+ 'properties': {'active-connected-count': {'type': 'integer'},
+ 'application-name': {'type': 'string'},
+ 'charm': {'type': 'string'},
+ 'endpoints': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteEndpoint'}},
+ 'type': 'object'},
+ 'err': {'additionalProperties': True,
+ 'type': 'object'},
+ 'offer-name': {'type': 'string'},
+ 'total-connected-count': {'type': 'integer'}},
+ 'required': ['offer-name',
+ 'application-name',
+ 'charm',
+ 'endpoints',
+ 'active-connected-count',
+ 'total-connected-count'],
+ 'type': 'object'},
+ 'ApplicationStatus': {'additionalProperties': False,
+ 'properties': {'can-upgrade-to': {'type': 'string'},
+ 'charm': {'type': 'string'},
+ 'charm-verion': {'type': 'string'},
+ 'endpoint-bindings': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'err': {'additionalProperties': True,
+ 'type': 'object'},
+ 'exposed': {'type': 'boolean'},
+ 'int': {'type': 'integer'},
+ 'life': {'type': 'string'},
+ 'meter-statuses': {'patternProperties': {'.*': {'$ref': '#/definitions/MeterStatus'}},
+ 'type': 'object'},
+ 'provider-id': {'type': 'string'},
+ 'public-address': {'type': 'string'},
+ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'series': {'type': 'string'},
+ 'status': {'$ref': '#/definitions/DetailedStatus'},
+ 'string': {'type': 'string'},
+ 'subordinate-to': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'units': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
+ 'type': 'object'},
+ 'workload-version': {'type': 'string'}},
+ 'required': ['charm',
+ 'series',
+ 'exposed',
+ 'life',
+ 'relations',
+ 'can-upgrade-to',
+ 'subordinate-to',
+ 'units',
+ 'meter-statuses',
+ 'status',
+ 'workload-version',
+ 'charm-verion',
+ 'endpoint-bindings',
+ 'public-address'],
+ 'type': 'object'},
+ 'Binary': {'additionalProperties': False,
+ 'properties': {'Arch': {'type': 'string'},
+ 'Number': {'$ref': '#/definitions/Number'},
+ 'Series': {'type': 'string'}},
+ 'required': ['Number', 'Series', 'Arch'],
+ 'type': 'object'},
+ 'BundleChange': {'additionalProperties': False,
+ 'properties': {'args': {'items': {'additionalProperties': True,
+ 'type': 'object'},
+ 'type': 'array'},
+ 'id': {'type': 'string'},
+ 'method': {'type': 'string'},
+ 'requires': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['id',
+ 'method',
+ 'args',
+ 'requires'],
+ 'type': 'object'},
+ 'BundleChangesParams': {'additionalProperties': False,
+ 'properties': {'bundleURL': {'type': 'string'},
+ 'yaml': {'type': 'string'}},
+ 'required': ['yaml', 'bundleURL'],
+ 'type': 'object'},
+ 'BundleChangesResults': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/BundleChange'},
+ 'type': 'array'},
+ 'errors': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'BytesResult': {'additionalProperties': False,
+ 'properties': {'result': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'ConfigValue': {'additionalProperties': False,
+ 'properties': {'source': {'type': 'string'},
+ 'value': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'required': ['value', 'source'],
+ 'type': 'object'},
+ 'Constraints': {'additionalProperties': False,
+ 'properties': {'Count': {'type': 'integer'},
+ 'Pool': {'type': 'string'},
+ 'Size': {'type': 'integer'}},
+ 'required': ['Pool', 'Size', 'Count'],
+ 'type': 'object'},
+ 'DestroyMachines': {'additionalProperties': False,
+ 'properties': {'force': {'type': 'boolean'},
+ 'machine-names': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['machine-names', 'force'],
+ 'type': 'object'},
+ 'DetailedStatus': {'additionalProperties': False,
+ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'err': {'additionalProperties': True,
+ 'type': 'object'},
+ 'info': {'type': 'string'},
+ 'kind': {'type': 'string'},
+ 'life': {'type': 'string'},
+ 'since': {'format': 'date-time',
+ 'type': 'string'},
+ 'status': {'type': 'string'},
+ 'version': {'type': 'string'}},
+ 'required': ['status',
+ 'info',
+ 'data',
+ 'since',
+ 'kind',
+ 'version',
+ 'life'],
+ 'type': 'object'},
+ 'EndpointStatus': {'additionalProperties': False,
+ 'properties': {'application': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'role': {'type': 'string'},
+ 'subordinate': {'type': 'boolean'}},
+ 'required': ['application',
+ 'name',
+ 'role',
+ 'subordinate'],
+ 'type': 'object'},
+ 'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'EntityStatus': {'additionalProperties': False,
+ 'properties': {'data': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'info': {'type': 'string'},
+ 'since': {'format': 'date-time',
+ 'type': 'string'},
+ 'status': {'type': 'string'}},
+ 'required': ['status', 'info', 'since'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'FindToolsParams': {'additionalProperties': False,
+ 'properties': {'agentstream': {'type': 'string'},
+ 'arch': {'type': 'string'},
+ 'major': {'type': 'integer'},
+ 'minor': {'type': 'integer'},
+ 'number': {'$ref': '#/definitions/Number'},
+ 'series': {'type': 'string'}},
+ 'required': ['number',
+ 'major',
+ 'minor',
+ 'arch',
+ 'series',
+ 'agentstream'],
+ 'type': 'object'},
+ 'FindToolsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'list': {'items': {'$ref': '#/definitions/Tools'},
+ 'type': 'array'}},
+ 'required': ['list'],
+ 'type': 'object'},
+ 'FullStatus': {'additionalProperties': False,
+ 'properties': {'applications': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationStatus'}},
+ 'type': 'object'},
+ 'controller-timestamp': {'format': 'date-time',
+ 'type': 'string'},
+ 'machines': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
+ 'type': 'object'},
+ 'model': {'$ref': '#/definitions/ModelStatusInfo'},
+ 'offers': {'patternProperties': {'.*': {'$ref': '#/definitions/ApplicationOfferStatus'}},
+ 'type': 'object'},
+ 'relations': {'items': {'$ref': '#/definitions/RelationStatus'},
+ 'type': 'array'},
+ 'remote-applications': {'patternProperties': {'.*': {'$ref': '#/definitions/RemoteApplicationStatus'}},
+ 'type': 'object'}},
+ 'required': ['model',
+ 'machines',
+ 'applications',
+ 'remote-applications',
+ 'offers',
+ 'relations',
+ 'controller-timestamp'],
+ 'type': 'object'},
+ 'GetConstraintsResults': {'additionalProperties': False,
+ 'properties': {'constraints': {'$ref': '#/definitions/Value'}},
+ 'required': ['constraints'],
+ 'type': 'object'},
+ 'HardwareCharacteristics': {'additionalProperties': False,
+ 'properties': {'arch': {'type': 'string'},
+ 'availability-zone': {'type': 'string'},
+ 'cpu-cores': {'type': 'integer'},
+ 'cpu-power': {'type': 'integer'},
+ 'mem': {'type': 'integer'},
+ 'root-disk': {'type': 'integer'},
+ 'tags': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'History': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'statuses': {'items': {'$ref': '#/definitions/DetailedStatus'},
+ 'type': 'array'}},
+ 'required': ['statuses'],
+ 'type': 'object'},
+ 'HostPort': {'additionalProperties': False,
+ 'properties': {'Address': {'$ref': '#/definitions/Address'},
+ 'port': {'type': 'integer'}},
+ 'required': ['Address', 'port'],
+ 'type': 'object'},
+ 'LXDProfile': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'description': {'type': 'string'},
+ 'devices': {'patternProperties': {'.*': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config',
+ 'description',
+ 'devices'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'MachineHardware': {'additionalProperties': False,
+ 'properties': {'arch': {'type': 'string'},
+ 'availability-zone': {'type': 'string'},
+ 'cores': {'type': 'integer'},
+ 'cpu-power': {'type': 'integer'},
+ 'mem': {'type': 'integer'},
+ 'root-disk': {'type': 'integer'},
+ 'tags': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'MachineStatus': {'additionalProperties': False,
+ 'properties': {'agent-status': {'$ref': '#/definitions/DetailedStatus'},
+ 'constraints': {'type': 'string'},
+ 'containers': {'patternProperties': {'.*': {'$ref': '#/definitions/MachineStatus'}},
+ 'type': 'object'},
+ 'dns-name': {'type': 'string'},
+ 'hardware': {'type': 'string'},
+ 'has-vote': {'type': 'boolean'},
+ 'id': {'type': 'string'},
+ 'instance-id': {'type': 'string'},
+ 'instance-status': {'$ref': '#/definitions/DetailedStatus'},
+ 'ip-addresses': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'jobs': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'lxd-profiles': {'patternProperties': {'.*': {'$ref': '#/definitions/LXDProfile'}},
+ 'type': 'object'},
+ 'network-interfaces': {'patternProperties': {'.*': {'$ref': '#/definitions/NetworkInterface'}},
+ 'type': 'object'},
+ 'series': {'type': 'string'},
+ 'wants-vote': {'type': 'boolean'}},
+ 'required': ['agent-status',
+ 'instance-status',
+ 'dns-name',
+ 'instance-id',
+ 'series',
+ 'id',
+ 'containers',
+ 'constraints',
+ 'hardware',
+ 'jobs',
+ 'has-vote',
+ 'wants-vote'],
+ 'type': 'object'},
+ 'MeterStatus': {'additionalProperties': False,
+ 'properties': {'color': {'type': 'string'},
+ 'message': {'type': 'string'}},
+ 'required': ['color', 'message'],
+ 'type': 'object'},
+ 'ModelConfigResults': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'ModelInfo': {'additionalProperties': False,
+ 'properties': {'agent-version': {'$ref': '#/definitions/Number'},
+ 'cloud-credential-tag': {'type': 'string'},
+ 'cloud-region': {'type': 'string'},
+ 'cloud-tag': {'type': 'string'},
+ 'controller-uuid': {'type': 'string'},
+ 'default-series': {'type': 'string'},
+ 'life': {'type': 'string'},
+ 'machines': {'items': {'$ref': '#/definitions/ModelMachineInfo'},
+ 'type': 'array'},
+ 'migration': {'$ref': '#/definitions/ModelMigrationStatus'},
+ 'name': {'type': 'string'},
+ 'owner-tag': {'type': 'string'},
+ 'provider-type': {'type': 'string'},
+ 'sla': {'$ref': '#/definitions/ModelSLAInfo'},
+ 'status': {'$ref': '#/definitions/EntityStatus'},
+ 'type': {'type': 'string'},
+ 'users': {'items': {'$ref': '#/definitions/ModelUserInfo'},
+ 'type': 'array'},
+ 'uuid': {'type': 'string'}},
+ 'required': ['name',
+ 'type',
+ 'uuid',
+ 'controller-uuid',
+ 'cloud-tag',
+ 'owner-tag',
+ 'life',
+ 'users',
+ 'machines',
+ 'sla',
+ 'agent-version'],
+ 'type': 'object'},
+ 'ModelMachineInfo': {'additionalProperties': False,
+ 'properties': {'hardware': {'$ref': '#/definitions/MachineHardware'},
+ 'has-vote': {'type': 'boolean'},
+ 'id': {'type': 'string'},
+ 'instance-id': {'type': 'string'},
+ 'message': {'type': 'string'},
+ 'status': {'type': 'string'},
+ 'wants-vote': {'type': 'boolean'}},
+ 'required': ['id'],
+ 'type': 'object'},
+ 'ModelMigrationStatus': {'additionalProperties': False,
+ 'properties': {'end': {'format': 'date-time',
+ 'type': 'string'},
+ 'start': {'format': 'date-time',
+ 'type': 'string'},
+ 'status': {'type': 'string'}},
+ 'required': ['status', 'start'],
+ 'type': 'object'},
+ 'ModelSLA': {'additionalProperties': False,
+ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'},
+ 'creds': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['ModelSLAInfo', 'creds'],
+ 'type': 'object'},
+ 'ModelSLAInfo': {'additionalProperties': False,
+ 'properties': {'level': {'type': 'string'},
+ 'owner': {'type': 'string'}},
+ 'required': ['level', 'owner'],
+ 'type': 'object'},
+ 'ModelSet': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'ModelStatusInfo': {'additionalProperties': False,
+ 'properties': {'available-version': {'type': 'string'},
+ 'cloud-tag': {'type': 'string'},
+ 'meter-status': {'$ref': '#/definitions/MeterStatus'},
+ 'model-status': {'$ref': '#/definitions/DetailedStatus'},
+ 'name': {'type': 'string'},
+ 'region': {'type': 'string'},
+ 'sla': {'type': 'string'},
+ 'type': {'type': 'string'},
+ 'version': {'type': 'string'}},
+ 'required': ['name',
+ 'type',
+ 'cloud-tag',
+ 'version',
+ 'available-version',
+ 'model-status',
+ 'meter-status',
+ 'sla'],
+ 'type': 'object'},
+ 'ModelUnset': {'additionalProperties': False,
+ 'properties': {'keys': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['keys'],
+ 'type': 'object'},
+ 'ModelUserInfo': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'display-name': {'type': 'string'},
+ 'last-connection': {'format': 'date-time',
+ 'type': 'string'},
+ 'user': {'type': 'string'}},
+ 'required': ['user',
+ 'display-name',
+ 'last-connection',
+ 'access'],
+ 'type': 'object'},
+ 'ModelUserInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/ModelUserInfo'}},
+ 'type': 'object'},
+ 'ModelUserInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ModelUserInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'NetworkInterface': {'additionalProperties': False,
+ 'properties': {'dns-nameservers': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'gateway': {'type': 'string'},
+ 'ip-addresses': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'is-up': {'type': 'boolean'},
+ 'mac-address': {'type': 'string'},
+ 'space': {'type': 'string'}},
+ 'required': ['ip-addresses',
+ 'mac-address',
+ 'is-up'],
+ 'type': 'object'},
+ 'Number': {'additionalProperties': False,
+ 'properties': {'Build': {'type': 'integer'},
+ 'Major': {'type': 'integer'},
+ 'Minor': {'type': 'integer'},
+ 'Patch': {'type': 'integer'},
+ 'Tag': {'type': 'string'}},
+ 'required': ['Major',
+ 'Minor',
+ 'Tag',
+ 'Patch',
+ 'Build'],
+ 'type': 'object'},
+ 'Placement': {'additionalProperties': False,
+ 'properties': {'directive': {'type': 'string'},
+ 'scope': {'type': 'string'}},
+ 'required': ['scope', 'directive'],
+ 'type': 'object'},
+ 'PrivateAddress': {'additionalProperties': False,
+ 'properties': {'target': {'type': 'string'}},
+ 'required': ['target'],
+ 'type': 'object'},
+ 'PrivateAddressResults': {'additionalProperties': False,
+ 'properties': {'private-address': {'type': 'string'}},
+ 'required': ['private-address'],
+ 'type': 'object'},
+ 'ProvisioningScriptParams': {'additionalProperties': False,
+ 'properties': {'data-dir': {'type': 'string'},
+ 'disable-package-commands': {'type': 'boolean'},
+ 'machine-id': {'type': 'string'},
+ 'nonce': {'type': 'string'}},
+ 'required': ['machine-id',
+ 'nonce',
+ 'data-dir',
+ 'disable-package-commands'],
+ 'type': 'object'},
+ 'ProvisioningScriptResult': {'additionalProperties': False,
+ 'properties': {'script': {'type': 'string'}},
+ 'required': ['script'],
+ 'type': 'object'},
+ 'PublicAddress': {'additionalProperties': False,
+ 'properties': {'target': {'type': 'string'}},
+ 'required': ['target'],
+ 'type': 'object'},
+ 'PublicAddressResults': {'additionalProperties': False,
+ 'properties': {'public-address': {'type': 'string'}},
+ 'required': ['public-address'],
+ 'type': 'object'},
+ 'RelationStatus': {'additionalProperties': False,
+ 'properties': {'endpoints': {'items': {'$ref': '#/definitions/EndpointStatus'},
+ 'type': 'array'},
+ 'id': {'type': 'integer'},
+ 'interface': {'type': 'string'},
+ 'key': {'type': 'string'},
+ 'scope': {'type': 'string'},
+ 'status': {'$ref': '#/definitions/DetailedStatus'}},
+ 'required': ['id',
+ 'key',
+ 'interface',
+ 'scope',
+ 'endpoints',
+ 'status'],
+ 'type': 'object'},
+ 'RemoteApplicationStatus': {'additionalProperties': False,
+ 'properties': {'endpoints': {'items': {'$ref': '#/definitions/RemoteEndpoint'},
+ 'type': 'array'},
+ 'err': {'additionalProperties': True,
+ 'type': 'object'},
+ 'life': {'type': 'string'},
+ 'offer-name': {'type': 'string'},
+ 'offer-url': {'type': 'string'},
+ 'relations': {'patternProperties': {'.*': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'status': {'$ref': '#/definitions/DetailedStatus'}},
+ 'required': ['offer-url',
+ 'offer-name',
+ 'endpoints',
+ 'life',
+ 'relations',
+ 'status'],
+ 'type': 'object'},
+ 'RemoteEndpoint': {'additionalProperties': False,
+ 'properties': {'interface': {'type': 'string'},
+ 'limit': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'role': {'type': 'string'}},
+ 'required': ['name',
+ 'role',
+ 'interface',
+ 'limit'],
+ 'type': 'object'},
+ 'ResolveCharmResult': {'additionalProperties': False,
+ 'properties': {'error': {'type': 'string'},
+ 'url': {'type': 'string'}},
+ 'type': 'object'},
+ 'ResolveCharmResults': {'additionalProperties': False,
+ 'properties': {'urls': {'items': {'$ref': '#/definitions/ResolveCharmResult'},
+ 'type': 'array'}},
+ 'required': ['urls'],
+ 'type': 'object'},
+ 'ResolveCharms': {'additionalProperties': False,
+ 'properties': {'references': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['references'],
+ 'type': 'object'},
+ 'Resolved': {'additionalProperties': False,
+ 'properties': {'retry': {'type': 'boolean'},
+ 'unit-name': {'type': 'string'}},
+ 'required': ['unit-name', 'retry'],
+ 'type': 'object'},
+ 'SetConstraints': {'additionalProperties': False,
+ 'properties': {'application': {'type': 'string'},
+ 'constraints': {'$ref': '#/definitions/Value'}},
+ 'required': ['application', 'constraints'],
+ 'type': 'object'},
+ 'SetModelAgentVersion': {'additionalProperties': False,
+ 'properties': {'force': {'type': 'boolean'},
+ 'version': {'$ref': '#/definitions/Number'}},
+ 'required': ['version'],
+ 'type': 'object'},
+ 'StatusHistoryFilter': {'additionalProperties': False,
+ 'properties': {'date': {'format': 'date-time',
+ 'type': 'string'},
+ 'delta': {'type': 'integer'},
+ 'exclude': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'size': {'type': 'integer'}},
+ 'required': ['size',
+ 'date',
+ 'delta',
+ 'exclude'],
+ 'type': 'object'},
+ 'StatusHistoryRequest': {'additionalProperties': False,
+ 'properties': {'filter': {'$ref': '#/definitions/StatusHistoryFilter'},
+ 'historyKind': {'type': 'string'},
+ 'size': {'type': 'integer'},
+ 'tag': {'type': 'string'}},
+ 'required': ['historyKind',
+ 'size',
+ 'filter',
+ 'tag'],
+ 'type': 'object'},
+ 'StatusHistoryRequests': {'additionalProperties': False,
+ 'properties': {'requests': {'items': {'$ref': '#/definitions/StatusHistoryRequest'},
+ 'type': 'array'}},
+ 'required': ['requests'],
+ 'type': 'object'},
+ 'StatusHistoryResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'history': {'$ref': '#/definitions/History'}},
+ 'required': ['history'],
+ 'type': 'object'},
+ 'StatusHistoryResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StatusHistoryResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'StatusParams': {'additionalProperties': False,
+ 'properties': {'patterns': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['patterns'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'Tools': {'additionalProperties': False,
+ 'properties': {'sha256': {'type': 'string'},
+ 'size': {'type': 'integer'},
+ 'url': {'type': 'string'},
+ 'version': {'$ref': '#/definitions/Binary'}},
+ 'required': ['version', 'url', 'size'],
+ 'type': 'object'},
+ 'UnitStatus': {'additionalProperties': False,
+ 'properties': {'address': {'type': 'string'},
+ 'agent-status': {'$ref': '#/definitions/DetailedStatus'},
+ 'charm': {'type': 'string'},
+ 'leader': {'type': 'boolean'},
+ 'machine': {'type': 'string'},
+ 'opened-ports': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'provider-id': {'type': 'string'},
+ 'public-address': {'type': 'string'},
+ 'subordinates': {'patternProperties': {'.*': {'$ref': '#/definitions/UnitStatus'}},
+ 'type': 'object'},
+ 'workload-status': {'$ref': '#/definitions/DetailedStatus'},
+ 'workload-version': {'type': 'string'}},
+ 'required': ['agent-status',
+ 'workload-status',
+ 'workload-version',
+ 'machine',
+ 'opened-ports',
+ 'public-address',
+ 'charm',
+ 'subordinates'],
+ 'type': 'object'},
+ 'Value': {'additionalProperties': False,
+ 'properties': {'arch': {'type': 'string'},
+ 'container': {'type': 'string'},
+ 'cores': {'type': 'integer'},
+ 'cpu-power': {'type': 'integer'},
+ 'instance-type': {'type': 'string'},
+ 'mem': {'type': 'integer'},
+ 'root-disk': {'type': 'integer'},
+ 'spaces': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'tags': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'virt-type': {'type': 'string'},
+ 'zones': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'}},
+ 'properties': {'APIHostPorts': {'properties': {'Result': {'$ref': '#/definitions/APIHostPortsResult'}},
+ 'type': 'object'},
+ 'AbortCurrentUpgrade': {'type': 'object'},
+ 'AddCharm': {'properties': {'Params': {'$ref': '#/definitions/AddCharm'}},
+ 'type': 'object'},
+ 'AddCharmWithAuthorization': {'properties': {'Params': {'$ref': '#/definitions/AddCharmWithAuthorization'}},
+ 'type': 'object'},
+ 'AddMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+ 'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+ 'type': 'object'},
+ 'AddMachinesV2': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+ 'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+ 'type': 'object'},
+ 'AgentVersion': {'properties': {'Result': {'$ref': '#/definitions/AgentVersionResult'}},
+ 'type': 'object'},
+ 'CACert': {'properties': {'Result': {'$ref': '#/definitions/BytesResult'}},
+ 'type': 'object'},
+ 'DestroyMachines': {'properties': {'Params': {'$ref': '#/definitions/DestroyMachines'}},
+ 'type': 'object'},
+ 'FindTools': {'properties': {'Params': {'$ref': '#/definitions/FindToolsParams'},
+ 'Result': {'$ref': '#/definitions/FindToolsResult'}},
+ 'type': 'object'},
+ 'FullStatus': {'properties': {'Params': {'$ref': '#/definitions/StatusParams'},
+ 'Result': {'$ref': '#/definitions/FullStatus'}},
+ 'type': 'object'},
+ 'GetBundleChanges': {'properties': {'Params': {'$ref': '#/definitions/BundleChangesParams'},
+ 'Result': {'$ref': '#/definitions/BundleChangesResults'}},
+ 'type': 'object'},
+ 'GetModelConstraints': {'properties': {'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+ 'type': 'object'},
+ 'InjectMachines': {'properties': {'Params': {'$ref': '#/definitions/AddMachines'},
+ 'Result': {'$ref': '#/definitions/AddMachinesResults'}},
+ 'type': 'object'},
+ 'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
+ 'type': 'object'},
+ 'ModelInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelInfo'}},
+ 'type': 'object'},
+ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}},
+ 'type': 'object'},
+ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}},
+ 'type': 'object'},
+ 'ModelUserInfo': {'properties': {'Result': {'$ref': '#/definitions/ModelUserInfoResults'}},
+ 'type': 'object'},
+ 'PrivateAddress': {'properties': {'Params': {'$ref': '#/definitions/PrivateAddress'},
+ 'Result': {'$ref': '#/definitions/PrivateAddressResults'}},
+ 'type': 'object'},
+ 'ProvisioningScript': {'properties': {'Params': {'$ref': '#/definitions/ProvisioningScriptParams'},
+ 'Result': {'$ref': '#/definitions/ProvisioningScriptResult'}},
+ 'type': 'object'},
+ 'PublicAddress': {'properties': {'Params': {'$ref': '#/definitions/PublicAddress'},
+ 'Result': {'$ref': '#/definitions/PublicAddressResults'}},
+ 'type': 'object'},
+ 'ResolveCharms': {'properties': {'Params': {'$ref': '#/definitions/ResolveCharms'},
+ 'Result': {'$ref': '#/definitions/ResolveCharmResults'}},
+ 'type': 'object'},
+ 'Resolved': {'properties': {'Params': {'$ref': '#/definitions/Resolved'}},
+ 'type': 'object'},
+ 'RetryProvisioning': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'SetModelAgentVersion': {'properties': {'Params': {'$ref': '#/definitions/SetModelAgentVersion'}},
+ 'type': 'object'},
+ 'SetModelConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+ 'type': 'object'},
+ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}},
+ 'type': 'object'},
+ 'StatusHistory': {'properties': {'Params': {'$ref': '#/definitions/StatusHistoryRequests'},
+ 'Result': {'$ref': '#/definitions/StatusHistoryResults'}},
+ 'type': 'object'},
+ 'WatchAll': {'properties': {'Result': {'$ref': '#/definitions/AllWatcherId'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(APIHostPortsResult)
+ async def APIHostPorts(self):
+ '''
+
+ Returns -> typing.Sequence[~HostPort]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='APIHostPorts',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def AbortCurrentUpgrade(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AbortCurrentUpgrade',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def AddCharm(self, channel, url):
+ '''
+ channel : str
+ url : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AddCharm',
+ version=2,
+ params=_params)
+ _params['channel'] = channel
+ _params['url'] = url
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def AddCharmWithAuthorization(self, channel, macaroon, url):
+ '''
+ channel : str
+ macaroon : Macaroon
+ url : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AddCharmWithAuthorization',
+ version=2,
+ params=_params)
+ _params['channel'] = channel
+ _params['macaroon'] = macaroon
+ _params['url'] = url
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AddMachinesResults)
+ async def AddMachines(self, params):
+ '''
+ params : typing.Sequence[~AddMachineParams]
+ Returns -> typing.Sequence[~AddMachinesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AddMachines',
+ version=2,
+ params=_params)
+ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AddMachinesResults)
+ async def AddMachinesV2(self, params):
+ '''
+ params : typing.Sequence[~AddMachineParams]
+ Returns -> typing.Sequence[~AddMachinesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AddMachinesV2',
+ version=2,
+ params=_params)
+ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AgentVersionResult)
+ async def AgentVersion(self):
+ '''
+
+ Returns -> Number
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='AgentVersion',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BytesResult)
+ async def CACert(self):
+ '''
+
+ Returns -> typing.Sequence[int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='CACert',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def DestroyMachines(self, force, machine_names):
+ '''
+ force : bool
+ machine_names : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='DestroyMachines',
+ version=2,
+ params=_params)
+ _params['force'] = force
+ _params['machine-names'] = machine_names
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(FindToolsResult)
+ async def FindTools(self, arch, major, minor, number, series):
+ '''
+ arch : str
+ major : int
+ minor : int
+ number : Number
+ series : str
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='FindTools',
+ version=2,
+ params=_params)
+ _params['arch'] = arch
+ _params['major'] = major
+ _params['minor'] = minor
+ _params['number'] = number
+ _params['series'] = series
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(FullStatus)
+ async def FullStatus(self, patterns):
+ '''
+ patterns : typing.Sequence[str]
+ Returns -> typing.Union[typing.Mapping[str, ~ApplicationStatus], str, typing.Mapping[str, ~MachineStatus], _ForwardRef('ModelStatusInfo'), typing.Mapping[str, ~ApplicationOfferStatus], typing.Sequence[~RelationStatus], typing.Mapping[str, ~RemoteApplicationStatus]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='FullStatus',
+ version=2,
+ params=_params)
+ _params['patterns'] = patterns
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(BundleChangesResults)
+ async def GetBundleChanges(self, yaml):
+ '''
+ yaml : str
+ Returns -> typing.Union[typing.Sequence[~BundleChange], typing.Sequence[str]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='GetBundleChanges',
+ version=2,
+ params=_params)
+ _params['yaml'] = yaml
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(GetConstraintsResults)
+ async def GetModelConstraints(self):
+ '''
+
+ Returns -> Value
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='GetModelConstraints',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AddMachinesResults)
+ async def InjectMachines(self, params):
+ '''
+ params : typing.Sequence[~AddMachineParams]
+ Returns -> typing.Sequence[~AddMachinesResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='InjectMachines',
+ version=2,
+ params=_params)
+ _params['params'] = params
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelConfigResults)
+ async def ModelGet(self):
+ '''
+
+ Returns -> typing.Mapping[str, ~ConfigValue]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ModelGet',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelInfo)
+ async def ModelInfo(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ModelInfo',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def ModelSet(self, config):
+ '''
+ config : typing.Mapping[str, typing.Any]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ModelSet',
+ version=2,
+ params=_params)
+ _params['config'] = config
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def ModelUnset(self, keys):
+ '''
+ keys : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ModelUnset',
+ version=2,
+ params=_params)
+ _params['keys'] = keys
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelUserInfoResults)
+ async def ModelUserInfo(self):
+ '''
+
+ Returns -> typing.Sequence[~ModelUserInfoResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ModelUserInfo',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(PrivateAddressResults)
+ async def PrivateAddress(self, target):
+ '''
+ target : str
+ Returns -> str
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='PrivateAddress',
+ version=2,
+ params=_params)
+ _params['target'] = target
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ProvisioningScriptResult)
+ async def ProvisioningScript(self, data_dir, disable_package_commands, machine_id, nonce):
+ '''
+ data_dir : str
+ disable_package_commands : bool
+ machine_id : str
+ nonce : str
+ Returns -> str
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ProvisioningScript',
+ version=2,
+ params=_params)
+ _params['data-dir'] = data_dir
+ _params['disable-package-commands'] = disable_package_commands
+ _params['machine-id'] = machine_id
+ _params['nonce'] = nonce
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(PublicAddressResults)
+ async def PublicAddress(self, target):
+ '''
+ target : str
+ Returns -> str
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='PublicAddress',
+ version=2,
+ params=_params)
+ _params['target'] = target
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ResolveCharmResults)
+ async def ResolveCharms(self, references):
+ '''
+ references : typing.Sequence[str]
+ Returns -> typing.Sequence[~ResolveCharmResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='ResolveCharms',
+ version=2,
+ params=_params)
+ _params['references'] = references
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Resolved(self, retry, unit_name):
+ '''
+ retry : bool
+ unit_name : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='Resolved',
+ version=2,
+ params=_params)
+ _params['retry'] = retry
+ _params['unit-name'] = unit_name
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def RetryProvisioning(self, entities):
'''
- url : str
- Returns -> typing.Union[_ForwardRef('CharmActions'), typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption>, _ForwardRef('CharmMeta'), _ForwardRef('CharmMetrics'), int, str]
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Charms', request='CharmInfo', version=2, params=_params)
- _params['url'] = url
+ msg = dict(type='Client',
+ request='RetryProvisioning',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(IsMeteredResult)
- async def IsMetered(self, url):
+ @ReturnMapping(StringResult)
+ async def SLALevel(self):
'''
- url : str
- Returns -> bool
+
+ Returns -> typing.Union[_ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Charms', request='IsMetered', version=2, params=_params)
- _params['url'] = url
+ msg = dict(type='Client',
+ request='SLALevel',
+ version=2,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(CharmsListResult)
- async def List(self, names):
+ @ReturnMapping(None)
+ async def SetModelAgentVersion(self, version):
'''
- names : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[str]
+ version : Number
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Charms', request='List', version=2, params=_params)
- _params['names'] = names
+ msg = dict(type='Client',
+ request='SetModelAgentVersion',
+ version=2,
+ params=_params)
+ _params['version'] = version
reply = await self.rpc(msg)
return reply
-class CleanerFacade(Type):
- name = 'Cleaner'
+ @ReturnMapping(None)
+ async def SetModelConstraints(self, application, constraints):
+ '''
+ application : str
+ constraints : Value
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='SetModelConstraints',
+ version=2,
+ params=_params)
+ _params['application'] = application
+ _params['constraints'] = constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def SetSLALevel(self, creds, level):
+ '''
+ creds : typing.Sequence[int]
+ level : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='SetSLALevel',
+ version=2,
+ params=_params)
+ _params['creds'] = creds
+ _params['level'] = level
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StatusHistoryResults)
+ async def StatusHistory(self, requests):
+ '''
+ requests : typing.Sequence[~StatusHistoryRequest]
+ Returns -> typing.Sequence[~StatusHistoryResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='StatusHistory',
+ version=2,
+ params=_params)
+ _params['requests'] = requests
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AllWatcherId)
+ async def WatchAll(self):
+ '''
+
+ Returns -> str
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Client',
+ request='WatchAll',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CredentialValidatorFacade(Type):
+ name = 'CredentialValidator'
version = 2
- schema = {'definitions': {'Error': {'additionalProperties': False,
+ schema = {'definitions': {'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
'properties': {'code': {'type': 'string'},
'info': {'$ref': '#/definitions/ErrorInfo'},
'message': {'type': 'string'}},
'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
'macaroon-path': {'type': 'string'}},
'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'InvalidateCredentialArg': {'additionalProperties': False,
+ 'properties': {'reason': {'type': 'string'}},
+ 'type': 'object'},
'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'ModelCredential': {'additionalProperties': False,
+ 'properties': {'credential-tag': {'type': 'string'},
+ 'exists': {'type': 'boolean'},
+ 'model-tag': {'type': 'string'},
+ 'valid': {'type': 'boolean'}},
+ 'required': ['model-tag',
+ 'credential-tag'],
+ 'type': 'object'},
'NotifyWatchResult': {'additionalProperties': False,
'properties': {'NotifyWatcherId': {'type': 'string'},
'error': {'$ref': '#/definitions/Error'}},
'required': ['NotifyWatcherId'],
'type': 'object'}},
- 'properties': {'Cleanup': {'type': 'object'},
- 'WatchCleanups': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
- 'type': 'object'}},
+ 'properties': {'InvalidateModelCredential': {'properties': {'Params': {'$ref': '#/definitions/InvalidateCredentialArg'},
+ 'Result': {'$ref': '#/definitions/ErrorResult'}},
+ 'type': 'object'},
+ 'ModelCredential': {'properties': {'Result': {'$ref': '#/definitions/ModelCredential'}},
+ 'type': 'object'},
+ 'WatchCredential': {'properties': {'Params': {'$ref': '#/definitions/Entity'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'},
+ 'WatchModelCredential': {'properties': {'Result': {'$ref': '#/definitions/NotifyWatchResult'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(None)
- async def Cleanup(self):
+ @ReturnMapping(ErrorResult)
+ async def InvalidateModelCredential(self, reason):
+ '''
+ reason : str
+ Returns -> Error
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CredentialValidator',
+ request='InvalidateModelCredential',
+ version=2,
+ params=_params)
+ _params['reason'] = reason
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelCredential)
+ async def ModelCredential(self):
'''
- Returns -> None
+ Returns -> typing.Union[str, bool]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cleaner', request='Cleanup', version=2, params=_params)
+ msg = dict(type='CredentialValidator',
+ request='ModelCredential',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResult)
- async def WatchCleanups(self):
+ async def WatchCredential(self, tag):
+ '''
+ tag : str
+ Returns -> typing.Union[str, _ForwardRef('Error')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='CredentialValidator',
+ request='WatchCredential',
+ version=2,
+ params=_params)
+ _params['tag'] = tag
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(NotifyWatchResult)
+ async def WatchModelCredential(self):
'''
Returns -> typing.Union[str, _ForwardRef('Error')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Cleaner', request='WatchCleanups', version=2, params=_params)
+ msg = dict(type='CredentialValidator',
+ request='WatchModelCredential',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddSubnets(self, subnets):
'''
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ subnets : typing.Sequence[~AddSubnetParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiscoverSpaces', request='AddSubnets', version=2, params=_params)
+ msg = dict(type='DiscoverSpaces',
+ request='AddSubnets',
+ version=2,
+ params=_params)
_params['subnets'] = subnets
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def CreateSpaces(self, spaces):
'''
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ spaces : typing.Sequence[~CreateSpaceParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiscoverSpaces', request='CreateSpaces', version=2, params=_params)
+ msg = dict(type='DiscoverSpaces',
+ request='CreateSpaces',
+ version=2,
+ params=_params)
_params['spaces'] = spaces
reply = await self.rpc(msg)
return reply
async def ListSpaces(self):
'''
- Returns -> typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
+ Returns -> typing.Sequence[~ProviderSpace]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiscoverSpaces', request='ListSpaces', version=2, params=_params)
+ msg = dict(type='DiscoverSpaces',
+ request='ListSpaces',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
space_tag : str
zone : str
- Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ Returns -> typing.Sequence[~Subnet]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiscoverSpaces', request='ListSubnets', version=2, params=_params)
+ msg = dict(type='DiscoverSpaces',
+ request='ListSubnets',
+ version=2,
+ params=_params)
_params['space-tag'] = space_tag
_params['zone'] = zone
reply = await self.rpc(msg)
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiscoverSpaces', request='ModelConfig', version=2, params=_params)
+ msg = dict(type='DiscoverSpaces',
+ request='ModelConfig',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetMachineBlockDevices(self, machine_block_devices):
'''
- machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ machine_block_devices : typing.Sequence[~MachineBlockDevices]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='DiskManager', request='SetMachineBlockDevices', version=2, params=_params)
+ msg = dict(type='DiskManager',
+ request='SetMachineBlockDevices',
+ version=2,
+ params=_params)
_params['machine-block-devices'] = machine_block_devices
reply = await self.rpc(msg)
return reply
async def Next(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='EntityWatcher', request='Next', version=2, params=_params)
+ msg = dict(type='EntityWatcher',
+ request='Next',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='EntityWatcher', request='Stop', version=2, params=_params)
+ msg = dict(type='EntityWatcher',
+ request='Stop',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def Next(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='FilesystemAttachmentsWatcher', request='Next', version=2, params=_params)
+ msg = dict(type='FilesystemAttachmentsWatcher',
+ request='Next',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='FilesystemAttachmentsWatcher', request='Stop', version=2, params=_params)
+ msg = dict(type='FilesystemAttachmentsWatcher',
+ request='Stop',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'Macaroon': {'additionalProperties': False, 'type': 'object'},
'Member': {'additionalProperties': False,
'properties': {'Address': {'type': 'string'},
- 'Arbiter': {'type': 'boolean'},
- 'BuildIndexes': {'type': 'boolean'},
- 'Hidden': {'type': 'boolean'},
'Id': {'type': 'integer'},
'Priority': {'type': 'number'},
- 'SlaveDelay': {'type': 'integer'},
'Tags': {'patternProperties': {'.*': {'type': 'string'}},
'type': 'object'},
'Votes': {'type': 'integer'}},
'required': ['Id',
'Address',
- 'Arbiter',
- 'BuildIndexes',
- 'Hidden',
'Priority',
'Tags',
- 'SlaveDelay',
'Votes'],
'type': 'object'},
'MongoUpgradeResults': {'additionalProperties': False,
'type': 'array'},
'tags': {'items': {'type': 'string'},
'type': 'array'},
- 'virt-type': {'type': 'string'}},
+ 'virt-type': {'type': 'string'},
+ 'zones': {'items': {'type': 'string'},
+ 'type': 'array'}},
'type': 'object'}},
'properties': {'EnableHA': {'properties': {'Params': {'$ref': '#/definitions/ControllersSpecs'},
'Result': {'$ref': '#/definitions/ControllersChangeResults'}},
@ReturnMapping(ControllersChangeResults)
async def EnableHA(self, specs):
'''
- specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
- Returns -> typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
+ specs : typing.Sequence[~ControllersSpec]
+ Returns -> typing.Sequence[~ControllersChangeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='HighAvailability', request='EnableHA', version=2, params=_params)
+ msg = dict(type='HighAvailability',
+ request='EnableHA',
+ version=2,
+ params=_params)
_params['specs'] = specs
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def ResumeHAReplicationAfterUpgrade(self, members):
'''
- members : typing.Sequence<+T_co>[~Member]<~Member>
+ members : typing.Sequence[~Member]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='HighAvailability', request='ResumeHAReplicationAfterUpgrade', version=2, params=_params)
+ msg = dict(type='HighAvailability',
+ request='ResumeHAReplicationAfterUpgrade',
+ version=2,
+ params=_params)
_params['members'] = members
reply = await self.rpc(msg)
return reply
async def StopHAReplicationForUpgrade(self, target):
'''
target : MongoVersion
- Returns -> typing.Union[_ForwardRef('HAMember'), typing.Sequence<+T_co>[~Member]<~Member>]
+ Returns -> typing.Union[typing.Sequence[~HAMember], _ForwardRef('HAMember'), typing.Sequence[~Member]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='HighAvailability', request='StopHAReplicationForUpgrade', version=2, params=_params)
+ msg = dict(type='HighAvailability',
+ request='StopHAReplicationForUpgrade',
+ version=2,
+ params=_params)
_params['target'] = target
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DeleteImages(self, images):
'''
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ images : typing.Sequence[~ImageSpec]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageManager', request='DeleteImages', version=2, params=_params)
+ msg = dict(type='ImageManager',
+ request='DeleteImages',
+ version=2,
+ params=_params)
_params['images'] = images
reply = await self.rpc(msg)
return reply
@ReturnMapping(ListImageResult)
async def ListImages(self, images):
'''
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
- Returns -> typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata>
+ images : typing.Sequence[~ImageSpec]
+ Returns -> typing.Sequence[~ImageMetadata]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageManager', request='ListImages', version=2, params=_params)
+ msg = dict(type='ImageManager',
+ request='ListImages',
+ version=2,
+ params=_params)
_params['images'] = images
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Delete(self, image_ids):
'''
- image_ids : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ image_ids : typing.Sequence[str]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageMetadata', request='Delete', version=2, params=_params)
+ msg = dict(type='ImageMetadata',
+ request='Delete',
+ version=2,
+ params=_params)
_params['image-ids'] = image_ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ListCloudImageMetadataResult)
async def List(self, arches, region, root_storage_type, series, stream, virt_type):
'''
- arches : typing.Sequence<+T_co>[str]
+ arches : typing.Sequence[str]
region : str
root_storage_type : str
- series : typing.Sequence<+T_co>[str]
+ series : typing.Sequence[str]
stream : str
virt_type : str
- Returns -> typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+ Returns -> typing.Sequence[~CloudImageMetadata]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageMetadata', request='List', version=2, params=_params)
+ msg = dict(type='ImageMetadata',
+ request='List',
+ version=2,
+ params=_params)
_params['arches'] = arches
_params['region'] = region
_params['root-storage-type'] = root_storage_type
@ReturnMapping(ErrorResults)
async def Save(self, metadata):
'''
- metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ metadata : typing.Sequence[~CloudImageMetadataList]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageMetadata', request='Save', version=2, params=_params)
+ msg = dict(type='ImageMetadata',
+ request='Save',
+ version=2,
+ params=_params)
_params['metadata'] = metadata
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ImageMetadata', request='UpdateFromPublishedImages', version=2, params=_params)
+ msg = dict(type='ImageMetadata',
+ request='UpdateFromPublishedImages',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='LeadershipService', request='BlockUntilLeadershipReleased', version=2, params=_params)
+ msg = dict(type='LeadershipService',
+ request='BlockUntilLeadershipReleased',
+ version=2,
+ params=_params)
_params['Name'] = name
reply = await self.rpc(msg)
return reply
@ReturnMapping(ClaimLeadershipBulkResults)
async def ClaimLeadership(self, params):
'''
- params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ params : typing.Sequence[~ClaimLeadershipParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='LeadershipService', request='ClaimLeadership', version=2, params=_params)
+ msg = dict(type='LeadershipService',
+ request='ClaimLeadership',
+ version=2,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddMachinesResults)
async def AddMachines(self, params):
'''
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+ params : typing.Sequence[~AddMachineParams]
+ Returns -> typing.Sequence[~AddMachinesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='AddMachines', version=2, params=_params)
+ msg = dict(type='MachineManager',
+ request='AddMachines',
+ version=2,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(InstanceTypesResults)
async def InstanceTypes(self, constraints):
'''
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
+ constraints : typing.Sequence[~ModelInstanceTypesConstraint]
+ Returns -> typing.Sequence[~InstanceTypesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='InstanceTypes', version=2, params=_params)
+ msg = dict(type='MachineManager',
+ request='InstanceTypes',
+ version=2,
+ params=_params)
_params['constraints'] = constraints
reply = await self.rpc(msg)
return reply
'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'}},
@ReturnMapping(ErrorResults)
async def AddMetricBatches(self, batches):
'''
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ batches : typing.Sequence[~MetricBatchParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MetricsAdder', request='AddMetricBatches', version=2, params=_params)
+ msg = dict(type='MetricsAdder',
+ request='AddMetricBatches',
+ version=2,
+ params=_params)
_params['batches'] = batches
reply = await self.rpc(msg)
return reply
'properties': {'code': {'type': 'string'},
'info': {'type': 'string'},
'tag': {'type': 'string'}},
- 'required': ['tag', 'code', 'info'],
+ 'required': ['tag', 'code'],
'type': 'object'},
'MeterStatusParams': {'additionalProperties': False,
'properties': {'statues': {'items': {'$ref': '#/definitions/MeterStatusParam'},
'type': 'object'},
'MetricResult': {'additionalProperties': False,
'properties': {'key': {'type': 'string'},
+ 'labels': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
'time': {'format': 'date-time',
'type': 'string'},
'unit': {'type': 'string'},
'value': {'type': 'string'}},
- 'required': ['time', 'key', 'value', 'unit'],
+ 'required': ['time',
+ 'key',
+ 'value',
+ 'unit',
+ 'labels'],
'type': 'object'},
'MetricResults': {'additionalProperties': False,
'properties': {'results': {'items': {'$ref': '#/definitions/EntityMetrics'},
@ReturnMapping(MetricResults)
async def GetMetrics(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~EntityMetrics]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MetricsDebug', request='GetMetrics', version=2, params=_params)
+ msg = dict(type='MetricsDebug',
+ request='GetMetrics',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetMeterStatus(self, statues):
'''
- statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ statues : typing.Sequence[~MeterStatusParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MetricsDebug', request='SetMeterStatus', version=2, params=_params)
+ msg = dict(type='MetricsDebug',
+ request='SetMeterStatus',
+ version=2,
+ params=_params)
_params['statues'] = statues
reply = await self.rpc(msg)
return reply
+class ModelConfigFacade(Type):
+ name = 'ModelConfig'
+ version = 2
+ schema = {'definitions': {'ConfigValue': {'additionalProperties': False,
+ 'properties': {'source': {'type': 'string'},
+ 'value': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'required': ['value', 'source'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'ModelConfigResults': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'$ref': '#/definitions/ConfigValue'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'ModelSLA': {'additionalProperties': False,
+ 'properties': {'ModelSLAInfo': {'$ref': '#/definitions/ModelSLAInfo'},
+ 'creds': {'items': {'type': 'integer'},
+ 'type': 'array'}},
+ 'required': ['ModelSLAInfo', 'creds'],
+ 'type': 'object'},
+ 'ModelSLAInfo': {'additionalProperties': False,
+ 'properties': {'level': {'type': 'string'},
+ 'owner': {'type': 'string'}},
+ 'required': ['level', 'owner'],
+ 'type': 'object'},
+ 'ModelSequencesResult': {'additionalProperties': False,
+ 'properties': {'sequences': {'patternProperties': {'.*': {'type': 'integer'}},
+ 'type': 'object'}},
+ 'required': ['sequences'],
+ 'type': 'object'},
+ 'ModelSet': {'additionalProperties': False,
+ 'properties': {'config': {'patternProperties': {'.*': {'additionalProperties': True,
+ 'type': 'object'}},
+ 'type': 'object'}},
+ 'required': ['config'],
+ 'type': 'object'},
+ 'ModelUnset': {'additionalProperties': False,
+ 'properties': {'keys': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['keys'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'}},
+ 'properties': {'ModelGet': {'properties': {'Result': {'$ref': '#/definitions/ModelConfigResults'}},
+ 'type': 'object'},
+ 'ModelSet': {'properties': {'Params': {'$ref': '#/definitions/ModelSet'}},
+ 'type': 'object'},
+ 'ModelUnset': {'properties': {'Params': {'$ref': '#/definitions/ModelUnset'}},
+ 'type': 'object'},
+ 'SLALevel': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'Sequences': {'properties': {'Result': {'$ref': '#/definitions/ModelSequencesResult'}},
+ 'type': 'object'},
+ 'SetSLALevel': {'properties': {'Params': {'$ref': '#/definitions/ModelSLA'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(ModelConfigResults)
+ async def ModelGet(self):
+ '''
+
+ Returns -> typing.Mapping[str, ~ConfigValue]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='ModelGet',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def ModelSet(self, config):
+ '''
+ config : typing.Mapping[str, typing.Any]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='ModelSet',
+ version=2,
+ params=_params)
+ _params['config'] = config
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def ModelUnset(self, keys):
+ '''
+ keys : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='ModelUnset',
+ version=2,
+ params=_params)
+ _params['keys'] = keys
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResult)
+ async def SLALevel(self):
+ '''
+
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='SLALevel',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ModelSequencesResult)
+ async def Sequences(self):
+ '''
+
+ Returns -> typing.Mapping[str, int]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='Sequences',
+ version=2,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def SetSLALevel(self, creds, level):
+ '''
+ creds : typing.Sequence[int]
+ level : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelConfig',
+ request='SetSLALevel',
+ version=2,
+ params=_params)
+ _params['creds'] = creds
+ _params['level'] = level
+ reply = await self.rpc(msg)
+ return reply
+
+
+
class ModelManagerFacade(Type):
name = 'ModelManager'
version = 2
async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region):
'''
cloud_tag : str
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
credential : str
name : str
owner_tag : str
region : str
- Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
+ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='CreateModel', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='CreateModel',
+ version=2,
+ params=_params)
_params['cloud-tag'] = cloud_tag
_params['config'] = config
_params['credential'] = credential
@ReturnMapping(ErrorResults)
async def DestroyModels(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DestroyModels', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='DestroyModels',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(MapResults)
async def DumpModels(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MapResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DumpModels', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='DumpModels',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(MapResults)
async def DumpModelsDB(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MapResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DumpModelsDB', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='DumpModelsDB',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ListModels(self, tag):
'''
tag : str
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+ Returns -> typing.Sequence[~UserModel]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ListModels', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='ListModels',
+ version=2,
+ params=_params)
_params['tag'] = tag
reply = await self.rpc(msg)
return reply
async def ModelDefaults(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+ Returns -> typing.Mapping[str, ~ModelDefaults]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelDefaults', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModelDefaults',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ModelInfoResults)
async def ModelInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ModelInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelInfo', version=2, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModelInfo',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ModelStatusResults)
async def ModelStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ModelStatus]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelManager',
+ request='ModelStatus',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def ModifyModelAccess(self, changes):
+ '''
+ changes : typing.Sequence[~ModifyModelAccess]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ModelManager',
+ request='ModifyModelAccess',
+ version=2,
+ params=_params)
+ _params['changes'] = changes
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetModelDefaults(self, config):
+ '''
+ config : typing.Sequence[~ModelDefaultValues]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelStatus', version=2, params=_params)
- _params['entities'] = entities
+ msg = dict(type='ModelManager',
+ request='SetModelDefaults',
+ version=2,
+ params=_params)
+ _params['config'] = config
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def ModifyModelAccess(self, changes):
+ async def UnsetModelDefaults(self, keys):
'''
- changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ keys : typing.Sequence[~ModelUnsetKeys]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModifyModelAccess', version=2, params=_params)
- _params['changes'] = changes
+ msg = dict(type='ModelManager',
+ request='UnsetModelDefaults',
+ version=2,
+ params=_params)
+ _params['keys'] = keys
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def SetModelDefaults(self, config):
+class ProxyUpdaterFacade(Type):
+ name = 'ProxyUpdater'
+ version = 2
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'NotifyWatchResult': {'additionalProperties': False,
+ 'properties': {'NotifyWatcherId': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'required': ['NotifyWatcherId'],
+ 'type': 'object'},
+ 'NotifyWatchResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/NotifyWatchResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'ProxyConfig': {'additionalProperties': False,
+ 'properties': {'ftp': {'type': 'string'},
+ 'http': {'type': 'string'},
+ 'https': {'type': 'string'},
+ 'no-proxy': {'type': 'string'}},
+ 'required': ['http',
+ 'https',
+ 'ftp',
+ 'no-proxy'],
+ 'type': 'object'},
+ 'ProxyConfigResult': {'additionalProperties': False,
+ 'properties': {'apt-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'juju-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
+ 'legacy-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
+ 'snap-proxy-settings': {'$ref': '#/definitions/ProxyConfig'},
+ 'snap-store-assertions': {'type': 'string'},
+ 'snap-store-id': {'type': 'string'}},
+ 'required': ['legacy-proxy-settings',
+ 'juju-proxy-settings'],
+ 'type': 'object'},
+ 'ProxyConfigResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ProxyConfigResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'}},
+ 'properties': {'ProxyConfig': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ProxyConfigResults'}},
+ 'type': 'object'},
+ 'WatchForProxyConfigAndAPIHostPortChanges': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/NotifyWatchResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(ProxyConfigResults)
+ async def ProxyConfig(self, entities):
'''
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ProxyConfigResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='SetModelDefaults', version=2, params=_params)
- _params['config'] = config
+ msg = dict(type='ProxyUpdater',
+ request='ProxyConfig',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def UnsetModelDefaults(self, keys):
+ @ReturnMapping(NotifyWatchResults)
+ async def WatchForProxyConfigAndAPIHostPortChanges(self, entities):
'''
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='UnsetModelDefaults', version=2, params=_params)
- _params['keys'] = keys
+ msg = dict(type='ProxyUpdater',
+ request='WatchForProxyConfigAndAPIHostPortChanges',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ClearReboot(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Reboot', request='ClearReboot', version=2, params=_params)
+ msg = dict(type='Reboot',
+ request='ClearReboot',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(RebootActionResults)
async def GetRebootAction(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~RebootActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Reboot', request='GetRebootAction', version=2, params=_params)
+ msg = dict(type='Reboot',
+ request='GetRebootAction',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RequestReboot(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Reboot', request='RequestReboot', version=2, params=_params)
+ msg = dict(type='Reboot',
+ request='RequestReboot',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Reboot', request='WatchForRebootEvent', version=2, params=_params)
+ msg = dict(type='Reboot',
+ request='WatchForRebootEvent',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Resumer', request='ResumeTransactions', version=2, params=_params)
+ msg = dict(type='Resumer',
+ request='ResumeTransactions',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(SSHAddressesResults)
async def AllAddresses(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHAddressesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='AllAddresses', version=2, params=_params)
+ msg = dict(type='SSHClient',
+ request='AllAddresses',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(SSHAddressResults)
async def PrivateAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHAddressResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PrivateAddress', version=2, params=_params)
+ msg = dict(type='SSHClient',
+ request='PrivateAddress',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='Proxy', version=2, params=_params)
+ msg = dict(type='SSHClient',
+ request='Proxy',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(SSHAddressResults)
async def PublicAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHAddressResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PublicAddress', version=2, params=_params)
+ msg = dict(type='SSHClient',
+ request='PublicAddress',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(SSHPublicKeysResults)
async def PublicKeys(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~SSHPublicKeysResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='SSHClient',
+ request='PublicKeys',
+ version=2,
+ params=_params)
+ _params['entities'] = entities
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class SingularFacade(Type):
+ name = 'Singular'
+ version = 2
+ schema = {'definitions': {'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'SingularClaim': {'additionalProperties': False,
+ 'properties': {'claimant-tag': {'type': 'string'},
+ 'duration': {'type': 'integer'},
+ 'entity-tag': {'type': 'string'}},
+ 'required': ['entity-tag',
+ 'claimant-tag',
+ 'duration'],
+ 'type': 'object'},
+ 'SingularClaims': {'additionalProperties': False,
+ 'properties': {'claims': {'items': {'$ref': '#/definitions/SingularClaim'},
+ 'type': 'array'}},
+ 'required': ['claims'],
+ 'type': 'object'}},
+ 'properties': {'Claim': {'properties': {'Params': {'$ref': '#/definitions/SingularClaims'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Wait': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(ErrorResults)
+ async def Claim(self, claims):
+ '''
+ claims : typing.Sequence[~SingularClaim]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Singular',
+ request='Claim',
+ version=2,
+ params=_params)
+ _params['claims'] = claims
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Wait(self, entities):
+ '''
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='SSHClient', request='PublicKeys', version=2, params=_params)
+ msg = dict(type='Singular',
+ request='Wait',
+ version=2,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def CreateSpaces(self, spaces):
'''
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ spaces : typing.Sequence[~CreateSpaceParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Spaces', request='CreateSpaces', version=2, params=_params)
+ msg = dict(type='Spaces',
+ request='CreateSpaces',
+ version=2,
+ params=_params)
_params['spaces'] = spaces
reply = await self.rpc(msg)
return reply
async def ListSpaces(self):
'''
- Returns -> typing.Sequence<+T_co>[~Space]<~Space>
+ Returns -> typing.Sequence[~Space]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Spaces', request='ListSpaces', version=2, params=_params)
+ msg = dict(type='Spaces',
+ request='ListSpaces',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StatusHistory', request='ModelConfig', version=2, params=_params)
+ msg = dict(type='StatusHistory',
+ request='ModelConfig',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StatusHistory', request='Prune', version=2, params=_params)
+ msg = dict(type='StatusHistory',
+ request='Prune',
+ version=2,
+ params=_params)
_params['max-history-mb'] = max_history_mb
_params['max-history-time'] = max_history_time
reply = await self.rpc(msg)
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StatusHistory', request='WatchForModelConfigChanges', version=2, params=_params)
+ msg = dict(type='StatusHistory',
+ request='WatchForModelConfigChanges',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddSubnets(self, subnets):
'''
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ subnets : typing.Sequence[~AddSubnetParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Subnets', request='AddSubnets', version=2, params=_params)
+ msg = dict(type='Subnets',
+ request='AddSubnets',
+ version=2,
+ params=_params)
_params['subnets'] = subnets
reply = await self.rpc(msg)
return reply
async def AllSpaces(self):
'''
- Returns -> typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
+ Returns -> typing.Sequence[~SpaceResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Subnets', request='AllSpaces', version=2, params=_params)
+ msg = dict(type='Subnets',
+ request='AllSpaces',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def AllZones(self):
'''
- Returns -> typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
+ Returns -> typing.Sequence[~ZoneResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Subnets', request='AllZones', version=2, params=_params)
+ msg = dict(type='Subnets',
+ request='AllZones',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
space_tag : str
zone : str
- Returns -> typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ Returns -> typing.Sequence[~Subnet]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Subnets', request='ListSubnets', version=2, params=_params)
+ msg = dict(type='Subnets',
+ request='ListSubnets',
+ version=2,
+ params=_params)
_params['space-tag'] = space_tag
_params['zone'] = zone
reply = await self.rpc(msg)
+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
async def Next(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>, _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[~MachineStorageId], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='VolumeAttachmentsWatcher', request='Next', version=2, params=_params)
+ msg = dict(type='VolumeAttachmentsWatcher',
+ request='Next',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='VolumeAttachmentsWatcher', request='Stop', version=2, params=_params)
+ msg = dict(type='VolumeAttachmentsWatcher',
+ request='Stop',
+ version=2,
+ params=_params)
reply = await self.rpc(msg)
return reply
from juju.client._definitions import *
+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
'type': 'array'},
'tags': {'items': {'type': 'string'},
'type': 'array'},
- 'virt-type': {'type': 'string'}},
+ 'virt-type': {'type': 'string'}},
+ 'type': 'object'}},
+ 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
+ 'Result': {'$ref': '#/definitions/AddRelationResults'}},
+ 'type': 'object'},
+ 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
+ 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+ 'type': 'object'},
+ 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
+ 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+ 'type': 'object'},
+ 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
+ 'type': 'object'},
+ 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
+ 'type': 'object'},
+ 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+ 'type': 'object'},
+ 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
+ 'type': 'object'},
+ 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+ 'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
+ 'type': 'object'},
+ 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
+ 'Result': {'$ref': '#/definitions/StringResult'}},
+ 'type': 'object'},
+ 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
+ 'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
+ 'type': 'object'},
+ 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
+ 'type': 'object'},
+ 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
+ 'type': 'object'},
+ 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
+ 'type': 'object'},
+ 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
+ 'type': 'object'},
+ 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
+ 'type': 'object'},
+ 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
+ 'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(AddRelationResults)
+ async def AddRelation(self, endpoints):
+ '''
+ endpoints : typing.Sequence[str]
+ Returns -> typing.Mapping[str, ~CharmRelation]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='AddRelation',
+ version=3,
+ params=_params)
+ _params['endpoints'] = endpoints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(AddApplicationUnitsResults)
+ async def AddUnits(self, application, num_units, placement):
+ '''
+ application : str
+ num_units : int
+ placement : typing.Sequence[~Placement]
+ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='AddUnits',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['num-units'] = num_units
+ _params['placement'] = placement
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ApplicationCharmRelationsResults)
+ async def CharmRelations(self, application):
+ '''
+ application : str
+ Returns -> typing.Sequence[str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='CharmRelations',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def Deploy(self, applications):
+ '''
+ applications : typing.Sequence[~ApplicationDeploy]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Deploy',
+ version=3,
+ params=_params)
+ _params['applications'] = applications
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Destroy(self, application):
+ '''
+ application : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Destroy',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def DestroyRelation(self, endpoints):
+ '''
+ endpoints : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='DestroyRelation',
+ version=3,
+ params=_params)
+ _params['endpoints'] = endpoints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def DestroyUnits(self, unit_names):
+ '''
+ unit_names : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='DestroyUnits',
+ version=3,
+ params=_params)
+ _params['unit-names'] = unit_names
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Expose(self, application):
+ '''
+ application : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Expose',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ApplicationGetResults)
+ async def Get(self, application):
+ '''
+ application : str
+ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Get',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(StringResult)
+ async def GetCharmURL(self, application):
+ '''
+ application : str
+ Returns -> typing.Union[_ForwardRef('Error'), str]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='GetCharmURL',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(GetConstraintsResults)
+ async def GetConstraints(self, application):
+ '''
+ application : str
+ Returns -> Value
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='GetConstraints',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Set(self, application, options):
+ '''
+ application : str
+ options : typing.Mapping[str, str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Set',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['options'] = options
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
+ '''
+ application : str
+ channel : str
+ charm_url : str
+ config_settings : typing.Mapping[str, str]
+ config_settings_yaml : str
+ force_series : bool
+ force_units : bool
+ resource_ids : typing.Mapping[str, str]
+ storage_constraints : typing.Mapping[str, ~StorageConstraints]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='SetCharm',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['channel'] = channel
+ _params['charm-url'] = charm_url
+ _params['config-settings'] = config_settings
+ _params['config-settings-yaml'] = config_settings_yaml
+ _params['force-series'] = force_series
+ _params['force-units'] = force_units
+ _params['resource-ids'] = resource_ids
+ _params['storage-constraints'] = storage_constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def SetConstraints(self, application, constraints):
+ '''
+ application : str
+ constraints : Value
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='SetConstraints',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['constraints'] = constraints
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(ErrorResults)
+ async def SetMetricCredentials(self, creds):
+ '''
+ creds : typing.Sequence[~ApplicationMetricCredential]
+ Returns -> typing.Sequence[~ErrorResult]
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='SetMetricCredentials',
+ version=3,
+ params=_params)
+ _params['creds'] = creds
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Unexpose(self, application):
+ '''
+ application : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Unexpose',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Unset(self, application, options):
+ '''
+ application : str
+ options : typing.Sequence[str]
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Unset',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['options'] = options
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+ @ReturnMapping(None)
+ async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
+ '''
+ application : str
+ charm_url : str
+ constraints : Value
+ force_charm_url : bool
+ force_series : bool
+ min_units : int
+ settings : typing.Mapping[str, str]
+ settings_yaml : str
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='Application',
+ request='Update',
+ version=3,
+ params=_params)
+ _params['application'] = application
+ _params['charm-url'] = charm_url
+ _params['constraints'] = constraints
+ _params['force-charm-url'] = force_charm_url
+ _params['force-series'] = force_series
+ _params['min-units'] = min_units
+ _params['settings'] = settings
+ _params['settings-yaml'] = settings_yaml
+ reply = await self.rpc(msg)
+ return reply
+
+
+
+class CloudFacade(Type):
+ name = 'Cloud'
+ version = 3
+ schema = {'definitions': {'AddCloudArgs': {'additionalProperties': False,
+ 'properties': {'cloud': {'$ref': '#/definitions/Cloud'},
+ 'name': {'type': 'string'}},
+ 'required': ['cloud', 'name'],
+ 'type': 'object'},
+ 'Cloud': {'additionalProperties': False,
+ 'properties': {'auth-types': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'ca-certificates': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'endpoint': {'type': 'string'},
+ 'identity-endpoint': {'type': 'string'},
+ 'regions': {'items': {'$ref': '#/definitions/CloudRegion'},
+ 'type': 'array'},
+ 'storage-endpoint': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['type'],
+ 'type': 'object'},
+ 'CloudCredential': {'additionalProperties': False,
+ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'auth-type': {'type': 'string'},
+ 'redacted': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'required': ['auth-type'],
+ 'type': 'object'},
+ 'CloudCredentialArg': {'additionalProperties': False,
+ 'properties': {'cloud-name': {'type': 'string'},
+ 'credential-name': {'type': 'string'}},
+ 'required': ['cloud-name',
+ 'credential-name'],
+ 'type': 'object'},
+ 'CloudCredentialArgs': {'additionalProperties': False,
+ 'properties': {'credentials': {'items': {'$ref': '#/definitions/CloudCredentialArg'},
+ 'type': 'array'},
+ 'include-secrets': {'type': 'boolean'}},
+ 'required': ['include-secrets'],
+ 'type': 'object'},
+ 'CloudCredentialResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/CloudCredential'}},
+ 'type': 'object'},
+ 'CloudCredentialResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudCredentialResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'CloudDetails': {'additionalProperties': False,
+ 'properties': {'auth-types': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'endpoint': {'type': 'string'},
+ 'identity-endpoint': {'type': 'string'},
+ 'regions': {'items': {'$ref': '#/definitions/CloudRegion'},
+ 'type': 'array'},
+ 'storage-endpoint': {'type': 'string'},
+ 'type': {'type': 'string'}},
+ 'required': ['type'],
+ 'type': 'object'},
+ 'CloudInfo': {'additionalProperties': False,
+ 'properties': {'CloudDetails': {'$ref': '#/definitions/CloudDetails'},
+ 'users': {'items': {'$ref': '#/definitions/CloudUserInfo'},
+ 'type': 'array'}},
+ 'required': ['CloudDetails', 'users'],
+ 'type': 'object'},
+ 'CloudInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/CloudInfo'}},
+ 'type': 'object'},
+ 'CloudInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'CloudInstanceTypesConstraint': {'additionalProperties': False,
+ 'properties': {'cloud-tag': {'type': 'string'},
+ 'constraints': {'$ref': '#/definitions/Value'},
+ 'region': {'type': 'string'}},
+ 'required': ['cloud-tag',
+ 'region'],
+ 'type': 'object'},
+ 'CloudInstanceTypesConstraints': {'additionalProperties': False,
+ 'properties': {'constraints': {'items': {'$ref': '#/definitions/CloudInstanceTypesConstraint'},
+ 'type': 'array'}},
+ 'required': ['constraints'],
+ 'type': 'object'},
+ 'CloudRegion': {'additionalProperties': False,
+ 'properties': {'endpoint': {'type': 'string'},
+ 'identity-endpoint': {'type': 'string'},
+ 'name': {'type': 'string'},
+ 'storage-endpoint': {'type': 'string'}},
+ 'required': ['name'],
+ 'type': 'object'},
+ 'CloudResult': {'additionalProperties': False,
+ 'properties': {'cloud': {'$ref': '#/definitions/Cloud'},
+ 'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'CloudResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/CloudResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'CloudUserInfo': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'display-name': {'type': 'string'},
+ 'user': {'type': 'string'}},
+ 'required': ['user',
+ 'display-name',
+ 'access'],
+ 'type': 'object'},
+ 'CloudsResult': {'additionalProperties': False,
+ 'properties': {'clouds': {'patternProperties': {'.*': {'$ref': '#/definitions/Cloud'}},
+ 'type': 'object'}},
+ 'type': 'object'},
+ 'ControllerCredentialInfo': {'additionalProperties': False,
+ 'properties': {'content': {'$ref': '#/definitions/CredentialContent'},
+ 'models': {'items': {'$ref': '#/definitions/ModelAccess'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'CredentialContent': {'additionalProperties': False,
+ 'properties': {'attrs': {'patternProperties': {'.*': {'type': 'string'}},
+ 'type': 'object'},
+ 'auth-type': {'type': 'string'},
+ 'cloud': {'type': 'string'},
+ 'name': {'type': 'string'}},
+ 'required': ['name',
+ 'cloud',
+ 'auth-type'],
+ 'type': 'object'},
+ 'CredentialContentResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/ControllerCredentialInfo'}},
+ 'type': 'object'},
+ 'CredentialContentResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/CredentialContentResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'Entities': {'additionalProperties': False,
+ 'properties': {'entities': {'items': {'$ref': '#/definitions/Entity'},
+ 'type': 'array'}},
+ 'required': ['entities'],
+ 'type': 'object'},
+ 'Entity': {'additionalProperties': False,
+ 'properties': {'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'Error': {'additionalProperties': False,
+ 'properties': {'code': {'type': 'string'},
+ 'info': {'$ref': '#/definitions/ErrorInfo'},
+ 'message': {'type': 'string'}},
+ 'required': ['message', 'code'],
+ 'type': 'object'},
+ 'ErrorInfo': {'additionalProperties': False,
+ 'properties': {'macaroon': {'$ref': '#/definitions/Macaroon'},
+ 'macaroon-path': {'type': 'string'}},
+ 'type': 'object'},
+ 'ErrorResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'}},
+ 'type': 'object'},
+ 'ErrorResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'InstanceType': {'additionalProperties': False,
+ 'properties': {'arches': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'cost': {'type': 'integer'},
+ 'cpu-cores': {'type': 'integer'},
+ 'deprecated': {'type': 'boolean'},
+ 'memory': {'type': 'integer'},
+ 'name': {'type': 'string'},
+ 'root-disk': {'type': 'integer'},
+ 'virt-type': {'type': 'string'}},
+ 'required': ['arches', 'cpu-cores', 'memory'],
+ 'type': 'object'},
+ 'InstanceTypesResult': {'additionalProperties': False,
+ 'properties': {'cost-currency': {'type': 'string'},
+ 'cost-divisor': {'type': 'integer'},
+ 'cost-unit': {'type': 'string'},
+ 'error': {'$ref': '#/definitions/Error'},
+ 'instance-types': {'items': {'$ref': '#/definitions/InstanceType'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'InstanceTypesResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/InstanceTypesResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'ListCloudInfo': {'additionalProperties': False,
+ 'properties': {'CloudDetails': {'$ref': '#/definitions/CloudDetails'},
+ 'user-access': {'type': 'string'}},
+ 'required': ['CloudDetails', 'user-access'],
+ 'type': 'object'},
+ 'ListCloudInfoResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'$ref': '#/definitions/ListCloudInfo'}},
+ 'type': 'object'},
+ 'ListCloudInfoResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/ListCloudInfoResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'ListCloudsRequest': {'additionalProperties': False,
+ 'properties': {'all': {'type': 'boolean'},
+ 'user-tag': {'type': 'string'}},
+ 'required': ['user-tag'],
+ 'type': 'object'},
+ 'Macaroon': {'additionalProperties': False, 'type': 'object'},
+ 'ModelAccess': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'model': {'type': 'string'}},
+ 'type': 'object'},
+ 'ModifyCloudAccess': {'additionalProperties': False,
+ 'properties': {'access': {'type': 'string'},
+ 'action': {'type': 'string'},
+ 'cloud-tag': {'type': 'string'},
+ 'user-tag': {'type': 'string'}},
+ 'required': ['user-tag',
+ 'cloud-tag',
+ 'action',
+ 'access'],
+ 'type': 'object'},
+ 'ModifyCloudAccessRequest': {'additionalProperties': False,
+ 'properties': {'changes': {'items': {'$ref': '#/definitions/ModifyCloudAccess'},
+ 'type': 'array'}},
+ 'required': ['changes'],
+ 'type': 'object'},
+ 'RevokeCredentialArg': {'additionalProperties': False,
+ 'properties': {'force': {'type': 'boolean'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag', 'force'],
+ 'type': 'object'},
+ 'RevokeCredentialArgs': {'additionalProperties': False,
+ 'properties': {'credentials': {'items': {'$ref': '#/definitions/RevokeCredentialArg'},
+ 'type': 'array'}},
+ 'required': ['credentials'],
+ 'type': 'object'},
+ 'StringResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'type': 'string'}},
+ 'required': ['result'],
+ 'type': 'object'},
+ 'StringsResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'result': {'items': {'type': 'string'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'StringsResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/StringsResult'},
+ 'type': 'array'}},
+ 'required': ['results'],
+ 'type': 'object'},
+ 'TaggedCredential': {'additionalProperties': False,
+ 'properties': {'credential': {'$ref': '#/definitions/CloudCredential'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag', 'credential'],
+ 'type': 'object'},
+ 'TaggedCredentials': {'additionalProperties': False,
+ 'properties': {'credentials': {'items': {'$ref': '#/definitions/TaggedCredential'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'UpdateCredentialArgs': {'additionalProperties': False,
+ 'properties': {'credentials': {'items': {'$ref': '#/definitions/TaggedCredential'},
+ 'type': 'array'},
+ 'force': {'type': 'boolean'}},
+ 'required': ['credentials', 'force'],
+ 'type': 'object'},
+ 'UpdateCredentialModelResult': {'additionalProperties': False,
+ 'properties': {'errors': {'items': {'$ref': '#/definitions/ErrorResult'},
+ 'type': 'array'},
+ 'name': {'type': 'string'},
+ 'uuid': {'type': 'string'}},
+ 'required': ['uuid', 'name'],
+ 'type': 'object'},
+ 'UpdateCredentialResult': {'additionalProperties': False,
+ 'properties': {'error': {'$ref': '#/definitions/Error'},
+ 'models': {'items': {'$ref': '#/definitions/UpdateCredentialModelResult'},
+ 'type': 'array'},
+ 'tag': {'type': 'string'}},
+ 'required': ['tag'],
+ 'type': 'object'},
+ 'UpdateCredentialResults': {'additionalProperties': False,
+ 'properties': {'results': {'items': {'$ref': '#/definitions/UpdateCredentialResult'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'UserCloud': {'additionalProperties': False,
+ 'properties': {'cloud-tag': {'type': 'string'},
+ 'user-tag': {'type': 'string'}},
+ 'required': ['user-tag', 'cloud-tag'],
+ 'type': 'object'},
+ 'UserClouds': {'additionalProperties': False,
+ 'properties': {'user-clouds': {'items': {'$ref': '#/definitions/UserCloud'},
+ 'type': 'array'}},
+ 'type': 'object'},
+ 'Value': {'additionalProperties': False,
+ 'properties': {'arch': {'type': 'string'},
+ 'container': {'type': 'string'},
+ 'cores': {'type': 'integer'},
+ 'cpu-power': {'type': 'integer'},
+ 'instance-type': {'type': 'string'},
+ 'mem': {'type': 'integer'},
+ 'root-disk': {'type': 'integer'},
+ 'spaces': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'tags': {'items': {'type': 'string'},
+ 'type': 'array'},
+ 'virt-type': {'type': 'string'},
+ 'zones': {'items': {'type': 'string'},
+ 'type': 'array'}},
'type': 'object'}},
- 'properties': {'AddRelation': {'properties': {'Params': {'$ref': '#/definitions/AddRelation'},
- 'Result': {'$ref': '#/definitions/AddRelationResults'}},
- 'type': 'object'},
- 'AddUnits': {'properties': {'Params': {'$ref': '#/definitions/AddApplicationUnits'},
- 'Result': {'$ref': '#/definitions/AddApplicationUnitsResults'}},
+ 'properties': {'AddCloud': {'properties': {'Params': {'$ref': '#/definitions/AddCloudArgs'}},
'type': 'object'},
- 'CharmRelations': {'properties': {'Params': {'$ref': '#/definitions/ApplicationCharmRelations'},
- 'Result': {'$ref': '#/definitions/ApplicationCharmRelationsResults'}},
+ 'AddCredentials': {'properties': {'Params': {'$ref': '#/definitions/TaggedCredentials'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
'type': 'object'},
- 'Deploy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationsDeploy'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'CheckCredentialsModels': {'properties': {'Params': {'$ref': '#/definitions/TaggedCredentials'},
+ 'Result': {'$ref': '#/definitions/UpdateCredentialResults'}},
+ 'type': 'object'},
+ 'Cloud': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/CloudResults'}},
+ 'type': 'object'},
+ 'CloudInfo': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/CloudInfoResults'}},
+ 'type': 'object'},
+ 'Clouds': {'properties': {'Result': {'$ref': '#/definitions/CloudsResult'}},
'type': 'object'},
- 'Destroy': {'properties': {'Params': {'$ref': '#/definitions/ApplicationDestroy'}},
- 'type': 'object'},
- 'DestroyRelation': {'properties': {'Params': {'$ref': '#/definitions/DestroyRelation'}},
- 'type': 'object'},
- 'DestroyUnits': {'properties': {'Params': {'$ref': '#/definitions/DestroyApplicationUnits'}},
+ 'Credential': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/CloudCredentialResults'}},
+ 'type': 'object'},
+ 'CredentialContents': {'properties': {'Params': {'$ref': '#/definitions/CloudCredentialArgs'},
+ 'Result': {'$ref': '#/definitions/CredentialContentResults'}},
+ 'type': 'object'},
+ 'DefaultCloud': {'properties': {'Result': {'$ref': '#/definitions/StringResult'}},
'type': 'object'},
- 'Expose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationExpose'}},
- 'type': 'object'},
- 'Get': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
- 'Result': {'$ref': '#/definitions/ApplicationGetResults'}},
- 'type': 'object'},
- 'GetCharmURL': {'properties': {'Params': {'$ref': '#/definitions/ApplicationGet'},
- 'Result': {'$ref': '#/definitions/StringResult'}},
- 'type': 'object'},
- 'GetConstraints': {'properties': {'Params': {'$ref': '#/definitions/GetApplicationConstraints'},
- 'Result': {'$ref': '#/definitions/GetConstraintsResults'}},
- 'type': 'object'},
- 'Set': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSet'}},
- 'type': 'object'},
- 'SetCharm': {'properties': {'Params': {'$ref': '#/definitions/ApplicationSetCharm'}},
- 'type': 'object'},
- 'SetConstraints': {'properties': {'Params': {'$ref': '#/definitions/SetConstraints'}},
- 'type': 'object'},
- 'SetMetricCredentials': {'properties': {'Params': {'$ref': '#/definitions/ApplicationMetricCredentials'},
- 'Result': {'$ref': '#/definitions/ErrorResults'}},
- 'type': 'object'},
- 'Unexpose': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnexpose'}},
- 'type': 'object'},
- 'Unset': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUnset'}},
- 'type': 'object'},
- 'Update': {'properties': {'Params': {'$ref': '#/definitions/ApplicationUpdate'}},
- 'type': 'object'}},
+ 'InstanceTypes': {'properties': {'Params': {'$ref': '#/definitions/CloudInstanceTypesConstraints'},
+ 'Result': {'$ref': '#/definitions/InstanceTypesResults'}},
+ 'type': 'object'},
+ 'ListCloudInfo': {'properties': {'Params': {'$ref': '#/definitions/ListCloudsRequest'},
+ 'Result': {'$ref': '#/definitions/ListCloudInfoResults'}},
+ 'type': 'object'},
+ 'ModifyCloudAccess': {'properties': {'Params': {'$ref': '#/definitions/ModifyCloudAccessRequest'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'RemoveClouds': {'properties': {'Params': {'$ref': '#/definitions/Entities'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'RevokeCredentialsCheckModels': {'properties': {'Params': {'$ref': '#/definitions/RevokeCredentialArgs'},
+ 'Result': {'$ref': '#/definitions/ErrorResults'}},
+ 'type': 'object'},
+ 'UpdateCredentialsCheckModels': {'properties': {'Params': {'$ref': '#/definitions/UpdateCredentialArgs'},
+ 'Result': {'$ref': '#/definitions/UpdateCredentialResults'}},
+ 'type': 'object'},
+ 'UserCredentials': {'properties': {'Params': {'$ref': '#/definitions/UserClouds'},
+ 'Result': {'$ref': '#/definitions/StringsResults'}},
+ 'type': 'object'}},
'type': 'object'}
- @ReturnMapping(AddRelationResults)
- async def AddRelation(self, endpoints):
+ @ReturnMapping(None)
+ async def AddCloud(self, cloud, name):
'''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+ cloud : Cloud
+ name : str
+ Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddRelation', version=3, params=_params)
- _params['endpoints'] = endpoints
+ msg = dict(type='Cloud',
+ request='AddCloud',
+ version=3,
+ params=_params)
+ _params['cloud'] = cloud
+ _params['name'] = name
reply = await self.rpc(msg)
return reply
- @ReturnMapping(AddApplicationUnitsResults)
- async def AddUnits(self, application, num_units, placement):
+ @ReturnMapping(ErrorResults)
+ async def AddCredentials(self, credentials):
'''
- application : str
- num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
+ credentials : typing.Sequence[~TaggedCredential]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddUnits', version=3, params=_params)
- _params['application'] = application
- _params['num-units'] = num_units
- _params['placement'] = placement
+ msg = dict(type='Cloud',
+ request='AddCredentials',
+ version=3,
+ params=_params)
+ _params['credentials'] = credentials
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ApplicationCharmRelationsResults)
- async def CharmRelations(self, application):
+ @ReturnMapping(UpdateCredentialResults)
+ async def CheckCredentialsModels(self, credentials):
'''
- application : str
- Returns -> typing.Sequence<+T_co>[str]
+ credentials : typing.Sequence[~TaggedCredential]
+ Returns -> typing.Sequence[~UpdateCredentialResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='CharmRelations', version=3, params=_params)
- _params['application'] = application
+ msg = dict(type='Cloud',
+ request='CheckCredentialsModels',
+ version=3,
+ params=_params)
+ _params['credentials'] = credentials
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ErrorResults)
- async def Deploy(self, applications):
+ @ReturnMapping(CloudResults)
+ async def Cloud(self, entities):
'''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Deploy', version=3, params=_params)
- _params['applications'] = applications
+ msg = dict(type='Cloud',
+ request='Cloud',
+ version=3,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Destroy(self, application):
+ @ReturnMapping(CloudInfoResults)
+ async def CloudInfo(self, entities):
'''
- application : str
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Destroy', version=3, params=_params)
- _params['application'] = application
+ msg = dict(type='Cloud',
+ request='CloudInfo',
+ version=3,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def DestroyRelation(self, endpoints):
- '''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> None
+ @ReturnMapping(CloudsResult)
+ async def Clouds(self):
'''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Application', request='DestroyRelation', version=3, params=_params)
- _params['endpoints'] = endpoints
- reply = await self.rpc(msg)
- return reply
-
-
- @ReturnMapping(None)
- async def DestroyUnits(self, unit_names):
- '''
- unit_names : typing.Sequence<+T_co>[str]
- Returns -> None
+ Returns -> typing.Mapping[str, ~Cloud]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnits', version=3, params=_params)
- _params['unit-names'] = unit_names
+ msg = dict(type='Cloud',
+ request='Clouds',
+ version=3,
+ params=_params)
+
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Expose(self, application):
+ @ReturnMapping(CloudCredentialResults)
+ async def Credential(self, entities):
'''
- application : str
- Returns -> None
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudCredentialResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Expose', version=3, params=_params)
- _params['application'] = application
+ msg = dict(type='Cloud',
+ request='Credential',
+ version=3,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(ApplicationGetResults)
- async def Get(self, application):
+ @ReturnMapping(CredentialContentResults)
+ async def CredentialContents(self, credentials, include_secrets):
'''
- application : str
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+ credentials : typing.Sequence[~CloudCredentialArg]
+ include_secrets : bool
+ Returns -> typing.Sequence[~CredentialContentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Get', version=3, params=_params)
- _params['application'] = application
+ msg = dict(type='Cloud',
+ request='CredentialContents',
+ version=3,
+ params=_params)
+ _params['credentials'] = credentials
+ _params['include-secrets'] = include_secrets
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResult)
- async def GetCharmURL(self, application):
+ async def DefaultCloud(self):
'''
- application : str
+
Returns -> typing.Union[_ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetCharmURL', version=3, params=_params)
- _params['application'] = application
- reply = await self.rpc(msg)
- return reply
+ msg = dict(type='Cloud',
+ request='DefaultCloud',
+ version=3,
+ params=_params)
-
-
- @ReturnMapping(GetConstraintsResults)
- async def GetConstraints(self, application):
- '''
- application : str
- Returns -> Value
- '''
- # map input types to rpc msg
- _params = dict()
- msg = dict(type='Application', request='GetConstraints', version=3, params=_params)
- _params['application'] = application
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Set(self, application, options):
+ @ReturnMapping(InstanceTypesResults)
+ async def InstanceTypes(self, constraints):
'''
- application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
- Returns -> None
+ constraints : typing.Sequence[~CloudInstanceTypesConstraint]
+ Returns -> typing.Sequence[~InstanceTypesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Set', version=3, params=_params)
- _params['application'] = application
- _params['options'] = options
+ msg = dict(type='Cloud',
+ request='InstanceTypes',
+ version=3,
+ params=_params)
+ _params['constraints'] = constraints
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetCharm(self, application, channel, charm_url, config_settings, config_settings_yaml, force_series, force_units, resource_ids, storage_constraints):
+ @ReturnMapping(ListCloudInfoResults)
+ async def ListCloudInfo(self, all_, user_tag):
'''
- application : str
- channel : str
- charm_url : str
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
- config_settings_yaml : str
- force_series : bool
- force_units : bool
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
- Returns -> None
+ all_ : bool
+ user_tag : str
+ Returns -> typing.Sequence[~ListCloudInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetCharm', version=3, params=_params)
- _params['application'] = application
- _params['channel'] = channel
- _params['charm-url'] = charm_url
- _params['config-settings'] = config_settings
- _params['config-settings-yaml'] = config_settings_yaml
- _params['force-series'] = force_series
- _params['force-units'] = force_units
- _params['resource-ids'] = resource_ids
- _params['storage-constraints'] = storage_constraints
+ msg = dict(type='Cloud',
+ request='ListCloudInfo',
+ version=3,
+ params=_params)
+ _params['all'] = all_
+ _params['user-tag'] = user_tag
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def SetConstraints(self, application, constraints):
+ @ReturnMapping(ErrorResults)
+ async def ModifyCloudAccess(self, changes):
'''
- application : str
- constraints : Value
- Returns -> None
+ changes : typing.Sequence[~ModifyCloudAccess]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetConstraints', version=3, params=_params)
- _params['application'] = application
- _params['constraints'] = constraints
+ msg = dict(type='Cloud',
+ request='ModifyCloudAccess',
+ version=3,
+ params=_params)
+ _params['changes'] = changes
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
- async def SetMetricCredentials(self, creds):
+ async def RemoveClouds(self, entities):
'''
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetMetricCredentials', version=3, params=_params)
- _params['creds'] = creds
+ msg = dict(type='Cloud',
+ request='RemoveClouds',
+ version=3,
+ params=_params)
+ _params['entities'] = entities
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Unexpose(self, application):
+ @ReturnMapping(ErrorResults)
+ async def RevokeCredentialsCheckModels(self, credentials):
'''
- application : str
- Returns -> None
+ credentials : typing.Sequence[~RevokeCredentialArg]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unexpose', version=3, params=_params)
- _params['application'] = application
+ msg = dict(type='Cloud',
+ request='RevokeCredentialsCheckModels',
+ version=3,
+ params=_params)
+ _params['credentials'] = credentials
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Unset(self, application, options):
+ @ReturnMapping(UpdateCredentialResults)
+ async def UpdateCredentialsCheckModels(self, credentials, force):
'''
- application : str
- options : typing.Sequence<+T_co>[str]
- Returns -> None
+ credentials : typing.Sequence[~TaggedCredential]
+ force : bool
+ Returns -> typing.Sequence[~UpdateCredentialResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unset', version=3, params=_params)
- _params['application'] = application
- _params['options'] = options
+ msg = dict(type='Cloud',
+ request='UpdateCredentialsCheckModels',
+ version=3,
+ params=_params)
+ _params['credentials'] = credentials
+ _params['force'] = force
reply = await self.rpc(msg)
return reply
- @ReturnMapping(None)
- async def Update(self, application, charm_url, constraints, force_charm_url, force_series, min_units, settings, settings_yaml):
+ @ReturnMapping(StringsResults)
+ async def UserCredentials(self, user_clouds):
'''
- application : str
- charm_url : str
- constraints : Value
- force_charm_url : bool
- force_series : bool
- min_units : int
- settings : typing.Mapping<~KT, +VT_co>[str, str]
- settings_yaml : str
- Returns -> None
+ user_clouds : typing.Sequence[~UserCloud]
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Update', version=3, params=_params)
- _params['application'] = application
- _params['charm-url'] = charm_url
- _params['constraints'] = constraints
- _params['force-charm-url'] = force_charm_url
- _params['force-series'] = force_series
- _params['min-units'] = min_units
- _params['settings'] = settings
- _params['settings-yaml'] = settings_yaml
+ msg = dict(type='Cloud',
+ request='UserCredentials',
+ version=3,
+ params=_params)
+ _params['user-clouds'] = user_clouds
reply = await self.rpc(msg)
return reply
async def AllModels(self):
'''
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+ Returns -> typing.Sequence[~UserModel]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='AllModels', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='AllModels',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(CloudSpecResults)
async def CloudSpec(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudSpecResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='CloudSpec', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='CloudSpec',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ControllerConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='ControllerConfig', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='ControllerConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='DestroyController', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='DestroyController',
+ version=3,
+ params=_params)
_params['destroy-models'] = destroy_models
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='GetCloudSpec', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='GetCloudSpec',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(UserAccessResults)
async def GetControllerAccess(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~UserAccessResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='GetControllerAccess', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='GetControllerAccess',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def HostedModelConfigs(self):
'''
- Returns -> typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
+ Returns -> typing.Sequence[~HostedModelConfig]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='HostedModelConfigs', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='HostedModelConfigs',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(InitiateMigrationResults)
async def InitiateMigration(self, specs):
'''
- specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec>
- Returns -> typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult>
+ specs : typing.Sequence[~MigrationSpec]
+ Returns -> typing.Sequence[~InitiateMigrationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='InitiateMigration', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='InitiateMigration',
+ version=3,
+ params=_params)
_params['specs'] = specs
reply = await self.rpc(msg)
return reply
async def ListBlockedModels(self):
'''
- Returns -> typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
+ Returns -> typing.Sequence[~ModelBlockInfo]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='ListBlockedModels', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='ListBlockedModels',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+ Returns -> typing.Mapping[str, ~ConfigValue]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='ModelConfig', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='ModelConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ModelStatusResults)
async def ModelStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ModelStatus]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='ModelStatus', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='ModelStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ModifyControllerAccess(self, changes):
'''
- changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ changes : typing.Sequence[~ModifyControllerAccess]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='ModifyControllerAccess', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='ModifyControllerAccess',
+ version=3,
+ params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='RemoveBlocks', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='RemoveBlocks',
+ version=3,
+ params=_params)
_params['all'] = all_
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Controller', request='WatchAllModels', version=3, params=_params)
+ msg = dict(type='Controller',
+ request='WatchAllModels',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(CloudSpecResults)
async def CloudSpec(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~CloudSpecResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='CloudSpec', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='CloudSpec',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def GetAssignedMachine(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='GetAssignedMachine', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='GetAssignedMachine',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='GetCloudSpec', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='GetCloudSpec',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(BoolResults)
async def GetExposed(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~BoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='GetExposed', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='GetExposed',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsResults)
async def GetMachineActiveSubnets(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='GetMachineActiveSubnets', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='GetMachineActiveSubnets',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachinePortsResults)
async def GetMachinePorts(self, params):
'''
- params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
+ params : typing.Sequence[~MachinePorts]
+ Returns -> typing.Sequence[~MachinePortsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='GetMachinePorts', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='GetMachinePorts',
+ version=3,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def InstanceId(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='InstanceId', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='InstanceId',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='Life', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='Life',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='ModelConfig', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='ModelConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def Watch(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='Watch', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='Watch',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='WatchForModelConfigChanges', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='WatchForModelConfigChanges',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def WatchModelMachines(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='WatchModelMachines', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='WatchModelMachines',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchOpenedPorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='WatchOpenedPorts', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='WatchOpenedPorts',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchUnits(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Firewaller', request='WatchUnits', version=3, params=_params)
+ msg = dict(type='Firewaller',
+ request='WatchUnits',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
+class ImageMetadataFacade(Type):
+ name = 'ImageMetadata'
+ version = 3
+ schema = {'properties': {'UpdateFromPublishedImages': {'type': 'object'}},
+ 'type': 'object'}
+
+
+ @ReturnMapping(None)
+ async def UpdateFromPublishedImages(self):
+ '''
+
+ Returns -> None
+ '''
+ # map input types to rpc msg
+ _params = dict()
+ msg = dict(type='ImageMetadata',
+ request='UpdateFromPublishedImages',
+ version=3,
+ params=_params)
+
+ reply = await self.rpc(msg)
+ return reply
+
+
+
class InstancePollerFacade(Type):
name = 'InstancePoller'
version = 3
@ReturnMapping(BoolResults)
async def AreManuallyProvisioned(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~BoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='AreManuallyProvisioned', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='AreManuallyProvisioned',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def InstanceId(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='InstanceId', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='InstanceId',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def InstanceStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='InstanceStatus', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='InstanceStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='Life', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='Life',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='ModelConfig', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='ModelConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachineAddressesResults)
async def ProviderAddresses(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachineAddressesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='ProviderAddresses', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='ProviderAddresses',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetInstanceStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='SetInstanceStatus', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='SetInstanceStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetProviderAddresses(self, machine_addresses):
'''
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ machine_addresses : typing.Sequence[~MachineAddresses]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='SetProviderAddresses', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='SetProviderAddresses',
+ version=3,
+ params=_params)
_params['machine-addresses'] = machine_addresses
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def Status(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='Status', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='Status',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='WatchForModelConfigChanges', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='WatchForModelConfigChanges',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def WatchModelMachines(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='InstancePoller', request='WatchModelMachines', version=3, params=_params)
+ msg = dict(type='InstancePoller',
+ request='WatchModelMachines',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddMachinesResults)
async def AddMachines(self, params):
'''
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
- Returns -> typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+ params : typing.Sequence[~AddMachineParams]
+ Returns -> typing.Sequence[~AddMachinesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='AddMachines', version=3, params=_params)
+ msg = dict(type='MachineManager',
+ request='AddMachines',
+ version=3,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyMachineResults)
async def DestroyMachine(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyMachineResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='DestroyMachine', version=3, params=_params)
+ msg = dict(type='MachineManager',
+ request='DestroyMachine',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyMachineResults)
async def ForceDestroyMachine(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyMachineResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='ForceDestroyMachine', version=3, params=_params)
+ msg = dict(type='MachineManager',
+ request='ForceDestroyMachine',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(InstanceTypesResults)
async def InstanceTypes(self, constraints):
'''
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
- Returns -> typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
+ constraints : typing.Sequence[~ModelInstanceTypesConstraint]
+ Returns -> typing.Sequence[~InstanceTypesResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='MachineManager', request='InstanceTypes', version=3, params=_params)
+ msg = dict(type='MachineManager',
+ request='InstanceTypes',
+ version=3,
+ params=_params)
_params['constraints'] = constraints
reply = await self.rpc(msg)
return reply
async def CreateModel(self, cloud_tag, config, credential, name, owner_tag, region):
'''
cloud_tag : str
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
credential : str
name : str
owner_tag : str
region : str
- Returns -> typing.Union[_ForwardRef('Number'), _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>]
+ Returns -> typing.Union[_ForwardRef('Number'), str, typing.Sequence[~ModelMachineInfo], _ForwardRef('ModelMigrationStatus'), _ForwardRef('ModelSLAInfo'), _ForwardRef('EntityStatus'), typing.Sequence[~ModelUserInfo]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='CreateModel', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='CreateModel',
+ version=3,
+ params=_params)
_params['cloud-tag'] = cloud_tag
_params['config'] = config
_params['credential'] = credential
@ReturnMapping(ErrorResults)
async def DestroyModels(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DestroyModels', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='DestroyModels',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def DumpModels(self, entities, simplified):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
simplified : bool
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DumpModels', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='DumpModels',
+ version=3,
+ params=_params)
_params['entities'] = entities
_params['simplified'] = simplified
reply = await self.rpc(msg)
@ReturnMapping(MapResults)
async def DumpModelsDB(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MapResult]<~MapResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MapResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='DumpModelsDB', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='DumpModelsDB',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ListModels(self, tag):
'''
tag : str
- Returns -> typing.Sequence<+T_co>[~UserModel]<~UserModel>
+ Returns -> typing.Sequence[~UserModel]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ListModels', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='ListModels',
+ version=3,
+ params=_params)
_params['tag'] = tag
reply = await self.rpc(msg)
return reply
async def ModelDefaults(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+ Returns -> typing.Mapping[str, ~ModelDefaults]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelDefaults', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModelDefaults',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ModelInfoResults)
async def ModelInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ModelInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelInfo', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModelInfo',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ModelStatusResults)
async def ModelStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ModelStatus]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModelStatus', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModelStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ModifyModelAccess(self, changes):
'''
- changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ changes : typing.Sequence[~ModifyModelAccess]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='ModifyModelAccess', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='ModifyModelAccess',
+ version=3,
+ params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetModelDefaults(self, config):
'''
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ config : typing.Sequence[~ModelDefaultValues]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='SetModelDefaults', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='SetModelDefaults',
+ version=3,
+ params=_params)
_params['config'] = config
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def UnsetModelDefaults(self, keys):
'''
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ keys : typing.Sequence[~ModelUnsetKeys]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='ModelManager', request='UnsetModelDefaults', version=3, params=_params)
+ msg = dict(type='ModelManager',
+ request='UnsetModelDefaults',
+ version=3,
+ params=_params)
_params['keys'] = keys
reply = await self.rpc(msg)
return reply
async def APIAddresses(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='APIAddresses', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='APIAddresses',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def APIHostPorts(self):
'''
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ Returns -> typing.Sequence[~HostPort]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='APIHostPorts', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='APIHostPorts',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def CACert(self):
'''
- Returns -> typing.Sequence<+T_co>[int]
+ Returns -> typing.Sequence[int]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='CACert', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='CACert',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ConstraintsResults)
async def Constraints(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ConstraintsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Constraints', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Constraints',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ContainerConfig(self):
'''
- Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), _ForwardRef('Settings'), bool]
+ Returns -> typing.Union[_ForwardRef('UpdateBehavior'), str, _ForwardRef('Settings'), bool]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ContainerConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ContainerConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def ContainerManagerConfig(self, type_):
'''
type_ : str
- Returns -> typing.Mapping<~KT, +VT_co>[str, str]
+ Returns -> typing.Mapping[str, str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ContainerManagerConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ContainerManagerConfig',
+ version=3,
+ params=_params)
_params['type'] = type_
reply = await self.rpc(msg)
return reply
async def ControllerConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ControllerConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ControllerConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(DistributionGroupResults)
async def DistributionGroup(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DistributionGroupResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='DistributionGroup', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='DistributionGroup',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnsureDead(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='EnsureDead', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='EnsureDead',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
minor : int
number : Number
series : str
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[~Tools]<~Tools>]
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[~Tools]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='FindTools', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='FindTools',
+ version=3,
+ params=_params)
_params['arch'] = arch
_params['major'] = major
_params['minor'] = minor
@ReturnMapping(MachineNetworkConfigResults)
async def GetContainerInterfaceInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachineNetworkConfigResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='GetContainerInterfaceInfo', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='GetContainerInterfaceInfo',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(HostNetworkChangeResults)
async def HostChangesForContainers(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~HostNetworkChange]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='HostChangesForContainers', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='HostChangesForContainers',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def InstanceId(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='InstanceId', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='InstanceId',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def InstanceStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='InstanceStatus', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='InstanceStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Life', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Life',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def MachinesWithTransientErrors(self):
'''
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='MachinesWithTransientErrors', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='MachinesWithTransientErrors',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def MarkMachinesForRemoval(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='MarkMachinesForRemoval', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='MarkMachinesForRemoval',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ModelConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ModelConfig',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ModelUUID', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ModelUUID',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachineNetworkConfigResults)
async def PrepareContainerInterfaceInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachineNetworkConfigResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='PrepareContainerInterfaceInfo', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='PrepareContainerInterfaceInfo',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ProvisioningInfoResults)
async def ProvisioningInfo(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ProvisioningInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ProvisioningInfo', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ProvisioningInfo',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ReleaseContainerAddresses(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='ReleaseContainerAddresses', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='ReleaseContainerAddresses',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Remove(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Remove', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Remove',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def Series(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Series', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Series',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def SetHostMachineNetworkConfig(self, config, tag):
'''
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ config : typing.Sequence[~NetworkConfig]
tag : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetHostMachineNetworkConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetHostMachineNetworkConfig',
+ version=3,
+ params=_params)
_params['config'] = config
_params['tag'] = tag
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def SetInstanceInfo(self, machines):
'''
- machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ machines : typing.Sequence[~InstanceInfo]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetInstanceInfo', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetInstanceInfo',
+ version=3,
+ params=_params)
_params['machines'] = machines
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetInstanceStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetInstanceStatus', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetInstanceStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def SetObservedNetworkConfig(self, config, tag):
'''
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ config : typing.Sequence[~NetworkConfig]
tag : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetObservedNetworkConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetObservedNetworkConfig',
+ version=3,
+ params=_params)
_params['config'] = config
_params['tag'] = tag
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def SetPasswords(self, changes):
'''
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ changes : typing.Sequence[~EntityPassword]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetPasswords', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetPasswords',
+ version=3,
+ params=_params)
_params['changes'] = changes
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetProviderNetworkConfig(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetProviderNetworkConfig', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetProviderNetworkConfig',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetStatus', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetSupportedContainers(self, params):
'''
- params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ params : typing.Sequence[~MachineContainers]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='SetSupportedContainers', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='SetSupportedContainers',
+ version=3,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
async def StateAddresses(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='StateAddresses', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='StateAddresses',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def Status(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Status', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Status',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ToolsResults)
async def Tools(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ToolsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='Tools', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='Tools',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def UpdateStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='UpdateStatus', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='UpdateStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchAPIHostPorts', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchAPIHostPorts',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchAllContainers(self, params):
'''
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ params : typing.Sequence[~WatchContainer]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchAllContainers', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchAllContainers',
+ version=3,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchContainers(self, params):
'''
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ params : typing.Sequence[~WatchContainer]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchContainers', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchContainers',
+ version=3,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchForModelConfigChanges', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchForModelConfigChanges',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchMachineErrorRetry', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchMachineErrorRetry',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def WatchModelMachines(self):
'''
- Returns -> typing.Union[typing.Sequence<+T_co>[str], _ForwardRef('Error')]
+ Returns -> typing.Union[typing.Sequence[str], _ForwardRef('Error'), str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Provisioner', request='WatchModelMachines', version=3, params=_params)
+ msg = dict(type='Provisioner',
+ request='WatchModelMachines',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def CreateSpaces(self, spaces):
'''
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ spaces : typing.Sequence[~CreateSpaceParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Spaces', request='CreateSpaces', version=3, params=_params)
+ msg = dict(type='Spaces',
+ request='CreateSpaces',
+ version=3,
+ params=_params)
_params['spaces'] = spaces
reply = await self.rpc(msg)
return reply
async def ListSpaces(self):
'''
- Returns -> typing.Sequence<+T_co>[~Space]<~Space>
+ Returns -> typing.Sequence[~Space]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Spaces', request='ListSpaces', version=3, params=_params)
+ msg = dict(type='Spaces',
+ request='ListSpaces',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Spaces', request='ReloadSpaces', version=3, params=_params)
+ msg = dict(type='Spaces',
+ request='ReloadSpaces',
+ version=3,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddToUnit(self, storages):
'''
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ storages : typing.Sequence[~StorageAddParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='AddToUnit', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='AddToUnit',
+ version=3,
+ params=_params)
_params['storages'] = storages
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Attach(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='Attach', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='Attach',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def CreatePool(self, attrs, name, provider):
'''
- attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ attrs : typing.Mapping[str, typing.Any]
name : str
provider : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='CreatePool', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='CreatePool',
+ version=3,
+ params=_params)
_params['attrs'] = attrs
_params['name'] = name
_params['provider'] = provider
@ReturnMapping(ErrorResults)
async def Destroy(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='Destroy', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='Destroy',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Detach(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='Detach', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='Detach',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(FilesystemDetailsListResults)
async def ListFilesystems(self, filters):
'''
- filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter>
- Returns -> typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult>
+ filters : typing.Sequence[~FilesystemFilter]
+ Returns -> typing.Sequence[~FilesystemDetailsListResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='ListFilesystems', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='ListFilesystems',
+ version=3,
+ params=_params)
_params['filters'] = filters
reply = await self.rpc(msg)
return reply
@ReturnMapping(StoragePoolsResults)
async def ListPools(self, filters):
'''
- filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter>
- Returns -> typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult>
+ filters : typing.Sequence[~StoragePoolFilter]
+ Returns -> typing.Sequence[~StoragePoolsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='ListPools', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='ListPools',
+ version=3,
+ params=_params)
_params['filters'] = filters
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageDetailsListResults)
async def ListStorageDetails(self, filters):
'''
- filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter>
- Returns -> typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult>
+ filters : typing.Sequence[~StorageFilter]
+ Returns -> typing.Sequence[~StorageDetailsListResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='ListStorageDetails', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='ListStorageDetails',
+ version=3,
+ params=_params)
_params['filters'] = filters
reply = await self.rpc(msg)
return reply
@ReturnMapping(VolumeDetailsListResults)
async def ListVolumes(self, filters):
'''
- filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter>
- Returns -> typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult>
+ filters : typing.Sequence[~VolumeFilter]
+ Returns -> typing.Sequence[~VolumeDetailsListResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='ListVolumes', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='ListVolumes',
+ version=3,
+ params=_params)
_params['filters'] = filters
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageDetailsResults)
async def StorageDetails(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StorageDetailsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Storage', request='StorageDetails', version=3, params=_params)
+ msg = dict(type='Storage',
+ request='StorageDetails',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def AttachmentLife(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='AttachmentLife', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='AttachmentLife',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnsureDead(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='EnsureDead', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='EnsureDead',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(FilesystemAttachmentParamsResults)
async def FilesystemAttachmentParams(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~FilesystemAttachmentParamsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='FilesystemAttachmentParams', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='FilesystemAttachmentParams',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(FilesystemAttachmentResults)
async def FilesystemAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~FilesystemAttachmentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='FilesystemAttachments', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='FilesystemAttachments',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(FilesystemParamsResults)
async def FilesystemParams(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~FilesystemParamsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='FilesystemParams', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='FilesystemParams',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(FilesystemResults)
async def Filesystems(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~FilesystemResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='Filesystems', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='Filesystems',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def InstanceId(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='InstanceId', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='InstanceId',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='Life', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='Life',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Remove(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='Remove', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='Remove',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RemoveAttachment(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='RemoveAttachment', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='RemoveAttachment',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetFilesystemAttachmentInfo(self, filesystem_attachments):
'''
- filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ filesystem_attachments : typing.Sequence[~FilesystemAttachment]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='SetFilesystemAttachmentInfo', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='SetFilesystemAttachmentInfo',
+ version=3,
+ params=_params)
_params['filesystem-attachments'] = filesystem_attachments
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetFilesystemInfo(self, filesystems):
'''
- filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ filesystems : typing.Sequence[~Filesystem]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='SetFilesystemInfo', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='SetFilesystemInfo',
+ version=3,
+ params=_params)
_params['filesystems'] = filesystems
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='SetStatus', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='SetStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetVolumeAttachmentInfo(self, volume_attachments):
'''
- volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ volume_attachments : typing.Sequence[~VolumeAttachment]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='SetVolumeAttachmentInfo', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='SetVolumeAttachmentInfo',
+ version=3,
+ params=_params)
_params['volume-attachments'] = volume_attachments
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetVolumeInfo(self, volumes):
'''
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ volumes : typing.Sequence[~Volume]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='SetVolumeInfo', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='SetVolumeInfo',
+ version=3,
+ params=_params)
_params['volumes'] = volumes
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def UpdateStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='UpdateStatus', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='UpdateStatus',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(VolumeAttachmentParamsResults)
async def VolumeAttachmentParams(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~VolumeAttachmentParamsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='VolumeAttachmentParams', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='VolumeAttachmentParams',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(VolumeAttachmentResults)
async def VolumeAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~VolumeAttachmentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='VolumeAttachments', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='VolumeAttachments',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(BlockDeviceResults)
async def VolumeBlockDevices(self, ids):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
- Returns -> typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult>
+ ids : typing.Sequence[~MachineStorageId]
+ Returns -> typing.Sequence[~BlockDeviceResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='VolumeBlockDevices', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='VolumeBlockDevices',
+ version=3,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(VolumeParamsResults)
async def VolumeParams(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~VolumeParamsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='VolumeParams', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='VolumeParams',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(VolumeResults)
async def Volumes(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~VolumeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='Volumes', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='Volumes',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchBlockDevices(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchBlockDevices', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchBlockDevices',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachineStorageIdsWatchResults)
async def WatchFilesystemAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachineStorageIdsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchFilesystemAttachments', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchFilesystemAttachments',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchFilesystems(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchFilesystems', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchFilesystems',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchMachines(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchMachines', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchMachines',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachineStorageIdsWatchResults)
async def WatchVolumeAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachineStorageIdsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchVolumeAttachments', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchVolumeAttachments',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchVolumes(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='StorageProvisioner', request='WatchVolumes', version=3, params=_params)
+ msg = dict(type='StorageProvisioner',
+ request='WatchVolumes',
+ version=3,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddRelationResults)
async def AddRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+ endpoints : typing.Sequence[str]
+ Returns -> typing.Mapping[str, ~CharmRelation]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddRelation', version=4, params=_params)
+ msg = dict(type='Application',
+ request='AddRelation',
+ version=4,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
'''
application : str
num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
+ placement : typing.Sequence[~Placement]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddUnits', version=4, params=_params)
+ msg = dict(type='Application',
+ request='AddUnits',
+ version=4,
+ params=_params)
_params['application'] = application
_params['num-units'] = num_units
_params['placement'] = placement
async def CharmRelations(self, application):
'''
application : str
- Returns -> typing.Sequence<+T_co>[str]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='CharmRelations', version=4, params=_params)
+ msg = dict(type='Application',
+ request='CharmRelations',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(ConsumeApplicationResults)
async def Consume(self, args):
'''
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
- Returns -> typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult>
+ args : typing.Sequence[~ConsumeApplicationArg]
+ Returns -> typing.Sequence[~ConsumeApplicationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Consume', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Consume',
+ version=4,
+ params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Deploy(self, applications):
'''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ applications : typing.Sequence[~ApplicationDeploy]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Deploy', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Deploy',
+ version=4,
+ params=_params)
_params['applications'] = applications
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Destroy', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Destroy',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyApplicationResults)
async def DestroyApplication(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyApplicationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyApplication', version=4, params=_params)
+ msg = dict(type='Application',
+ request='DestroyApplication',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
+ endpoints : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyRelation', version=4, params=_params)
+ msg = dict(type='Application',
+ request='DestroyRelation',
+ version=4,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyUnitResults)
async def DestroyUnit(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyUnitResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnit', version=4, params=_params)
+ msg = dict(type='Application',
+ request='DestroyUnit',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyUnits(self, unit_names):
'''
- unit_names : typing.Sequence<+T_co>[str]
+ unit_names : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnits', version=4, params=_params)
+ msg = dict(type='Application',
+ request='DestroyUnits',
+ version=4,
+ params=_params)
_params['unit-names'] = unit_names
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Expose', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Expose',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Get(self, application):
'''
application : str
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Get', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Get',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetCharmURL', version=4, params=_params)
+ msg = dict(type='Application',
+ request='GetCharmURL',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetConstraints', version=4, params=_params)
+ msg = dict(type='Application',
+ request='GetConstraints',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(RemoteApplicationInfoResults)
async def RemoteApplicationInfo(self, application_urls):
'''
- application_urls : typing.Sequence<+T_co>[str]
- Returns -> typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult>
+ application_urls : typing.Sequence[str]
+ Returns -> typing.Sequence[~RemoteApplicationInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='RemoteApplicationInfo', version=4, params=_params)
+ msg = dict(type='Application',
+ request='RemoteApplicationInfo',
+ version=4,
+ params=_params)
_params['application-urls'] = application_urls
reply = await self.rpc(msg)
return reply
async def Set(self, application, options):
'''
application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
+ options : typing.Mapping[str, str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Set', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Set',
+ version=4,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
application : str
channel : str
charm_url : str
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+ config_settings : typing.Mapping[str, str]
config_settings_yaml : str
force_series : bool
force_units : bool
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
+ resource_ids : typing.Mapping[str, str]
+ storage_constraints : typing.Mapping[str, ~StorageConstraints]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetCharm', version=4, params=_params)
+ msg = dict(type='Application',
+ request='SetCharm',
+ version=4,
+ params=_params)
_params['application'] = application
_params['channel'] = channel
_params['charm-url'] = charm_url
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetConstraints', version=4, params=_params)
+ msg = dict(type='Application',
+ request='SetConstraints',
+ version=4,
+ params=_params)
_params['application'] = application
_params['constraints'] = constraints
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def SetMetricCredentials(self, creds):
'''
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ creds : typing.Sequence[~ApplicationMetricCredential]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetMetricCredentials', version=4, params=_params)
+ msg = dict(type='Application',
+ request='SetMetricCredentials',
+ version=4,
+ params=_params)
_params['creds'] = creds
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unexpose', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Unexpose',
+ version=4,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Unset(self, application, options):
'''
application : str
- options : typing.Sequence<+T_co>[str]
+ options : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unset', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Unset',
+ version=4,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
force_charm_url : bool
force_series : bool
min_units : int
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
settings_yaml : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Update', version=4, params=_params)
+ msg = dict(type='Application',
+ request='Update',
+ version=4,
+ params=_params)
_params['application'] = application
_params['charm-url'] = charm_url
_params['constraints'] = constraints
+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
async def APIAddresses(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='APIAddresses', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='APIAddresses',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def APIHostPorts(self):
'''
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ Returns -> typing.Sequence[~HostPort]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='APIHostPorts', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='APIHostPorts',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionResults)
async def Actions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Actions', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Actions',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddMetricBatches(self, batches):
'''
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ batches : typing.Sequence[~MetricBatchParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AddMetricBatches', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='AddMetricBatches',
+ version=4,
+ params=_params)
_params['batches'] = batches
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddUnitStorage(self, storages):
'''
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ storages : typing.Sequence[~StorageAddParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AddUnitStorage', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='AddUnitStorage',
+ version=4,
+ params=_params)
_params['storages'] = storages
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachinePortsResults)
async def AllMachinePorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachinePortsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AllMachinePorts', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='AllMachinePorts',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ApplicationStatusResults)
async def ApplicationStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ApplicationStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ApplicationStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ApplicationStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def AssignedMachine(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AssignedMachine', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='AssignedMachine',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def AvailabilityZone(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AvailabilityZone', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='AvailabilityZone',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def BeginActions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='BeginActions', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='BeginActions',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def CACert(self):
'''
- Returns -> typing.Sequence<+T_co>[int]
+ Returns -> typing.Sequence[int]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CACert', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='CACert',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def CharmArchiveSha256(self, urls):
'''
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ urls : typing.Sequence[~CharmURL]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmArchiveSha256', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmArchiveSha256',
+ version=4,
+ params=_params)
_params['urls'] = urls
reply = await self.rpc(msg)
return reply
@ReturnMapping(IntResults)
async def CharmModifiedVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~IntResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmModifiedVersion', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmModifiedVersion',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringBoolResults)
async def CharmURL(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringBoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmURL', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmURL',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ClearResolved(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ClearResolved', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ClearResolved',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ClosePorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityPortRange]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ClosePorts', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ClosePorts',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ConfigSettingsResults)
async def ConfigSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ConfigSettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ConfigSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ConfigSettings',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CurrentModel', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='CurrentModel',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Destroy(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Destroy', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Destroy',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DestroyAllSubordinates(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='DestroyAllSubordinates', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='DestroyAllSubordinates',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DestroyUnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='DestroyUnitStorageAttachments',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnsureDead(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='EnsureDead', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='EnsureDead',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnterScope(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='EnterScope', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='EnterScope',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def FinishActions(self, results):
'''
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ results : typing.Sequence[~ActionExecutionResult]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='FinishActions', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='FinishActions',
+ version=4,
+ params=_params)
_params['results'] = results
reply = await self.rpc(msg)
return reply
@ReturnMapping(MeterStatusResults)
async def GetMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MeterStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='GetMeterStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='GetMeterStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringBoolResults)
async def GetPrincipal(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringBoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='GetPrincipal', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='GetPrincipal',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(BoolResults)
async def HasSubordinates(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~BoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='HasSubordinates', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='HasSubordinates',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsResults)
async def JoinedRelations(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='JoinedRelations', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='JoinedRelations',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def LeaveScope(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='LeaveScope', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='LeaveScope',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Life', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Life',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Merge(self, params):
'''
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ params : typing.Sequence[~MergeLeadershipSettingsParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Merge', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Merge',
+ version=4,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ModelConfig', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ModelConfig',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ModelUUID', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ModelUUID',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(UnitNetworkConfigResults)
async def NetworkConfig(self, args):
'''
- args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig>
- Returns -> typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult>
+ args : typing.Sequence[~UnitNetworkConfig]
+ Returns -> typing.Sequence[~UnitNetworkConfigResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='NetworkConfig', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='NetworkConfig',
+ version=4,
+ params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def OpenPorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityPortRange]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='OpenPorts', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='OpenPorts',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def PrivateAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='PrivateAddress', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='PrivateAddress',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ProviderType', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ProviderType',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def PublicAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='PublicAddress', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='PublicAddress',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(GetLeadershipSettingsBulkResults)
async def Read(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~GetLeadershipSettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Read', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Read',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(SettingsResults)
async def ReadRemoteSettings(self, relation_unit_pairs):
'''
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+ relation_unit_pairs : typing.Sequence[~RelationUnitPair]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ReadRemoteSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ReadRemoteSettings',
+ version=4,
+ params=_params)
_params['relation-unit-pairs'] = relation_unit_pairs
reply = await self.rpc(msg)
return reply
@ReturnMapping(SettingsResults)
async def ReadSettings(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ReadSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='ReadSettings',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationResults)
async def Relation(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~RelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Relation', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Relation',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationResults)
async def RelationById(self, relation_ids):
'''
- relation_ids : typing.Sequence<+T_co>[int]
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+ relation_ids : typing.Sequence[int]
+ Returns -> typing.Sequence[~RelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RelationById', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='RelationById',
+ version=4,
+ params=_params)
_params['relation-ids'] = relation_ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RemoveStorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RemoveStorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='RemoveStorageAttachments',
+ version=4,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RequestReboot(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RequestReboot', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='RequestReboot',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ResolvedModeResults)
async def Resolved(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ResolvedModeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Resolved', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Resolved',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetAgentStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetAgentStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetAgentStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetApplicationStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetApplicationStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetApplicationStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetCharmURL(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityCharmURL]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetCharmURL', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetCharmURL',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetUnitStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetUnitStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetUnitStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetWorkloadVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityWorkloadVersion]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetWorkloadVersion', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='SetWorkloadVersion',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def StorageAttachmentLife(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='StorageAttachmentLife', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='StorageAttachmentLife',
+ version=4,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageAttachmentResults)
async def StorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~StorageAttachmentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='StorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='StorageAttachments',
+ version=4,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def UnitStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UnitStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='UnitStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageAttachmentIdsResults)
async def UnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StorageAttachmentIdsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UnitStorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='UnitStorageAttachments',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def UpdateSettings(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnitSettings]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UpdateSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='UpdateSettings',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def Watch(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Watch', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='Watch',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchAPIHostPorts', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchAPIHostPorts',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchActionNotifications(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchActionNotifications', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchActionNotifications',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchApplicationRelations(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchApplicationRelations', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchApplicationRelations',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchConfigSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchConfigSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchConfigSettings',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchForModelConfigChanges',
+ version=4,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchLeadershipSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchLeadershipSettings', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchLeadershipSettings',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchMeterStatus', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchMeterStatus',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationUnitsWatchResults)
async def WatchRelationUnits(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~RelationUnitsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchRelationUnits', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchRelationUnits',
+ version=4,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchStorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchStorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchStorageAttachments',
+ version=4,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchUnitAddresses(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchUnitAddresses', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchUnitAddresses',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchUnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchUnitStorageAttachments',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def WorkloadVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WorkloadVersion', version=4, params=_params)
+ msg = dict(type='Uniter',
+ request='WorkloadVersion',
+ version=4,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(AddRelationResults)
async def AddRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+ endpoints : typing.Sequence[str]
+ Returns -> typing.Mapping[str, ~CharmRelation]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddRelation', version=5, params=_params)
+ msg = dict(type='Application',
+ request='AddRelation',
+ version=5,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
'''
application : str
num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- Returns -> typing.Sequence<+T_co>[str]
+ placement : typing.Sequence[~Placement]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='AddUnits', version=5, params=_params)
+ msg = dict(type='Application',
+ request='AddUnits',
+ version=5,
+ params=_params)
_params['application'] = application
_params['num-units'] = num_units
_params['placement'] = placement
async def CharmRelations(self, application):
'''
application : str
- Returns -> typing.Sequence<+T_co>[str]
+ Returns -> typing.Sequence[str]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='CharmRelations', version=5, params=_params)
+ msg = dict(type='Application',
+ request='CharmRelations',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Consume(self, args):
'''
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ args : typing.Sequence[~ConsumeApplicationArg]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Consume', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Consume',
+ version=5,
+ params=_params)
_params['args'] = args
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Deploy(self, applications):
'''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ applications : typing.Sequence[~ApplicationDeploy]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Deploy', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Deploy',
+ version=5,
+ params=_params)
_params['applications'] = applications
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Destroy', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Destroy',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyApplicationResults)
async def DestroyApplication(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyApplicationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyApplication', version=5, params=_params)
+ msg = dict(type='Application',
+ request='DestroyApplication',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyRelation(self, endpoints):
'''
- endpoints : typing.Sequence<+T_co>[str]
+ endpoints : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyRelation', version=5, params=_params)
+ msg = dict(type='Application',
+ request='DestroyRelation',
+ version=5,
+ params=_params)
_params['endpoints'] = endpoints
reply = await self.rpc(msg)
return reply
@ReturnMapping(DestroyUnitResults)
async def DestroyUnit(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~DestroyUnitResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnit', version=5, params=_params)
+ msg = dict(type='Application',
+ request='DestroyUnit',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(None)
async def DestroyUnits(self, unit_names):
'''
- unit_names : typing.Sequence<+T_co>[str]
+ unit_names : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='DestroyUnits', version=5, params=_params)
+ msg = dict(type='Application',
+ request='DestroyUnits',
+ version=5,
+ params=_params)
_params['unit-names'] = unit_names
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Expose', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Expose',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Get(self, application):
'''
application : str
- Returns -> typing.Union[str, typing.Mapping<~KT, +VT_co>[str, typing.Any], _ForwardRef('Value')]
+ Returns -> typing.Union[str, typing.Mapping[str, typing.Any], _ForwardRef('Value')]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Get', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Get',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetCharmURL', version=5, params=_params)
+ msg = dict(type='Application',
+ request='GetCharmURL',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='GetConstraints', version=5, params=_params)
+ msg = dict(type='Application',
+ request='GetConstraints',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Set(self, application, options):
'''
application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
+ options : typing.Mapping[str, str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Set', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Set',
+ version=5,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
application : str
channel : str
charm_url : str
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+ config_settings : typing.Mapping[str, str]
config_settings_yaml : str
force_series : bool
force_units : bool
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
+ resource_ids : typing.Mapping[str, str]
+ storage_constraints : typing.Mapping[str, ~StorageConstraints]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetCharm', version=5, params=_params)
+ msg = dict(type='Application',
+ request='SetCharm',
+ version=5,
+ params=_params)
_params['application'] = application
_params['channel'] = channel
_params['charm-url'] = charm_url
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetConstraints', version=5, params=_params)
+ msg = dict(type='Application',
+ request='SetConstraints',
+ version=5,
+ params=_params)
_params['application'] = application
_params['constraints'] = constraints
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def SetMetricCredentials(self, creds):
'''
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ creds : typing.Sequence[~ApplicationMetricCredential]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='SetMetricCredentials', version=5, params=_params)
+ msg = dict(type='Application',
+ request='SetMetricCredentials',
+ version=5,
+ params=_params)
_params['creds'] = creds
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unexpose', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Unexpose',
+ version=5,
+ params=_params)
_params['application'] = application
reply = await self.rpc(msg)
return reply
async def Unset(self, application, options):
'''
application : str
- options : typing.Sequence<+T_co>[str]
+ options : typing.Sequence[str]
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Unset', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Unset',
+ version=5,
+ params=_params)
_params['application'] = application
_params['options'] = options
reply = await self.rpc(msg)
force_charm_url : bool
force_series : bool
min_units : int
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
settings_yaml : str
Returns -> None
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Application', request='Update', version=5, params=_params)
+ msg = dict(type='Application',
+ request='Update',
+ version=5,
+ params=_params)
_params['application'] = application
_params['charm-url'] = charm_url
_params['constraints'] = constraints
+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
async def APIAddresses(self):
'''
- Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence<+T_co>[str]]
+ Returns -> typing.Union[_ForwardRef('Error'), typing.Sequence[str]]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='APIAddresses', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='APIAddresses',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
async def APIHostPorts(self):
'''
- Returns -> typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ Returns -> typing.Sequence[~HostPort]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='APIHostPorts', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='APIHostPorts',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ActionResults)
async def Actions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ActionResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Actions', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Actions',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddMetricBatches(self, batches):
'''
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ batches : typing.Sequence[~MetricBatchParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AddMetricBatches', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='AddMetricBatches',
+ version=5,
+ params=_params)
_params['batches'] = batches
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def AddUnitStorage(self, storages):
'''
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ storages : typing.Sequence[~StorageAddParams]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AddUnitStorage', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='AddUnitStorage',
+ version=5,
+ params=_params)
_params['storages'] = storages
reply = await self.rpc(msg)
return reply
@ReturnMapping(MachinePortsResults)
async def AllMachinePorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MachinePortsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AllMachinePorts', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='AllMachinePorts',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ApplicationStatusResults)
async def ApplicationStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ApplicationStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ApplicationStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ApplicationStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def AssignedMachine(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AssignedMachine', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='AssignedMachine',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def AvailabilityZone(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='AvailabilityZone', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='AvailabilityZone',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def BeginActions(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='BeginActions', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='BeginActions',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
async def CACert(self):
'''
- Returns -> typing.Sequence<+T_co>[int]
+ Returns -> typing.Sequence[int]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CACert', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='CACert',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def CharmArchiveSha256(self, urls):
'''
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ urls : typing.Sequence[~CharmURL]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmArchiveSha256', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmArchiveSha256',
+ version=5,
+ params=_params)
_params['urls'] = urls
reply = await self.rpc(msg)
return reply
@ReturnMapping(IntResults)
async def CharmModifiedVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~IntResult]<~IntResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~IntResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmModifiedVersion', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmModifiedVersion',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringBoolResults)
async def CharmURL(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringBoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CharmURL', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='CharmURL',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ClearResolved(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ClearResolved', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ClearResolved',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def ClosePorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityPortRange]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ClosePorts', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ClosePorts',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ConfigSettingsResults)
async def ConfigSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ConfigSettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ConfigSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ConfigSettings',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='CurrentModel', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='CurrentModel',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Destroy(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Destroy', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Destroy',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DestroyAllSubordinates(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='DestroyAllSubordinates', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='DestroyAllSubordinates',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def DestroyUnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='DestroyUnitStorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='DestroyUnitStorageAttachments',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnsureDead(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='EnsureDead', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='EnsureDead',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def EnterScope(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='EnterScope', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='EnterScope',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def FinishActions(self, results):
'''
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ results : typing.Sequence[~ActionExecutionResult]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='FinishActions', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='FinishActions',
+ version=5,
+ params=_params)
_params['results'] = results
reply = await self.rpc(msg)
return reply
@ReturnMapping(MeterStatusResults)
async def GetMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~MeterStatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='GetMeterStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='GetMeterStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringBoolResults)
async def GetPrincipal(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringBoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='GetPrincipal', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='GetPrincipal',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(BoolResults)
async def HasSubordinates(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~BoolResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='HasSubordinates', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='HasSubordinates',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsResults)
async def JoinedRelations(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='JoinedRelations', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='JoinedRelations',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def LeaveScope(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='LeaveScope', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='LeaveScope',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def Life(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Life', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Life',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def Merge(self, params):
'''
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ params : typing.Sequence[~MergeLeadershipSettingsParam]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Merge', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Merge',
+ version=5,
+ params=_params)
_params['params'] = params
reply = await self.rpc(msg)
return reply
async def ModelConfig(self):
'''
- Returns -> typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ Returns -> typing.Mapping[str, typing.Any]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ModelConfig', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ModelConfig',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ModelUUID', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ModelUUID',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NetworkInfoResults)
async def NetworkInfo(self, bindings, unit):
'''
- bindings : typing.Sequence<+T_co>[str]
+ bindings : typing.Sequence[str]
unit : str
- Returns -> typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
+ Returns -> typing.Mapping[str, ~NetworkInfoResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='NetworkInfo', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='NetworkInfo',
+ version=5,
+ params=_params)
_params['bindings'] = bindings
_params['unit'] = unit
reply = await self.rpc(msg)
@ReturnMapping(ErrorResults)
async def OpenPorts(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityPortRange]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='OpenPorts', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='OpenPorts',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def PrivateAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='PrivateAddress', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='PrivateAddress',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ProviderType', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ProviderType',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def PublicAddress(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='PublicAddress', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='PublicAddress',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(GetLeadershipSettingsBulkResults)
async def Read(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~GetLeadershipSettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Read', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Read',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(SettingsResults)
async def ReadRemoteSettings(self, relation_unit_pairs):
'''
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+ relation_unit_pairs : typing.Sequence[~RelationUnitPair]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ReadRemoteSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ReadRemoteSettings',
+ version=5,
+ params=_params)
_params['relation-unit-pairs'] = relation_unit_pairs
reply = await self.rpc(msg)
return reply
@ReturnMapping(SettingsResults)
async def ReadSettings(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~SettingsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='ReadSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='ReadSettings',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationResults)
async def Relation(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~RelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Relation', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Relation',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationResults)
async def RelationById(self, relation_ids):
'''
- relation_ids : typing.Sequence<+T_co>[int]
- Returns -> typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+ relation_ids : typing.Sequence[int]
+ Returns -> typing.Sequence[~RelationResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RelationById', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='RelationById',
+ version=5,
+ params=_params)
_params['relation-ids'] = relation_ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RemoveStorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RemoveStorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='RemoveStorageAttachments',
+ version=5,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def RequestReboot(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='RequestReboot', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='RequestReboot',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ResolvedModeResults)
async def Resolved(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~ResolvedModeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Resolved', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Resolved',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SLALevel', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SLALevel',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetAgentStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetAgentStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetAgentStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetApplicationStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetApplicationStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetApplicationStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetCharmURL(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityCharmURL]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetCharmURL', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetCharmURL',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetUnitStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityStatusArgs]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetUnitStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetUnitStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def SetWorkloadVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ entities : typing.Sequence[~EntityWorkloadVersion]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='SetWorkloadVersion', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='SetWorkloadVersion',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(LifeResults)
async def StorageAttachmentLife(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~LifeResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='StorageAttachmentLife', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='StorageAttachmentLife',
+ version=5,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageAttachmentResults)
async def StorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~StorageAttachmentResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='StorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='StorageAttachments',
+ version=5,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(StatusResults)
async def UnitStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StatusResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UnitStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='UnitStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StorageAttachmentIdsResults)
async def UnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StorageAttachmentIdsResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UnitStorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='UnitStorageAttachments',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(ErrorResults)
async def UpdateSettings(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
- Returns -> typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ relation_units : typing.Sequence[~RelationUnitSettings]
+ Returns -> typing.Sequence[~ErrorResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='UpdateSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='UpdateSettings',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def Watch(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='Watch', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='Watch',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchAPIHostPorts', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchAPIHostPorts',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchActionNotifications(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchActionNotifications', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchActionNotifications',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchConfigSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchConfigSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchConfigSettings',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchForModelConfigChanges', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchForModelConfigChanges',
+ version=5,
+ params=_params)
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchLeadershipSettings(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchLeadershipSettings', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchLeadershipSettings',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchMeterStatus(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchMeterStatus', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchMeterStatus',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(RelationUnitsWatchResults)
async def WatchRelationUnits(self, relation_units):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
- Returns -> typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
+ relation_units : typing.Sequence[~RelationUnit]
+ Returns -> typing.Sequence[~RelationUnitsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchRelationUnits', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchRelationUnits',
+ version=5,
+ params=_params)
_params['relation-units'] = relation_units
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchStorageAttachments(self, ids):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ ids : typing.Sequence[~StorageAttachmentId]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchStorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchStorageAttachments',
+ version=5,
+ params=_params)
_params['ids'] = ids
reply = await self.rpc(msg)
return reply
@ReturnMapping(NotifyWatchResults)
async def WatchUnitAddresses(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~NotifyWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchUnitAddresses', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchUnitAddresses',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchUnitRelations(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchUnitRelations', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchUnitRelations',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringsWatchResults)
async def WatchUnitStorageAttachments(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringsWatchResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WatchUnitStorageAttachments', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WatchUnitStorageAttachments',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
@ReturnMapping(StringResults)
async def WorkloadVersion(self, entities):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
- Returns -> typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ entities : typing.Sequence[~Entity]
+ Returns -> typing.Sequence[~StringResult]
'''
# map input types to rpc msg
_params = dict()
- msg = dict(type='Uniter', request='WorkloadVersion', version=5, params=_params)
+ msg = dict(type='Uniter',
+ request='WorkloadVersion',
+ version=5,
+ params=_params)
_params['entities'] = entities
reply = await self.rpc(msg)
return reply
--- /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
+# 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
+# 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
+
+
_toPy = {'servers': 'servers'}
def __init__(self, servers=None, **unknown_fields):
'''
- servers : typing.Sequence<+T_co>[~HostPort]<~HostPort>
+ servers : typing.Sequence[~HostPort]
'''
self.servers = [HostPort.from_json(o) for o in servers or []]
def __init__(self, name=None, parameters=None, receiver=None, tag=None, **unknown_fields):
'''
name : str
- parameters : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ parameters : typing.Mapping[str, typing.Any]
receiver : str
tag : str
'''
'''
action_tag : str
message : str
- results : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ results : typing.Mapping[str, typing.Any]
status : str
'''
self.action_tag = action_tag
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ActionExecutionResult]<~ActionExecutionResult>
+ results : typing.Sequence[~ActionExecutionResult]
'''
self.results = [ActionExecutionResult.from_json(o) for o in results or []]
+class ActionPruneArgs(Type):
+ _toSchema = {'max_history_mb': 'max-history-mb', 'max_history_time': 'max-history-time'}
+ _toPy = {'max-history-mb': 'max_history_mb', 'max-history-time': 'max_history_time'}
+ def __init__(self, max_history_mb=None, max_history_time=None, **unknown_fields):
+ '''
+ max_history_mb : int
+ max_history_time : int
+ '''
+ self.max_history_mb = max_history_mb
+ self.max_history_time = max_history_time
+
+
+
class ActionResult(Type):
_toSchema = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'}
_toPy = {'action': 'action', 'completed': 'completed', 'enqueued': 'enqueued', 'error': 'error', 'message': 'message', 'output': 'output', 'started': 'started', 'status': 'status'}
enqueued : str
error : Error
message : str
- output : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ output : typing.Mapping[str, typing.Any]
started : str
status : str
'''
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ results : typing.Sequence[~ActionResult]
'''
self.results = [ActionResult.from_json(o) for o in results or []]
def __init__(self, description=None, params=None, **unknown_fields):
'''
description : str
- params : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ params : typing.Mapping[str, typing.Any]
'''
self.description = description
self.params = params
_toPy = {'actions': 'actions'}
def __init__(self, actions=None, **unknown_fields):
'''
- actions : typing.Sequence<+T_co>[~Action]<~Action>
+ actions : typing.Sequence[~Action]
'''
self.actions = [Action.from_json(o) for o in actions or []]
_toPy = {'actions': 'actions', 'error': 'error', 'name': 'name'}
def __init__(self, actions=None, error=None, name=None, **unknown_fields):
'''
- actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ actions : typing.Sequence[~ActionResult]
error : Error
name : str
'''
_toPy = {'actions': 'actions'}
def __init__(self, actions=None, **unknown_fields):
'''
- actions : typing.Sequence<+T_co>[~ActionsByName]<~ActionsByName>
+ actions : typing.Sequence[~ActionsByName]
'''
self.actions = [ActionsByName.from_json(o) for o in actions or []]
_toPy = {'actions': 'actions', 'error': 'error', 'receiver': 'receiver'}
def __init__(self, actions=None, error=None, receiver=None, **unknown_fields):
'''
- actions : typing.Sequence<+T_co>[~ActionResult]<~ActionResult>
+ actions : typing.Sequence[~ActionResult]
error : Error
receiver : str
'''
_toPy = {'actions': 'actions'}
def __init__(self, actions=None, **unknown_fields):
'''
- actions : typing.Sequence<+T_co>[~ActionsByReceiver]<~ActionsByReceiver>
+ actions : typing.Sequence[~ActionsByReceiver]
'''
self.actions = [ActionsByReceiver.from_json(o) for o in actions or []]
+class AddApplicationOffer(Type):
+ _toSchema = {'application_description': 'application-description', 'application_name': 'application-name', 'endpoints': 'endpoints', 'model_tag': 'model-tag', 'offer_name': 'offer-name'}
+ _toPy = {'application-description': 'application_description', 'application-name': 'application_name', 'endpoints': 'endpoints', 'model-tag': 'model_tag', 'offer-name': 'offer_name'}
+ def __init__(self, application_description=None, application_name=None, endpoints=None, model_tag=None, offer_name=None, **unknown_fields):
+ '''
+ application_description : str
+ application_name : str
+ endpoints : typing.Mapping[str, str]
+ model_tag : str
+ offer_name : str
+ '''
+ self.application_description = application_description
+ self.application_name = application_name
+ self.endpoints = endpoints
+ self.model_tag = model_tag
+ self.offer_name = offer_name
+
+
+
+class AddApplicationOffers(Type):
+ _toSchema = {'offers': 'Offers'}
+ _toPy = {'Offers': 'offers'}
+ def __init__(self, offers=None, **unknown_fields):
+ '''
+ offers : typing.Sequence[~AddApplicationOffer]
+ '''
+ self.offers = [AddApplicationOffer.from_json(o) for o in offers or []]
+
+
+
class AddApplicationUnits(Type):
_toSchema = {'application': 'application', 'num_units': 'num-units', 'placement': 'placement'}
_toPy = {'application': 'application', 'num-units': 'num_units', 'placement': 'placement'}
'''
application : str
num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
+ placement : typing.Sequence[~Placement]
'''
self.application = application
self.num_units = num_units
_toPy = {'units': 'units'}
def __init__(self, units=None, **unknown_fields):
'''
- units : typing.Sequence<+T_co>[str]
+ units : typing.Sequence[str]
'''
self.units = units
+class AddCloudArgs(Type):
+ _toSchema = {'cloud': 'cloud', 'name': 'name'}
+ _toPy = {'cloud': 'cloud', 'name': 'name'}
+ def __init__(self, cloud=None, name=None, **unknown_fields):
+ '''
+ cloud : Cloud
+ name : str
+ '''
+ self.cloud = Cloud.from_json(cloud) if cloud else None
+ self.name = name
+
+
+
class AddMachineParams(Type):
_toSchema = {'addresses': 'addresses', 'constraints': 'constraints', 'container_type': 'container-type', 'disks': 'disks', 'hardware_characteristics': 'hardware-characteristics', 'instance_id': 'instance-id', 'jobs': 'jobs', 'nonce': 'nonce', 'parent_id': 'parent-id', 'placement': 'placement', 'series': 'series'}
_toPy = {'addresses': 'addresses', 'constraints': 'constraints', 'container-type': 'container_type', 'disks': 'disks', 'hardware-characteristics': 'hardware_characteristics', 'instance-id': 'instance_id', 'jobs': 'jobs', 'nonce': 'nonce', 'parent-id': 'parent_id', 'placement': 'placement', 'series': 'series'}
def __init__(self, addresses=None, constraints=None, container_type=None, disks=None, hardware_characteristics=None, instance_id=None, jobs=None, nonce=None, parent_id=None, placement=None, series=None, **unknown_fields):
'''
- addresses : typing.Sequence<+T_co>[~Address]<~Address>
+ addresses : typing.Sequence[~Address]
constraints : Value
container_type : str
- disks : typing.Sequence<+T_co>[~Constraints]<~Constraints>
+ disks : typing.Sequence[~Constraints]
hardware_characteristics : HardwareCharacteristics
instance_id : str
- jobs : typing.Sequence<+T_co>[str]
+ jobs : typing.Sequence[str]
nonce : str
parent_id : str
placement : Placement
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~AddMachineParams]<~AddMachineParams>
+ params : typing.Sequence[~AddMachineParams]
'''
self.params = [AddMachineParams.from_json(o) for o in params or []]
_toPy = {'machines': 'machines'}
def __init__(self, machines=None, **unknown_fields):
'''
- machines : typing.Sequence<+T_co>[~AddMachinesResult]<~AddMachinesResult>
+ machines : typing.Sequence[~AddMachinesResult]
'''
self.machines = [AddMachinesResult.from_json(o) for o in machines or []]
'''
addcharmwithauthorization : AddCharmWithAuthorization
entity : Entity
- resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
+ resources : typing.Sequence[~CharmResource]
'''
self.addcharmwithauthorization = AddCharmWithAuthorization.from_json(addcharmwithauthorization) if addcharmwithauthorization else None
self.entity = Entity.from_json(entity) if entity else None
def __init__(self, errorresult=None, pending_ids=None, **unknown_fields):
'''
errorresult : ErrorResult
- pending_ids : typing.Sequence<+T_co>[str]
+ pending_ids : typing.Sequence[str]
'''
self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
self.pending_ids = pending_ids
_toPy = {'endpoints': 'endpoints'}
def __init__(self, endpoints=None, **unknown_fields):
'''
- endpoints : typing.Sequence<+T_co>[str]
+ endpoints : typing.Sequence[str]
'''
self.endpoints = endpoints
_toPy = {'endpoints': 'endpoints'}
def __init__(self, endpoints=None, **unknown_fields):
'''
- endpoints : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
+ endpoints : typing.Mapping[str, ~CharmRelation]
'''
self.endpoints = endpoints
+class AddStorageDetails(Type):
+ _toSchema = {'storage_tags': 'storage-tags'}
+ _toPy = {'storage-tags': 'storage_tags'}
+ def __init__(self, storage_tags=None, **unknown_fields):
+ '''
+ storage_tags : typing.Sequence[str]
+ '''
+ self.storage_tags = storage_tags
+
+
+
+class AddStorageResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : AddStorageDetails
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = AddStorageDetails.from_json(result) if result else None
+
+
+
+class AddStorageResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~AddStorageResult]
+ '''
+ self.results = [AddStorageResult.from_json(o) for o in results or []]
+
+
+
class AddSubnetParams(Type):
_toSchema = {'space_tag': 'space-tag', 'subnet_provider_id': 'subnet-provider-id', 'subnet_tag': 'subnet-tag', 'zones': 'zones'}
_toPy = {'space-tag': 'space_tag', 'subnet-provider-id': 'subnet_provider_id', 'subnet-tag': 'subnet_tag', 'zones': 'zones'}
space_tag : str
subnet_provider_id : str
subnet_tag : str
- zones : typing.Sequence<+T_co>[str]
+ zones : typing.Sequence[str]
'''
self.space_tag = space_tag
self.subnet_provider_id = subnet_provider_id
_toPy = {'subnets': 'subnets'}
def __init__(self, subnets=None, **unknown_fields):
'''
- subnets : typing.Sequence<+T_co>[~AddSubnetParams]<~AddSubnetParams>
+ subnets : typing.Sequence[~AddSubnetParams]
'''
self.subnets = [AddSubnetParams.from_json(o) for o in subnets or []]
def __init__(self, error=None, secret_key=None, tag=None, **unknown_fields):
'''
error : Error
- secret_key : typing.Sequence<+T_co>[int]
+ secret_key : typing.Sequence[int]
tag : str
'''
self.error = Error.from_json(error) if error else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~AddUserResult]<~AddUserResult>
+ results : typing.Sequence[~AddUserResult]
'''
self.results = [AddUserResult.from_json(o) for o in results or []]
_toPy = {'users': 'users'}
def __init__(self, users=None, **unknown_fields):
'''
- users : typing.Sequence<+T_co>[~AddUser]<~AddUser>
+ users : typing.Sequence[~AddUser]
'''
self.users = [AddUser.from_json(o) for o in users or []]
'''
container_type : str
error : Error
- jobs : typing.Sequence<+T_co>[str]
+ jobs : typing.Sequence[str]
life : str
'''
self.container_type = container_type
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~AgentGetEntitiesResult]<~AgentGetEntitiesResult>
+ entities : typing.Sequence[~AgentGetEntitiesResult]
'''
self.entities = [AgentGetEntitiesResult.from_json(o) for o in entities or []]
_toPy = {'deltas': 'deltas'}
def __init__(self, deltas=None, **unknown_fields):
'''
- deltas : typing.Sequence<+T_co>[~Delta]<~Delta>
+ deltas : typing.Sequence[~Delta]
'''
self.deltas = [Delta.from_json(o) for o in deltas or []]
_toPy = {'annotations': 'annotations', 'entity': 'entity', 'error': 'error'}
def __init__(self, annotations=None, entity=None, error=None, **unknown_fields):
'''
- annotations : typing.Mapping<~KT, +VT_co>[str, str]
+ annotations : typing.Mapping[str, str]
entity : str
error : ErrorResult
'''
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~AnnotationsGetResult]<~AnnotationsGetResult>
+ results : typing.Sequence[~AnnotationsGetResult]
'''
self.results = [AnnotationsGetResult.from_json(o) for o in results or []]
_toPy = {'annotations': 'annotations'}
def __init__(self, annotations=None, **unknown_fields):
'''
- annotations : typing.Sequence<+T_co>[~EntityAnnotations]<~EntityAnnotations>
+ annotations : typing.Sequence[~EntityAnnotations]
'''
self.annotations = [EntityAnnotations.from_json(o) for o in annotations or []]
+class ApplicationCharm(Type):
+ _toSchema = {'charm_modified_version': 'charm-modified-version', 'force_upgrade': 'force-upgrade', 'sha256': 'sha256', 'url': 'url'}
+ _toPy = {'charm-modified-version': 'charm_modified_version', 'force-upgrade': 'force_upgrade', 'sha256': 'sha256', 'url': 'url'}
+ def __init__(self, charm_modified_version=None, force_upgrade=None, sha256=None, url=None, **unknown_fields):
+ '''
+ charm_modified_version : int
+ force_upgrade : bool
+ sha256 : str
+ url : str
+ '''
+ self.charm_modified_version = charm_modified_version
+ self.force_upgrade = force_upgrade
+ self.sha256 = sha256
+ self.url = url
+
+
+
class ApplicationCharmActionsResult(Type):
_toSchema = {'actions': 'actions', 'application_tag': 'application-tag', 'error': 'error'}
_toPy = {'actions': 'actions', 'application-tag': 'application_tag', 'error': 'error'}
def __init__(self, actions=None, application_tag=None, error=None, **unknown_fields):
'''
- actions : typing.Mapping<~KT, +VT_co>[str, ~ActionSpec]<~ActionSpec>
+ actions : typing.Mapping[str, ~ActionSpec]
application_tag : str
error : Error
'''
_toPy = {'charm-relations': 'charm_relations'}
def __init__(self, charm_relations=None, **unknown_fields):
'''
- charm_relations : typing.Sequence<+T_co>[str]
+ charm_relations : typing.Sequence[str]
'''
self.charm_relations = charm_relations
+class ApplicationCharmResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ApplicationCharm
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ApplicationCharm.from_json(result) if result else None
+
+
+
+class ApplicationCharmResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ApplicationCharmResult]
+ '''
+ self.results = [ApplicationCharmResult.from_json(o) for o in results or []]
+
+
+
+class ApplicationConfigSet(Type):
+ _toSchema = {'application': 'application', 'config': 'config'}
+ _toPy = {'application': 'application', 'config': 'config'}
+ def __init__(self, application=None, config=None, **unknown_fields):
+ '''
+ application : str
+ config : typing.Mapping[str, str]
+ '''
+ self.application = application
+ self.config = config
+
+
+
+class ApplicationConfigSetArgs(Type):
+ _toSchema = {'args': 'Args'}
+ _toPy = {'Args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~ApplicationConfigSet]
+ '''
+ self.args = [ApplicationConfigSet.from_json(o) for o in args or []]
+
+
+
+class ApplicationConfigUnsetArgs(Type):
+ _toSchema = {'args': 'Args'}
+ _toPy = {'Args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~ApplicationUnset]
+ '''
+ self.args = [ApplicationUnset.from_json(o) for o in args or []]
+
+
+
+class ApplicationConstraint(Type):
+ _toSchema = {'constraints': 'constraints', 'error': 'error'}
+ _toPy = {'constraints': 'constraints', 'error': 'error'}
+ def __init__(self, constraints=None, error=None, **unknown_fields):
+ '''
+ constraints : Value
+ error : Error
+ '''
+ self.constraints = Value.from_json(constraints) if constraints else None
+ self.error = Error.from_json(error) if error else None
+
+
+
class ApplicationDeploy(Type):
- _toSchema = {'application': 'application', 'channel': 'channel', 'charm_url': 'charm-url', 'config': 'config', 'config_yaml': 'config-yaml', 'constraints': 'constraints', 'endpoint_bindings': 'endpoint-bindings', 'num_units': 'num-units', 'placement': 'placement', 'resources': 'resources', 'series': 'series', 'storage': 'storage'}
- _toPy = {'application': 'application', 'channel': 'channel', 'charm-url': 'charm_url', 'config': 'config', 'config-yaml': 'config_yaml', 'constraints': 'constraints', 'endpoint-bindings': 'endpoint_bindings', 'num-units': 'num_units', 'placement': 'placement', 'resources': 'resources', 'series': 'series', 'storage': 'storage'}
- def __init__(self, application=None, channel=None, charm_url=None, config=None, config_yaml=None, constraints=None, endpoint_bindings=None, num_units=None, placement=None, resources=None, series=None, storage=None, **unknown_fields):
+ _toSchema = {'application': 'application', 'attach_storage': 'attach-storage', 'channel': 'channel', 'charm_url': 'charm-url', 'config': 'config', 'config_yaml': 'config-yaml', 'constraints': 'constraints', 'devices': 'devices', 'endpoint_bindings': 'endpoint-bindings', 'num_units': 'num-units', 'placement': 'placement', 'policy': 'policy', 'resources': 'resources', 'series': 'series', 'storage': 'storage'}
+ _toPy = {'application': 'application', 'attach-storage': 'attach_storage', 'channel': 'channel', 'charm-url': 'charm_url', 'config': 'config', 'config-yaml': 'config_yaml', 'constraints': 'constraints', 'devices': 'devices', 'endpoint-bindings': 'endpoint_bindings', 'num-units': 'num_units', 'placement': 'placement', 'policy': 'policy', 'resources': 'resources', 'series': 'series', 'storage': 'storage'}
+ def __init__(self, application=None, attach_storage=None, channel=None, charm_url=None, config=None, config_yaml=None, constraints=None, devices=None, endpoint_bindings=None, num_units=None, placement=None, policy=None, resources=None, series=None, storage=None, **unknown_fields):
'''
application : str
+ attach_storage : typing.Sequence[str]
channel : str
charm_url : str
- config : typing.Mapping<~KT, +VT_co>[str, str]
+ config : typing.Mapping[str, str]
config_yaml : str
constraints : Value
- endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str]
+ devices : typing.Mapping[str, ~Constraints]
+ endpoint_bindings : typing.Mapping[str, str]
num_units : int
- placement : typing.Sequence<+T_co>[~Placement]<~Placement>
- resources : typing.Mapping<~KT, +VT_co>[str, str]
+ placement : typing.Sequence[~Placement]
+ policy : str
+ resources : typing.Mapping[str, str]
series : str
- storage : typing.Mapping<~KT, +VT_co>[str, ~Constraints]<~Constraints>
+ storage : typing.Mapping[str, ~Constraints]
'''
self.application = application
+ self.attach_storage = attach_storage
self.channel = channel
self.charm_url = charm_url
self.config = config
self.config_yaml = config_yaml
self.constraints = Value.from_json(constraints) if constraints else None
+ self.devices = devices
self.endpoint_bindings = endpoint_bindings
self.num_units = num_units
self.placement = [Placement.from_json(o) for o in placement or []]
+ self.policy = policy
self.resources = resources
self.series = series
self.storage = storage
+class 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'}
'''
application : str
charm : str
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
constraints : Value
series : str
'''
def __init__(self, application=None, metrics_credentials=None, **unknown_fields):
'''
application : str
- metrics_credentials : typing.Sequence<+T_co>[int]
+ metrics_credentials : typing.Sequence[int]
'''
self.application = application
self.metrics_credentials = metrics_credentials
_toPy = {'creds': 'creds'}
def __init__(self, creds=None, **unknown_fields):
'''
- creds : typing.Sequence<+T_co>[~ApplicationMetricCredential]<~ApplicationMetricCredential>
+ creds : typing.Sequence[~ApplicationMetricCredential]
'''
self.creds = [ApplicationMetricCredential.from_json(o) for o in creds or []]
'''
access : str
application_description : str
- bindings : typing.Mapping<~KT, +VT_co>[str, str]
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
+ bindings : typing.Mapping[str, str]
+ endpoints : typing.Sequence[~RemoteEndpoint]
offer_name : str
offer_url : str
source_model_tag : str
- spaces : typing.Sequence<+T_co>[~RemoteSpace]<~RemoteSpace>
+ spaces : typing.Sequence[~RemoteSpace]
'''
self.access = access
self.application_description = application_description
+class ApplicationOfferAdminDetails(Type):
+ _toSchema = {'application_name': 'application-name', 'applicationofferdetails': 'ApplicationOfferDetails', 'charm_url': 'charm-url', 'connections': 'connections'}
+ _toPy = {'ApplicationOfferDetails': 'applicationofferdetails', 'application-name': 'application_name', 'charm-url': 'charm_url', 'connections': 'connections'}
+ def __init__(self, applicationofferdetails=None, application_name=None, charm_url=None, connections=None, **unknown_fields):
+ '''
+ applicationofferdetails : ApplicationOfferDetails
+ application_name : str
+ charm_url : str
+ connections : typing.Sequence[~OfferConnection]
+ '''
+ self.applicationofferdetails = ApplicationOfferDetails.from_json(applicationofferdetails) if applicationofferdetails else None
+ self.application_name = application_name
+ self.charm_url = charm_url
+ self.connections = [OfferConnection.from_json(o) for o in connections or []]
+
+
+
+class ApplicationOfferDetails(Type):
+ _toSchema = {'application_description': 'application-description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer_name': 'offer-name', 'offer_url': 'offer-url', 'offer_uuid': 'offer-uuid', 'source_model_tag': 'source-model-tag', 'spaces': 'spaces', 'users': 'users'}
+ _toPy = {'application-description': 'application_description', 'bindings': 'bindings', 'endpoints': 'endpoints', 'offer-name': 'offer_name', 'offer-url': 'offer_url', 'offer-uuid': 'offer_uuid', 'source-model-tag': 'source_model_tag', 'spaces': 'spaces', 'users': 'users'}
+ def __init__(self, application_description=None, bindings=None, endpoints=None, offer_name=None, offer_url=None, offer_uuid=None, source_model_tag=None, spaces=None, users=None, **unknown_fields):
+ '''
+ application_description : str
+ bindings : typing.Mapping[str, str]
+ endpoints : typing.Sequence[~RemoteEndpoint]
+ offer_name : str
+ offer_url : str
+ offer_uuid : str
+ source_model_tag : str
+ spaces : typing.Sequence[~RemoteSpace]
+ users : typing.Sequence[~OfferUserDetails]
+ '''
+ self.application_description = application_description
+ self.bindings = bindings
+ self.endpoints = [RemoteEndpoint.from_json(o) for o in endpoints or []]
+ self.offer_name = offer_name
+ self.offer_url = offer_url
+ self.offer_uuid = offer_uuid
+ self.source_model_tag = source_model_tag
+ self.spaces = [RemoteSpace.from_json(o) for o in spaces or []]
+ self.users = [OfferUserDetails.from_json(o) for o in users or []]
+
+
+
+class ApplicationOfferResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ApplicationOfferAdminDetails
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ApplicationOfferAdminDetails.from_json(result) if result else None
+
+
+
+class ApplicationOfferStatus(Type):
+ _toSchema = {'active_connected_count': 'active-connected-count', 'application_name': 'application-name', 'charm': 'charm', 'endpoints': 'endpoints', 'err': 'err', 'offer_name': 'offer-name', 'total_connected_count': 'total-connected-count'}
+ _toPy = {'active-connected-count': 'active_connected_count', 'application-name': 'application_name', 'charm': 'charm', 'endpoints': 'endpoints', 'err': 'err', 'offer-name': 'offer_name', 'total-connected-count': 'total_connected_count'}
+ def __init__(self, active_connected_count=None, application_name=None, charm=None, endpoints=None, err=None, offer_name=None, total_connected_count=None, **unknown_fields):
+ '''
+ active_connected_count : int
+ application_name : str
+ charm : str
+ endpoints : typing.Mapping[str, ~RemoteEndpoint]
+ err : typing.Mapping[str, typing.Any]
+ offer_name : str
+ total_connected_count : int
+ '''
+ self.active_connected_count = active_connected_count
+ self.application_name = application_name
+ self.charm = charm
+ self.endpoints = endpoints
+ self.err = err
+ self.offer_name = offer_name
+ self.total_connected_count = total_connected_count
+
+
+
+class ApplicationOffersResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ApplicationOfferResult]
+ '''
+ self.results = [ApplicationOfferResult.from_json(o) for o in results or []]
+
+
+
class ApplicationRelationsChange(Type):
_toSchema = {'changed': 'changed', 'removed': 'removed'}
_toPy = {'changed': 'changed', 'removed': 'removed'}
def __init__(self, changed=None, removed=None, **unknown_fields):
'''
- changed : typing.Sequence<+T_co>[~RelationChange]<~RelationChange>
- removed : typing.Sequence<+T_co>[int]
+ changed : typing.Sequence[~RelationChange]
+ removed : typing.Sequence[int]
'''
self.changed = [RelationChange.from_json(o) for o in changed or []]
self.removed = removed
def __init__(self, application=None, options=None, **unknown_fields):
'''
application : str
- options : typing.Mapping<~KT, +VT_co>[str, str]
+ options : typing.Mapping[str, str]
'''
self.application = application
self.options = options
application : str
channel : str
charm_url : str
- config_settings : typing.Mapping<~KT, +VT_co>[str, str]
+ config_settings : typing.Mapping[str, str]
config_settings_yaml : str
force_series : bool
force_units : bool
- resource_ids : typing.Mapping<~KT, +VT_co>[str, str]
- storage_constraints : typing.Mapping<~KT, +VT_co>[str, ~StorageConstraints]<~StorageConstraints>
+ resource_ids : typing.Mapping[str, str]
+ storage_constraints : typing.Mapping[str, ~StorageConstraints]
'''
self.application = application
self.channel = channel
+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'}
'''
can_upgrade_to : str
charm : str
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ err : typing.Mapping[str, typing.Any]
exposed : bool
life : str
- meter_statuses : typing.Mapping<~KT, +VT_co>[str, ~MeterStatus]<~MeterStatus>
- relations : typing.Sequence<+T_co>[str]
+ meter_statuses : typing.Mapping[str, ~MeterStatus]
+ relations : typing.Sequence[str]
series : str
status : DetailedStatus
- subordinate_to : typing.Sequence<+T_co>[str]
- units : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
+ subordinate_to : typing.Sequence[str]
+ units : typing.Mapping[str, ~UnitStatus]
workload_version : str
'''
self.can_upgrade_to = can_upgrade_to
'''
application : StatusResult
error : Error
- units : typing.Mapping<~KT, +VT_co>[str, ~StatusResult]<~StatusResult>
+ units : typing.Mapping[str, ~StatusResult]
'''
self.application = StatusResult.from_json(application) if application else None
self.error = Error.from_json(error) if error else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ApplicationStatusResult]<~ApplicationStatusResult>
+ results : typing.Sequence[~ApplicationStatusResult]
'''
self.results = [ApplicationStatusResult.from_json(o) for o in results or []]
_toPy = {'application-urls': 'application_urls'}
def __init__(self, application_urls=None, **unknown_fields):
'''
- application_urls : typing.Sequence<+T_co>[str]
+ application_urls : typing.Sequence[str]
'''
self.application_urls = application_urls
+class ApplicationUnitParams(Type):
+ _toSchema = {'address': 'address', 'data': 'data', 'filesystem_info': 'filesystem-info', 'info': 'info', 'ports': 'ports', 'provider_id': 'provider-id', 'status': 'status', 'unit_tag': 'unit-tag'}
+ _toPy = {'address': 'address', 'data': 'data', 'filesystem-info': 'filesystem_info', 'info': 'info', 'ports': 'ports', 'provider-id': 'provider_id', 'status': 'status', 'unit-tag': 'unit_tag'}
+ def __init__(self, address=None, data=None, filesystem_info=None, info=None, ports=None, provider_id=None, status=None, unit_tag=None, **unknown_fields):
+ '''
+ address : str
+ data : typing.Mapping[str, typing.Any]
+ filesystem_info : typing.Sequence[~KubernetesFilesystemInfo]
+ info : str
+ ports : typing.Sequence[str]
+ provider_id : str
+ status : str
+ unit_tag : str
+ '''
+ self.address = address
+ self.data = data
+ self.filesystem_info = [KubernetesFilesystemInfo.from_json(o) for o in filesystem_info or []]
+ self.info = info
+ self.ports = ports
+ self.provider_id = provider_id
+ self.status = status
+ self.unit_tag = unit_tag
+
+
+
class ApplicationUnset(Type):
_toSchema = {'application': 'application', 'options': 'options'}
_toPy = {'application': 'application', 'options': 'options'}
def __init__(self, application=None, options=None, **unknown_fields):
'''
application : str
- options : typing.Sequence<+T_co>[str]
+ options : typing.Sequence[str]
'''
self.application = application
self.options = options
force_charm_url : bool
force_series : bool
min_units : int
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
settings_yaml : str
'''
self.application = application
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ApplicationCharmActionsResult]<~ApplicationCharmActionsResult>
+ results : typing.Sequence[~ApplicationCharmActionsResult]
'''
self.results = [ApplicationCharmActionsResult.from_json(o) for o in results or []]
_toPy = {'applications': 'applications'}
def __init__(self, applications=None, **unknown_fields):
'''
- applications : typing.Sequence<+T_co>[~ApplicationDeploy]<~ApplicationDeploy>
+ applications : typing.Sequence[~ApplicationDeploy]
'''
self.applications = [ApplicationDeploy.from_json(o) for o in applications or []]
_toPy = {'list': 'list_'}
def __init__(self, list_=None, **unknown_fields):
'''
- list_ : typing.Sequence<+T_co>[~BackupsMetadataResult]<~BackupsMetadataResult>
+ list_ : typing.Sequence[~BackupsMetadataResult]
'''
self.list_ = [BackupsMetadataResult.from_json(o) for o in list_ or []]
def __init__(self, busaddress=None, devicelinks=None, devicename=None, filesystemtype=None, hardwareid=None, inuse=None, label=None, mountpoint=None, size=None, uuid=None, **unknown_fields):
'''
busaddress : str
- devicelinks : typing.Sequence<+T_co>[str]
+ devicelinks : typing.Sequence[str]
devicename : str
filesystemtype : str
hardwareid : str
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~BlockDeviceResult]<~BlockDeviceResult>
+ results : typing.Sequence[~BlockDeviceResult]
'''
self.results = [BlockDeviceResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~BlockResult]<~BlockResult>
+ results : typing.Sequence[~BlockResult]
'''
self.results = [BlockResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~BoolResult]<~BoolResult>
+ results : typing.Sequence[~BoolResult]
'''
self.results = [BoolResult.from_json(o) for o in results or []]
+class BulkImportStorageParams(Type):
+ _toSchema = {'storage': 'storage'}
+ _toPy = {'storage': 'storage'}
+ def __init__(self, storage=None, **unknown_fields):
+ '''
+ storage : typing.Sequence[~ImportStorageParams]
+ '''
+ self.storage = [ImportStorageParams.from_json(o) for o in storage or []]
+
+
+
class BundleChange(Type):
_toSchema = {'args': 'args', 'id_': 'id', 'method': 'method', 'requires': 'requires'}
_toPy = {'args': 'args', 'id': 'id_', 'method': 'method', 'requires': 'requires'}
def __init__(self, args=None, id_=None, method=None, requires=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[typing.Any]
+ args : typing.Sequence[typing.Any]
id_ : str
method : str
- requires : typing.Sequence<+T_co>[str]
+ requires : typing.Sequence[str]
'''
self.args = args
self.id_ = id_
_toPy = {'changes': 'changes', 'errors': 'errors'}
def __init__(self, changes=None, errors=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[~BundleChange]<~BundleChange>
- errors : typing.Sequence<+T_co>[str]
+ changes : typing.Sequence[~BundleChange]
+ errors : typing.Sequence[str]
'''
self.changes = [BundleChange.from_json(o) for o in changes or []]
self.errors = errors
_toPy = {'result': 'result'}
def __init__(self, result=None, **unknown_fields):
'''
- result : typing.Sequence<+T_co>[int]
+ result : typing.Sequence[int]
'''
self.result = result
+class ChangeModelCredentialParams(Type):
+ _toSchema = {'credential_tag': 'credential-tag', 'model_tag': 'model-tag'}
+ _toPy = {'credential-tag': 'credential_tag', 'model-tag': 'model_tag'}
+ def __init__(self, credential_tag=None, model_tag=None, **unknown_fields):
+ '''
+ credential_tag : str
+ model_tag : str
+ '''
+ self.credential_tag = credential_tag
+ self.model_tag = model_tag
+
+
+
+class ChangeModelCredentialsParams(Type):
+ _toSchema = {'model_credentials': 'model-credentials'}
+ _toPy = {'model-credentials': 'model_credentials'}
+ def __init__(self, model_credentials=None, **unknown_fields):
+ '''
+ model_credentials : typing.Sequence[~ChangeModelCredentialParams]
+ '''
+ self.model_credentials = [ChangeModelCredentialParams.from_json(o) for o in model_credentials or []]
+
+
+
class CharmActionSpec(Type):
_toSchema = {'description': 'description', 'params': 'params'}
_toPy = {'description': 'description', 'params': 'params'}
def __init__(self, description=None, params=None, **unknown_fields):
'''
description : str
- params : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ params : typing.Mapping[str, typing.Any]
'''
self.description = description
self.params = params
_toPy = {'specs': 'specs'}
def __init__(self, specs=None, **unknown_fields):
'''
- specs : typing.Mapping<~KT, +VT_co>[str, ~CharmActionSpec]<~CharmActionSpec>
+ specs : typing.Mapping[str, ~CharmActionSpec]
'''
self.specs = specs
+class CharmDevice(Type):
+ _toSchema = {'countmax': 'CountMax', 'countmin': 'CountMin', 'description': 'Description', 'name': 'Name', 'type_': 'Type'}
+ _toPy = {'CountMax': 'countmax', 'CountMin': 'countmin', 'Description': 'description', 'Name': 'name', 'Type': 'type_'}
+ def __init__(self, countmax=None, countmin=None, description=None, name=None, type_=None, **unknown_fields):
+ '''
+ countmax : int
+ countmin : int
+ description : str
+ name : str
+ type_ : str
+ '''
+ self.countmax = countmax
+ self.countmin = countmin
+ self.description = description
+ self.name = name
+ self.type_ = type_
+
+
+
class CharmInfo(Type):
_toSchema = {'actions': 'actions', 'config': 'config', 'meta': 'meta', 'metrics': 'metrics', 'revision': 'revision', 'url': 'url'}
_toPy = {'actions': 'actions', 'config': 'config', 'meta': 'meta', 'metrics': 'metrics', 'revision': 'revision', 'url': 'url'}
def __init__(self, actions=None, config=None, meta=None, metrics=None, revision=None, url=None, **unknown_fields):
'''
actions : CharmActions
- config : typing.Mapping<~KT, +VT_co>[str, ~CharmOption]<~CharmOption>
+ config : typing.Mapping[str, ~CharmOption]
meta : CharmMeta
metrics : CharmMetrics
revision : int
+class CharmLXDProfile(Type):
+ _toSchema = {'config': 'config', 'description': 'description', 'devices': 'devices'}
+ _toPy = {'config': 'config', 'description': 'description', 'devices': 'devices'}
+ def __init__(self, config=None, description=None, devices=None, **unknown_fields):
+ '''
+ config : typing.Mapping[str, str]
+ description : str
+ devices : typing.Mapping[str, typing.Any]
+ '''
+ self.config = config
+ self.description = description
+ self.devices = devices
+
+
+
class CharmMeta(Type):
_toSchema = {'categories': 'categories', 'description': 'description', 'extra_bindings': 'extra-bindings', 'min_juju_version': 'min-juju-version', 'name': 'name', 'payload_classes': 'payload-classes', 'peers': 'peers', 'provides': 'provides', 'requires': 'requires', 'resources': 'resources', 'series': 'series', 'storage': 'storage', 'subordinate': 'subordinate', 'summary': 'summary', 'tags': 'tags', 'terms': 'terms'}
_toPy = {'categories': 'categories', 'description': 'description', 'extra-bindings': 'extra_bindings', 'min-juju-version': 'min_juju_version', 'name': 'name', 'payload-classes': 'payload_classes', 'peers': 'peers', 'provides': 'provides', 'requires': 'requires', 'resources': 'resources', 'series': 'series', 'storage': 'storage', 'subordinate': 'subordinate', 'summary': 'summary', 'tags': 'tags', 'terms': 'terms'}
def __init__(self, categories=None, description=None, extra_bindings=None, min_juju_version=None, name=None, payload_classes=None, peers=None, provides=None, requires=None, resources=None, series=None, storage=None, subordinate=None, summary=None, tags=None, terms=None, **unknown_fields):
'''
- categories : typing.Sequence<+T_co>[str]
+ categories : typing.Sequence[str]
description : str
- extra_bindings : typing.Mapping<~KT, +VT_co>[str, str]
+ extra_bindings : typing.Mapping[str, str]
min_juju_version : str
name : str
- payload_classes : typing.Mapping<~KT, +VT_co>[str, ~CharmPayloadClass]<~CharmPayloadClass>
- peers : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
- provides : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
- requires : typing.Mapping<~KT, +VT_co>[str, ~CharmRelation]<~CharmRelation>
- resources : typing.Mapping<~KT, +VT_co>[str, ~CharmResourceMeta]<~CharmResourceMeta>
- series : typing.Sequence<+T_co>[str]
- storage : typing.Mapping<~KT, +VT_co>[str, ~CharmStorage]<~CharmStorage>
+ payload_classes : typing.Mapping[str, ~CharmPayloadClass]
+ peers : typing.Mapping[str, ~CharmRelation]
+ provides : typing.Mapping[str, ~CharmRelation]
+ requires : typing.Mapping[str, ~CharmRelation]
+ resources : typing.Mapping[str, ~CharmResourceMeta]
+ series : typing.Sequence[str]
+ storage : typing.Mapping[str, ~CharmStorage]
subordinate : bool
summary : str
- tags : typing.Sequence<+T_co>[str]
- terms : typing.Sequence<+T_co>[str]
+ tags : typing.Sequence[str]
+ terms : typing.Sequence[str]
'''
self.categories = categories
self.description = description
_toPy = {'metrics': 'metrics', 'plan': 'plan'}
def __init__(self, metrics=None, plan=None, **unknown_fields):
'''
- metrics : typing.Mapping<~KT, +VT_co>[str, ~CharmMetric]<~CharmMetric>
+ metrics : typing.Mapping[str, ~CharmMetric]
plan : CharmPlan
'''
self.metrics = metrics
_toPy = {'default': 'default', 'description': 'description', 'type': 'type_'}
def __init__(self, default=None, description=None, type_=None, **unknown_fields):
'''
- default : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ default : typing.Mapping[str, typing.Any]
description : str
type_ : str
'''
def __init__(self, description=None, fingerprint=None, name=None, origin=None, path=None, revision=None, size=None, type_=None, **unknown_fields):
'''
description : str
- fingerprint : typing.Sequence<+T_co>[int]
+ fingerprint : typing.Sequence[int]
name : str
origin : str
path : str
location : str
minimum_size : int
name : str
- properties : typing.Sequence<+T_co>[str]
+ properties : typing.Sequence[str]
read_only : bool
shared : bool
type_ : str
_toPy = {'urls': 'urls'}
def __init__(self, urls=None, **unknown_fields):
'''
- urls : typing.Sequence<+T_co>[~CharmURL]<~CharmURL>
+ urls : typing.Sequence[~CharmURL]
'''
self.urls = [CharmURL.from_json(o) for o in urls or []]
_toPy = {'names': 'names'}
def __init__(self, names=None, **unknown_fields):
'''
- names : typing.Sequence<+T_co>[str]
+ names : typing.Sequence[str]
'''
self.names = names
_toPy = {'charm-urls': 'charm_urls'}
def __init__(self, charm_urls=None, **unknown_fields):
'''
- charm_urls : typing.Sequence<+T_co>[str]
+ charm_urls : typing.Sequence[str]
'''
self.charm_urls = charm_urls
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~ClaimLeadershipParams]<~ClaimLeadershipParams>
+ params : typing.Sequence[~ClaimLeadershipParams]
'''
self.params = [ClaimLeadershipParams.from_json(o) for o in params or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ results : typing.Sequence[~ErrorResult]
'''
self.results = [ErrorResult.from_json(o) for o in results or []]
_toPy = {'auth-types': 'auth_types', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'regions': 'regions', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'}
def __init__(self, auth_types=None, endpoint=None, identity_endpoint=None, regions=None, storage_endpoint=None, type_=None, **unknown_fields):
'''
- auth_types : typing.Sequence<+T_co>[str]
+ auth_types : typing.Sequence[str]
endpoint : str
identity_endpoint : str
- regions : typing.Sequence<+T_co>[~CloudRegion]<~CloudRegion>
+ regions : typing.Sequence[~CloudRegion]
storage_endpoint : str
type_ : str
'''
_toPy = {'attrs': 'attrs', 'auth-type': 'auth_type', 'redacted': 'redacted'}
def __init__(self, attrs=None, auth_type=None, redacted=None, **unknown_fields):
'''
- attrs : typing.Mapping<~KT, +VT_co>[str, str]
+ attrs : typing.Mapping[str, str]
auth_type : str
- redacted : typing.Sequence<+T_co>[str]
+ redacted : typing.Sequence[str]
'''
self.attrs = attrs
self.auth_type = auth_type
-class CloudCredentialResult(Type):
- _toSchema = {'error': 'error', 'result': 'result'}
- _toPy = {'error': 'error', 'result': 'result'}
+class CloudCredentialArg(Type):
+ _toSchema = {'cloud_name': 'cloud-name', 'credential_name': 'credential-name'}
+ _toPy = {'cloud-name': 'cloud_name', 'credential-name': 'credential_name'}
+ def __init__(self, cloud_name=None, credential_name=None, **unknown_fields):
+ '''
+ cloud_name : str
+ credential_name : str
+ '''
+ self.cloud_name = cloud_name
+ self.credential_name = credential_name
+
+
+
+class CloudCredentialArgs(Type):
+ _toSchema = {'credentials': 'credentials', 'include_secrets': 'include-secrets'}
+ _toPy = {'credentials': 'credentials', 'include-secrets': 'include_secrets'}
+ def __init__(self, credentials=None, include_secrets=None, **unknown_fields):
+ '''
+ credentials : typing.Sequence[~CloudCredentialArg]
+ include_secrets : bool
+ '''
+ self.credentials = [CloudCredentialArg.from_json(o) for o in credentials or []]
+ self.include_secrets = include_secrets
+
+
+
+class CloudCredentialResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~CloudCredentialResult]<~CloudCredentialResult>
+ results : typing.Sequence[~CloudCredentialResult]
'''
self.results = [CloudCredentialResult.from_json(o) for o in results or []]
+class CloudDetails(Type):
+ _toSchema = {'auth_types': 'auth-types', 'endpoint': 'endpoint', 'identity_endpoint': 'identity-endpoint', 'regions': 'regions', 'storage_endpoint': 'storage-endpoint', 'type_': 'type'}
+ _toPy = {'auth-types': 'auth_types', 'endpoint': 'endpoint', 'identity-endpoint': 'identity_endpoint', 'regions': 'regions', 'storage-endpoint': 'storage_endpoint', 'type': 'type_'}
+ def __init__(self, auth_types=None, endpoint=None, identity_endpoint=None, regions=None, storage_endpoint=None, type_=None, **unknown_fields):
+ '''
+ auth_types : typing.Sequence[str]
+ endpoint : str
+ identity_endpoint : str
+ regions : typing.Sequence[~CloudRegion]
+ storage_endpoint : str
+ type_ : str
+ '''
+ self.auth_types = auth_types
+ self.endpoint = endpoint
+ self.identity_endpoint = identity_endpoint
+ self.regions = [CloudRegion.from_json(o) for o in regions or []]
+ self.storage_endpoint = storage_endpoint
+ self.type_ = type_
+
+
+
class CloudImageMetadata(Type):
_toSchema = {'arch': 'arch', 'image_id': 'image-id', 'priority': 'priority', 'region': 'region', 'root_storage_size': 'root-storage-size', 'root_storage_type': 'root-storage-type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt_type': 'virt-type'}
_toPy = {'arch': 'arch', 'image-id': 'image_id', 'priority': 'priority', 'region': 'region', 'root-storage-size': 'root_storage_size', 'root-storage-type': 'root_storage_type', 'series': 'series', 'source': 'source', 'stream': 'stream', 'version': 'version', 'virt-type': 'virt_type'}
_toPy = {'metadata': 'metadata'}
def __init__(self, metadata=None, **unknown_fields):
'''
- metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+ metadata : typing.Sequence[~CloudImageMetadata]
'''
self.metadata = [CloudImageMetadata.from_json(o) for o in metadata or []]
+class CloudInfo(Type):
+ _toSchema = {'clouddetails': 'CloudDetails', 'users': 'users'}
+ _toPy = {'CloudDetails': 'clouddetails', 'users': 'users'}
+ def __init__(self, clouddetails=None, users=None, **unknown_fields):
+ '''
+ clouddetails : CloudDetails
+ users : typing.Sequence[~CloudUserInfo]
+ '''
+ self.clouddetails = CloudDetails.from_json(clouddetails) if clouddetails else None
+ self.users = [CloudUserInfo.from_json(o) for o in users or []]
+
+
+
+class CloudInfoResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : CloudInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = CloudInfo.from_json(result) if result else None
+
+
+
+class CloudInfoResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~CloudInfoResult]
+ '''
+ self.results = [CloudInfoResult.from_json(o) for o in results or []]
+
+
+
class CloudInstanceTypesConstraint(Type):
_toSchema = {'cloud_tag': 'cloud-tag', 'constraints': 'constraints', 'region': 'region'}
_toPy = {'cloud-tag': 'cloud_tag', 'constraints': 'constraints', 'region': 'region'}
_toPy = {'constraints': 'constraints'}
def __init__(self, constraints=None, **unknown_fields):
'''
- constraints : typing.Sequence<+T_co>[~CloudInstanceTypesConstraint]<~CloudInstanceTypesConstraint>
+ constraints : typing.Sequence[~CloudInstanceTypesConstraint]
'''
self.constraints = [CloudInstanceTypesConstraint.from_json(o) for o in constraints or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~CloudResult]<~CloudResult>
+ results : typing.Sequence[~CloudResult]
'''
self.results = [CloudResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~CloudSpecResult]<~CloudSpecResult>
+ results : typing.Sequence[~CloudSpecResult]
'''
self.results = [CloudSpecResult.from_json(o) for o in results or []]
+class CloudUserInfo(Type):
+ _toSchema = {'access': 'access', 'display_name': 'display-name', 'user': 'user'}
+ _toPy = {'access': 'access', 'display-name': 'display_name', 'user': 'user'}
+ def __init__(self, access=None, display_name=None, user=None, **unknown_fields):
+ '''
+ access : str
+ display_name : str
+ user : str
+ '''
+ self.access = access
+ self.display_name = display_name
+ self.user = user
+
+
+
class CloudsResult(Type):
_toSchema = {'clouds': 'clouds'}
_toPy = {'clouds': 'clouds'}
def __init__(self, clouds=None, **unknown_fields):
'''
- clouds : typing.Mapping<~KT, +VT_co>[str, ~Cloud]<~Cloud>
+ clouds : typing.Mapping[str, ~Cloud]
'''
self.clouds = clouds
+class ConfigResult(Type):
+ _toSchema = {'config': 'config', 'error': 'error'}
+ _toPy = {'config': 'config', 'error': 'error'}
+ def __init__(self, config=None, error=None, **unknown_fields):
+ '''
+ config : typing.Mapping[str, typing.Any]
+ error : Error
+ '''
+ self.config = config
+ self.error = Error.from_json(error) if error else None
+
+
+
class ConfigSettingsResult(Type):
_toSchema = {'error': 'error', 'settings': 'settings'}
_toPy = {'error': 'error', 'settings': 'settings'}
def __init__(self, error=None, settings=None, **unknown_fields):
'''
error : Error
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ settings : typing.Mapping[str, typing.Any]
'''
self.error = Error.from_json(error) if error else None
self.settings = settings
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ConfigSettingsResult]<~ConfigSettingsResult>
+ results : typing.Sequence[~ConfigSettingsResult]
'''
self.results = [ConfigSettingsResult.from_json(o) for o in results or []]
def __init__(self, source=None, value=None, **unknown_fields):
'''
source : str
- value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ value : typing.Mapping[str, typing.Any]
'''
self.source = source
self.value = value
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ConstraintsResult]<~ConstraintsResult>
+ results : typing.Sequence[~ConstraintsResult]
'''
self.results = [ConstraintsResult.from_json(o) for o in results or []]
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~ConsumeApplicationArg]<~ConsumeApplicationArg>
+ args : typing.Sequence[~ConsumeApplicationArg]
'''
self.args = [ConsumeApplicationArg.from_json(o) for o in args or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ConsumeApplicationResult]<~ConsumeApplicationResult>
+ results : typing.Sequence[~ConsumeApplicationResult]
'''
self.results = [ConsumeApplicationResult.from_json(o) for o in results or []]
+class ConsumeOfferDetails(Type):
+ _toSchema = {'external_controller': 'external-controller', 'macaroon': 'macaroon', 'offer': 'offer'}
+ _toPy = {'external-controller': 'external_controller', 'macaroon': 'macaroon', 'offer': 'offer'}
+ def __init__(self, external_controller=None, macaroon=None, offer=None, **unknown_fields):
+ '''
+ external_controller : ExternalControllerInfo
+ macaroon : Macaroon
+ offer : ApplicationOfferDetails
+ '''
+ self.external_controller = ExternalControllerInfo.from_json(external_controller) if external_controller else None
+ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+ self.offer = ApplicationOfferDetails.from_json(offer) if offer else None
+
+
+
+class ConsumeOfferDetailsResult(Type):
+ _toSchema = {'consumeofferdetails': 'ConsumeOfferDetails', 'error': 'error'}
+ _toPy = {'ConsumeOfferDetails': 'consumeofferdetails', 'error': 'error'}
+ def __init__(self, consumeofferdetails=None, error=None, **unknown_fields):
+ '''
+ consumeofferdetails : ConsumeOfferDetails
+ error : Error
+ '''
+ self.consumeofferdetails = ConsumeOfferDetails.from_json(consumeofferdetails) if consumeofferdetails else None
+ self.error = Error.from_json(error) if error else None
+
+
+
+class ConsumeOfferDetailsResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ConsumeOfferDetailsResult]
+ '''
+ self.results = [ConsumeOfferDetailsResult.from_json(o) for o in results or []]
+
+
+
class ContainerConfig(Type):
_toSchema = {'apt_mirror': 'apt-mirror', 'apt_proxy': 'apt-proxy', 'authorized_keys': 'authorized-keys', 'provider_type': 'provider-type', 'proxy': 'proxy', 'ssl_hostname_verification': 'ssl-hostname-verification', 'updatebehavior': 'UpdateBehavior'}
_toPy = {'UpdateBehavior': 'updatebehavior', 'apt-mirror': 'apt_mirror', 'apt-proxy': 'apt_proxy', 'authorized-keys': 'authorized_keys', 'provider-type': 'provider_type', 'proxy': 'proxy', 'ssl-hostname-verification': 'ssl_hostname_verification'}
+class ContainerLXDProfile(Type):
+ _toSchema = {'name': 'name', 'profile': 'profile'}
+ _toPy = {'name': 'name', 'profile': 'profile'}
+ def __init__(self, name=None, profile=None, **unknown_fields):
+ '''
+ name : str
+ profile : CharmLXDProfile
+ '''
+ self.name = name
+ self.profile = CharmLXDProfile.from_json(profile) if profile else None
+
+
+
class ContainerManagerConfig(Type):
_toSchema = {'config': 'config'}
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, str]
+ config : typing.Mapping[str, str]
'''
self.config = config
+class ContainerProfileResult(Type):
+ _toSchema = {'error': 'error', 'lxd_profiles': 'lxd-profiles'}
+ _toPy = {'error': 'error', 'lxd-profiles': 'lxd_profiles'}
+ def __init__(self, error=None, lxd_profiles=None, **unknown_fields):
+ '''
+ error : Error
+ lxd_profiles : typing.Sequence[~ContainerLXDProfile]
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.lxd_profiles = [ContainerLXDProfile.from_json(o) for o in lxd_profiles or []]
+
+
+
+class ContainerProfileResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ContainerProfileResult]
+ '''
+ self.results = [ContainerProfileResult.from_json(o) for o in results or []]
+
+
+
+class ControllerAPIInfoResult(Type):
+ _toSchema = {'addresses': 'addresses', 'cacert': 'cacert', 'error': 'error'}
+ _toPy = {'addresses': 'addresses', 'cacert': 'cacert', 'error': 'error'}
+ def __init__(self, addresses=None, cacert=None, error=None, **unknown_fields):
+ '''
+ addresses : typing.Sequence[str]
+ cacert : str
+ error : Error
+ '''
+ self.addresses = addresses
+ self.cacert = cacert
+ self.error = Error.from_json(error) if error else None
+
+
+
+class ControllerAPIInfoResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ControllerAPIInfoResult]
+ '''
+ self.results = [ControllerAPIInfoResult.from_json(o) for o in results or []]
+
+
+
class ControllerConfigResult(Type):
_toSchema = {'config': 'config'}
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
+ '''
+ self.config = config
+
+
+
+class ControllerConfigSet(Type):
+ _toSchema = {'config': 'config'}
+ _toPy = {'config': 'config'}
+ def __init__(self, config=None, **unknown_fields):
+ '''
+ config : typing.Mapping[str, typing.Any]
'''
self.config = config
+class ControllerCredentialInfo(Type):
+ _toSchema = {'content': 'content', 'models': 'models'}
+ _toPy = {'content': 'content', 'models': 'models'}
+ def __init__(self, content=None, models=None, **unknown_fields):
+ '''
+ content : CredentialContent
+ models : typing.Sequence[~ModelAccess]
+ '''
+ self.content = CredentialContent.from_json(content) if content else None
+ self.models = [ModelAccess.from_json(o) for o in models or []]
+
+
+
class ControllersChangeResult(Type):
_toSchema = {'error': 'error', 'result': 'result'}
_toPy = {'error': 'error', 'result': 'result'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ControllersChangeResult]<~ControllersChangeResult>
+ results : typing.Sequence[~ControllersChangeResult]
'''
self.results = [ControllersChangeResult.from_json(o) for o in results or []]
_toPy = {'added': 'added', 'converted': 'converted', 'demoted': 'demoted', 'maintained': 'maintained', 'promoted': 'promoted', 'removed': 'removed'}
def __init__(self, added=None, converted=None, demoted=None, maintained=None, promoted=None, removed=None, **unknown_fields):
'''
- added : typing.Sequence<+T_co>[str]
- converted : typing.Sequence<+T_co>[str]
- demoted : typing.Sequence<+T_co>[str]
- maintained : typing.Sequence<+T_co>[str]
- promoted : typing.Sequence<+T_co>[str]
- removed : typing.Sequence<+T_co>[str]
+ added : typing.Sequence[str]
+ converted : typing.Sequence[str]
+ demoted : typing.Sequence[str]
+ maintained : typing.Sequence[str]
+ promoted : typing.Sequence[str]
+ removed : typing.Sequence[str]
'''
self.added = added
self.converted = converted
'''
constraints : Value
num_controllers : int
- placement : typing.Sequence<+T_co>[str]
+ placement : typing.Sequence[str]
series : str
'''
self.constraints = Value.from_json(constraints) if constraints else None
_toPy = {'specs': 'specs'}
def __init__(self, specs=None, **unknown_fields):
'''
- specs : typing.Sequence<+T_co>[~ControllersSpec]<~ControllersSpec>
+ specs : typing.Sequence[~ControllersSpec]
'''
self.specs = [ControllersSpec.from_json(o) for o in specs or []]
provider_id : str
public : bool
space_tag : str
- subnet_tags : typing.Sequence<+T_co>[str]
+ subnet_tags : typing.Sequence[str]
'''
self.provider_id = provider_id
self.public = public
_toPy = {'spaces': 'spaces'}
def __init__(self, spaces=None, **unknown_fields):
'''
- spaces : typing.Sequence<+T_co>[~CreateSpaceParams]<~CreateSpaceParams>
+ spaces : typing.Sequence[~CreateSpaceParams]
'''
self.spaces = [CreateSpaceParams.from_json(o) for o in spaces or []]
+class CredentialContent(Type):
+ _toSchema = {'attrs': 'attrs', 'auth_type': 'auth-type', 'cloud': 'cloud', 'name': 'name'}
+ _toPy = {'attrs': 'attrs', 'auth-type': 'auth_type', 'cloud': 'cloud', 'name': 'name'}
+ def __init__(self, attrs=None, auth_type=None, cloud=None, name=None, **unknown_fields):
+ '''
+ attrs : typing.Mapping[str, str]
+ auth_type : str
+ cloud : str
+ name : str
+ '''
+ self.attrs = attrs
+ self.auth_type = auth_type
+ self.cloud = cloud
+ self.name = name
+
+
+
+class CredentialContentResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ControllerCredentialInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ControllerCredentialInfo.from_json(result) if result else None
+
+
+
+class CredentialContentResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~CredentialContentResult]
+ '''
+ self.results = [CredentialContentResult.from_json(o) for o in results or []]
+
+
+
class Delta(Type):
_toSchema = {'entity': 'entity', 'removed': 'removed'}
_toPy = {'entity': 'entity', 'removed': 'removed'}
def __init__(self, entity=None, removed=None, **unknown_fields):
'''
- entity : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ entity : typing.Mapping[str, typing.Any]
removed : bool
'''
self.entity = entity
_toPy = {'api-addresses': 'api_addresses', 'state-addresses': 'state_addresses'}
def __init__(self, api_addresses=None, state_addresses=None, **unknown_fields):
'''
- api_addresses : typing.Sequence<+T_co>[str]
- state_addresses : typing.Sequence<+T_co>[str]
+ api_addresses : typing.Sequence[str]
+ state_addresses : typing.Sequence[str]
'''
self.api_addresses = api_addresses
self.state_addresses = state_addresses
_toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'}
def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields):
'''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+ destroyed_storage : typing.Sequence[~Entity]
+ destroyed_units : typing.Sequence[~Entity]
+ detached_storage : typing.Sequence[~Entity]
'''
self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []]
self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []]
+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'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~DestroyApplicationResult]<~DestroyApplicationResult>
+ results : typing.Sequence[~DestroyApplicationResult]
'''
self.results = [DestroyApplicationResult.from_json(o) for o in results or []]
_toPy = {'unit-names': 'unit_names'}
def __init__(self, unit_names=None, **unknown_fields):
'''
- unit_names : typing.Sequence<+T_co>[str]
+ unit_names : typing.Sequence[str]
'''
self.unit_names = unit_names
+class DestroyApplicationsParams(Type):
+ _toSchema = {'applications': 'applications'}
+ _toPy = {'applications': 'applications'}
+ def __init__(self, applications=None, **unknown_fields):
+ '''
+ applications : typing.Sequence[~DestroyApplicationParams]
+ '''
+ self.applications = [DestroyApplicationParams.from_json(o) for o in applications or []]
+
+
+
+class DestroyConsumedApplicationParams(Type):
+ _toSchema = {'application_tag': 'application-tag'}
+ _toPy = {'application-tag': 'application_tag'}
+ def __init__(self, application_tag=None, **unknown_fields):
+ '''
+ application_tag : str
+ '''
+ self.application_tag = application_tag
+
+
+
+class DestroyConsumedApplicationsParams(Type):
+ _toSchema = {'applications': 'applications'}
+ _toPy = {'applications': 'applications'}
+ def __init__(self, applications=None, **unknown_fields):
+ '''
+ applications : typing.Sequence[~DestroyConsumedApplicationParams]
+ '''
+ self.applications = [DestroyConsumedApplicationParams.from_json(o) for o in applications or []]
+
+
+
class DestroyControllerArgs(Type):
_toSchema = {'destroy_models': 'destroy-models'}
_toPy = {'destroy-models': 'destroy_models'}
_toPy = {'destroyed-storage': 'destroyed_storage', 'destroyed-units': 'destroyed_units', 'detached-storage': 'detached_storage'}
def __init__(self, destroyed_storage=None, destroyed_units=None, detached_storage=None, **unknown_fields):
'''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- destroyed_units : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+ destroyed_storage : typing.Sequence[~Entity]
+ destroyed_units : typing.Sequence[~Entity]
+ detached_storage : typing.Sequence[~Entity]
'''
self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []]
self.destroyed_units = [Entity.from_json(o) for o in destroyed_units or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~DestroyMachineResult]<~DestroyMachineResult>
+ results : typing.Sequence[~DestroyMachineResult]
'''
self.results = [DestroyMachineResult.from_json(o) for o in results or []]
def __init__(self, force=None, machine_names=None, **unknown_fields):
'''
force : bool
- machine_names : typing.Sequence<+T_co>[str]
+ machine_names : typing.Sequence[str]
'''
self.force = force
self.machine_names = machine_names
+class DestroyMachinesParams(Type):
+ _toSchema = {'force': 'force', 'keep': 'keep', 'machine_tags': 'machine-tags'}
+ _toPy = {'force': 'force', 'keep': 'keep', 'machine-tags': 'machine_tags'}
+ def __init__(self, force=None, keep=None, machine_tags=None, **unknown_fields):
+ '''
+ force : bool
+ keep : bool
+ machine_tags : typing.Sequence[str]
+ '''
+ self.force = force
+ self.keep = keep
+ self.machine_tags = machine_tags
+
+
+
+class DestroyModelParams(Type):
+ _toSchema = {'destroy_storage': 'destroy-storage', 'model_tag': 'model-tag'}
+ _toPy = {'destroy-storage': 'destroy_storage', 'model-tag': 'model_tag'}
+ def __init__(self, destroy_storage=None, model_tag=None, **unknown_fields):
+ '''
+ destroy_storage : bool
+ model_tag : str
+ '''
+ self.destroy_storage = destroy_storage
+ self.model_tag = model_tag
+
+
+
+class DestroyModelsParams(Type):
+ _toSchema = {'models': 'models'}
+ _toPy = {'models': 'models'}
+ def __init__(self, models=None, **unknown_fields):
+ '''
+ models : typing.Sequence[~DestroyModelParams]
+ '''
+ self.models = [DestroyModelParams.from_json(o) for o in models or []]
+
+
+
class DestroyRelation(Type):
_toSchema = {'endpoints': 'endpoints'}
_toPy = {'endpoints': 'endpoints'}
def __init__(self, endpoints=None, **unknown_fields):
'''
- endpoints : typing.Sequence<+T_co>[str]
+ endpoints : typing.Sequence[str]
'''
self.endpoints = endpoints
_toPy = {'destroyed-storage': 'destroyed_storage', 'detached-storage': 'detached_storage'}
def __init__(self, destroyed_storage=None, detached_storage=None, **unknown_fields):
'''
- destroyed_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
- detached_storage : typing.Sequence<+T_co>[~Entity]<~Entity>
+ destroyed_storage : typing.Sequence[~Entity]
+ detached_storage : typing.Sequence[~Entity]
'''
self.destroyed_storage = [Entity.from_json(o) for o in destroyed_storage or []]
self.detached_storage = [Entity.from_json(o) for o in detached_storage or []]
+class DestroyUnitParams(Type):
+ _toSchema = {'destroy_storage': 'destroy-storage', 'unit_tag': 'unit-tag'}
+ _toPy = {'destroy-storage': 'destroy_storage', 'unit-tag': 'unit_tag'}
+ def __init__(self, destroy_storage=None, unit_tag=None, **unknown_fields):
+ '''
+ destroy_storage : bool
+ unit_tag : str
+ '''
+ self.destroy_storage = destroy_storage
+ self.unit_tag = unit_tag
+
+
+
class DestroyUnitResult(Type):
_toSchema = {'error': 'error', 'info': 'info'}
_toPy = {'error': 'error', 'info': 'info'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~DestroyUnitResult]<~DestroyUnitResult>
+ results : typing.Sequence[~DestroyUnitResult]
'''
self.results = [DestroyUnitResult.from_json(o) for o in results or []]
+class DestroyUnitsParams(Type):
+ _toSchema = {'units': 'units'}
+ _toPy = {'units': 'units'}
+ def __init__(self, units=None, **unknown_fields):
+ '''
+ units : typing.Sequence[~DestroyUnitParams]
+ '''
+ self.units = [DestroyUnitParams.from_json(o) for o in units or []]
+
+
+
class DetailedStatus(Type):
_toSchema = {'data': 'data', 'err': 'err', 'info': 'info', 'kind': 'kind', 'life': 'life', 'since': 'since', 'status': 'status', 'version': 'version'}
_toPy = {'data': 'data', 'err': 'err', 'info': 'info', 'kind': 'kind', 'life': 'life', 'since': 'since', 'status': 'status', 'version': 'version'}
def __init__(self, data=None, err=None, info=None, kind=None, life=None, since=None, status=None, version=None, **unknown_fields):
'''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ data : typing.Mapping[str, typing.Any]
+ err : typing.Mapping[str, typing.Any]
info : str
kind : str
life : str
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ProviderSpace]<~ProviderSpace>
+ results : typing.Sequence[~ProviderSpace]
'''
self.results = [ProviderSpace.from_json(o) for o in results or []]
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Sequence<+T_co>[str]
+ result : typing.Sequence[str]
'''
self.error = Error.from_json(error) if error else None
self.result = result
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~DistributionGroupResult]<~DistributionGroupResult>
+ results : typing.Sequence[~DistributionGroupResult]
'''
self.results = [DistributionGroupResult.from_json(o) for o in results or []]
_toPy = {'entities': 'entities', 'simplified': 'simplified'}
def __init__(self, entities=None, simplified=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
simplified : bool
'''
self.entities = [Entity.from_json(o) for o in entities or []]
-class EndpointStatus(Type):
- _toSchema = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
- _toPy = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
- def __init__(self, application=None, name=None, role=None, subordinate=None, **unknown_fields):
+class EndpointFilterAttributes(Type):
+ _toSchema = {'interface': 'interface', 'name': 'name', 'role': 'role'}
+ _toPy = {'interface': 'interface', 'name': 'name', 'role': 'role'}
+ def __init__(self, interface=None, name=None, role=None, **unknown_fields):
'''
- application : str
+ interface : str
name : str
role : str
- subordinate : bool
+ '''
+ self.interface = interface
+ self.name = name
+ self.role = role
+
+
+
+class EndpointStatus(Type):
+ _toSchema = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
+ _toPy = {'application': 'application', 'name': 'name', 'role': 'role', 'subordinate': 'subordinate'}
+ def __init__(self, application=None, name=None, role=None, subordinate=None, **unknown_fields):
+ '''
+ application : str
+ name : str
+ role : str
+ subordinate : bool
'''
self.application = application
self.name = name
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
'''
self.entities = [Entity.from_json(o) for o in entities or []]
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~EntityCharmURL]<~EntityCharmURL>
+ entities : typing.Sequence[~EntityCharmURL]
'''
self.entities = [EntityCharmURL.from_json(o) for o in entities or []]
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~EntityPortRange]<~EntityPortRange>
+ entities : typing.Sequence[~EntityPortRange]
'''
self.entities = [EntityPortRange.from_json(o) for o in entities or []]
_toPy = {'entities': 'entities', 'error': 'error'}
def __init__(self, entities=None, error=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
error : Error
'''
self.entities = [Entity.from_json(o) for o in entities or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~EntitiesResult]<~EntitiesResult>
+ results : typing.Sequence[~EntitiesResult]
'''
self.results = [EntitiesResult.from_json(o) for o in results or []]
_toPy = {'agent-tools': 'agent_tools'}
def __init__(self, agent_tools=None, **unknown_fields):
'''
- agent_tools : typing.Sequence<+T_co>[~EntityVersion]<~EntityVersion>
+ agent_tools : typing.Sequence[~EntityVersion]
'''
self.agent_tools = [EntityVersion.from_json(o) for o in agent_tools or []]
_toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[str]
+ changes : typing.Sequence[str]
error : Error
watcher_id : str
'''
_toPy = {'annotations': 'annotations', 'entity': 'entity'}
def __init__(self, annotations=None, entity=None, **unknown_fields):
'''
- annotations : typing.Mapping<~KT, +VT_co>[str, str]
+ annotations : typing.Mapping[str, str]
entity : str
'''
self.annotations = annotations
+class EntityMacaroonArg(Type):
+ _toSchema = {'macaroon': 'macaroon', 'tag': 'tag'}
+ _toPy = {'macaroon': 'macaroon', 'tag': 'tag'}
+ def __init__(self, macaroon=None, tag=None, **unknown_fields):
+ '''
+ macaroon : Macaroon
+ tag : str
+ '''
+ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+ self.tag = tag
+
+
+
+class EntityMacaroonArgs(Type):
+ _toSchema = {'args': 'Args'}
+ _toPy = {'Args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~EntityMacaroonArg]
+ '''
+ self.args = [EntityMacaroonArg.from_json(o) for o in args or []]
+
+
+
class EntityMetrics(Type):
_toSchema = {'error': 'error', 'metrics': 'metrics'}
_toPy = {'error': 'error', 'metrics': 'metrics'}
def __init__(self, error=None, metrics=None, **unknown_fields):
'''
error : Error
- metrics : typing.Sequence<+T_co>[~MetricResult]<~MetricResult>
+ metrics : typing.Sequence[~MetricResult]
'''
self.error = Error.from_json(error) if error else None
self.metrics = [MetricResult.from_json(o) for o in metrics or []]
_toPy = {'changes': 'changes'}
def __init__(self, changes=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[~EntityPassword]<~EntityPassword>
+ changes : typing.Sequence[~EntityPassword]
'''
self.changes = [EntityPassword.from_json(o) for o in changes or []]
_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
_toPy = {'data': 'data', 'info': 'info', 'status': 'status', 'tag': 'tag'}
def __init__(self, data=None, info=None, status=None, tag=None, **unknown_fields):
'''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ data : typing.Mapping[str, typing.Any]
info : str
status : str
tag : str
+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'}
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~EntityWorkloadVersion]<~EntityWorkloadVersion>
+ entities : typing.Sequence[~EntityWorkloadVersion]
'''
self.entities = [EntityWorkloadVersion.from_json(o) for o in entities or []]
_toPy = {'patterns': 'patterns'}
def __init__(self, patterns=None, **unknown_fields):
'''
- patterns : typing.Sequence<+T_co>[str]
+ patterns : typing.Sequence[str]
'''
self.patterns = patterns
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~Payload]<~Payload>
+ results : typing.Sequence[~Payload]
'''
self.results = [Payload.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ErrorResult]<~ErrorResult>
+ results : typing.Sequence[~ErrorResult]
'''
self.results = [ErrorResult.from_json(o) for o in results or []]
+class ExternalControllerInfo(Type):
+ _toSchema = {'addrs': 'addrs', 'ca_cert': 'ca-cert', 'controller_alias': 'controller-alias', 'controller_tag': 'controller-tag'}
+ _toPy = {'addrs': 'addrs', 'ca-cert': 'ca_cert', 'controller-alias': 'controller_alias', 'controller-tag': 'controller_tag'}
+ def __init__(self, addrs=None, ca_cert=None, controller_alias=None, controller_tag=None, **unknown_fields):
+ '''
+ addrs : typing.Sequence[str]
+ ca_cert : str
+ controller_alias : str
+ controller_tag : str
+ '''
+ self.addrs = addrs
+ self.ca_cert = ca_cert
+ self.controller_alias = controller_alias
+ self.controller_tag = controller_tag
+
+
+
+class ExternalControllerInfoResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ExternalControllerInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ExternalControllerInfo.from_json(result) if result else None
+
+
+
+class ExternalControllerInfoResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ExternalControllerInfoResult]
+ '''
+ self.results = [ExternalControllerInfoResult.from_json(o) for o in results or []]
+
+
+
+class FanConfigEntry(Type):
+ _toSchema = {'overlay': 'overlay', 'underlay': 'underlay'}
+ _toPy = {'overlay': 'overlay', 'underlay': 'underlay'}
+ def __init__(self, overlay=None, underlay=None, **unknown_fields):
+ '''
+ overlay : str
+ underlay : str
+ '''
+ self.overlay = overlay
+ self.underlay = underlay
+
+
+
+class FanConfigResult(Type):
+ _toSchema = {'fans': 'fans'}
+ _toPy = {'fans': 'fans'}
+ def __init__(self, fans=None, **unknown_fields):
+ '''
+ fans : typing.Sequence[~FanConfigEntry]
+ '''
+ self.fans = [FanConfigEntry.from_json(o) for o in fans or []]
+
+
+
class Filesystem(Type):
_toSchema = {'filesystem_tag': 'filesystem-tag', 'info': 'info', 'volume_tag': 'volume-tag'}
_toPy = {'filesystem-tag': 'filesystem_tag', 'info': 'info', 'volume-tag': 'volume_tag'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~FilesystemAttachmentParamsResult]<~FilesystemAttachmentParamsResult>
+ results : typing.Sequence[~FilesystemAttachmentParamsResult]
'''
self.results = [FilesystemAttachmentParamsResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~FilesystemAttachmentResult]<~FilesystemAttachmentResult>
+ results : typing.Sequence[~FilesystemAttachmentResult]
'''
self.results = [FilesystemAttachmentResult.from_json(o) for o in results or []]
_toPy = {'filesystem-attachments': 'filesystem_attachments'}
def __init__(self, filesystem_attachments=None, **unknown_fields):
'''
- filesystem_attachments : typing.Sequence<+T_co>[~FilesystemAttachment]<~FilesystemAttachment>
+ filesystem_attachments : typing.Sequence[~FilesystemAttachment]
'''
self.filesystem_attachments = [FilesystemAttachment.from_json(o) for o in filesystem_attachments or []]
'''
filesystem_tag : str
info : FilesystemInfo
- machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~FilesystemAttachmentInfo]<~FilesystemAttachmentInfo>
+ machine_attachments : typing.Mapping[str, ~FilesystemAttachmentInfo]
status : EntityStatus
storage : StorageDetails
volume_tag : str
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Sequence<+T_co>[~FilesystemDetails]<~FilesystemDetails>
+ result : typing.Sequence[~FilesystemDetails]
'''
self.error = Error.from_json(error) if error else None
self.result = [FilesystemDetails.from_json(o) for o in result or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~FilesystemDetailsListResult]<~FilesystemDetailsListResult>
+ results : typing.Sequence[~FilesystemDetailsListResult]
'''
self.results = [FilesystemDetailsListResult.from_json(o) for o in results or []]
_toPy = {'machines': 'machines'}
def __init__(self, machines=None, **unknown_fields):
'''
- machines : typing.Sequence<+T_co>[str]
+ machines : typing.Sequence[str]
'''
self.machines = machines
_toPy = {'filters': 'filters'}
def __init__(self, filters=None, **unknown_fields):
'''
- filters : typing.Sequence<+T_co>[~FilesystemFilter]<~FilesystemFilter>
+ filters : typing.Sequence[~FilesystemFilter]
'''
self.filters = [FilesystemFilter.from_json(o) for o in filters or []]
def __init__(self, attachment=None, attributes=None, filesystem_tag=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields):
'''
attachment : FilesystemAttachmentParams
- attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ attributes : typing.Mapping[str, typing.Any]
filesystem_tag : str
provider : str
size : int
- tags : typing.Mapping<~KT, +VT_co>[str, str]
+ tags : typing.Mapping[str, str]
volume_tag : str
'''
self.attachment = FilesystemAttachmentParams.from_json(attachment) if attachment else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~FilesystemParamsResult]<~FilesystemParamsResult>
+ results : typing.Sequence[~FilesystemParamsResult]
'''
self.results = [FilesystemParamsResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~FilesystemResult]<~FilesystemResult>
+ results : typing.Sequence[~FilesystemResult]
'''
self.results = [FilesystemResult.from_json(o) for o in results or []]
_toPy = {'filesystems': 'filesystems'}
def __init__(self, filesystems=None, **unknown_fields):
'''
- filesystems : typing.Sequence<+T_co>[~Filesystem]<~Filesystem>
+ filesystems : typing.Sequence[~Filesystem]
'''
self.filesystems = [Filesystem.from_json(o) for o in filesystems or []]
_toPy = {'names': 'names'}
def __init__(self, names=None, **unknown_fields):
'''
- names : typing.Sequence<+T_co>[str]
+ names : typing.Sequence[str]
'''
self.names = names
_toPy = {'prefixes': 'prefixes'}
def __init__(self, prefixes=None, **unknown_fields):
'''
- prefixes : typing.Sequence<+T_co>[str]
+ prefixes : typing.Sequence[str]
'''
self.prefixes = prefixes
_toPy = {'matches': 'matches'}
def __init__(self, matches=None, **unknown_fields):
'''
- matches : typing.Sequence<+T_co>[~Entity]<~Entity>
+ matches : typing.Sequence[~Entity]
'''
self.matches = [Entity.from_json(o) for o in matches or []]
def __init__(self, error=None, list_=None, **unknown_fields):
'''
error : Error
- list_ : typing.Sequence<+T_co>[~Tools]<~Tools>
+ list_ : typing.Sequence[~Tools]
'''
self.error = Error.from_json(error) if error else None
self.list_ = [Tools.from_json(o) for o in list_ or []]
+class FirewallRule(Type):
+ _toSchema = {'known_service': 'known-service', 'whitelist_cidrs': 'whitelist-cidrs'}
+ _toPy = {'known-service': 'known_service', 'whitelist-cidrs': 'whitelist_cidrs'}
+ def __init__(self, known_service=None, whitelist_cidrs=None, **unknown_fields):
+ '''
+ known_service : str
+ whitelist_cidrs : typing.Sequence[str]
+ '''
+ self.known_service = known_service
+ self.whitelist_cidrs = whitelist_cidrs
+
+
+
+class FirewallRuleArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~FirewallRule]
+ '''
+ self.args = [FirewallRule.from_json(o) for o in args or []]
+
+
+
class FullStatus(Type):
- _toSchema = {'applications': 'applications', 'machines': 'machines', 'model': 'model', 'relations': 'relations', 'remote_applications': 'remote-applications'}
- _toPy = {'applications': 'applications', 'machines': 'machines', 'model': 'model', 'relations': 'relations', 'remote-applications': 'remote_applications'}
- def __init__(self, applications=None, machines=None, model=None, relations=None, remote_applications=None, **unknown_fields):
+ _toSchema = {'applications': 'applications', 'controller_timestamp': 'controller-timestamp', 'machines': 'machines', 'model': 'model', 'offers': 'offers', 'relations': 'relations', 'remote_applications': 'remote-applications'}
+ _toPy = {'applications': 'applications', 'controller-timestamp': 'controller_timestamp', 'machines': 'machines', 'model': 'model', 'offers': 'offers', 'relations': 'relations', 'remote-applications': 'remote_applications'}
+ def __init__(self, applications=None, controller_timestamp=None, machines=None, model=None, offers=None, relations=None, remote_applications=None, **unknown_fields):
'''
- applications : typing.Mapping<~KT, +VT_co>[str, ~ApplicationStatus]<~ApplicationStatus>
- machines : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
+ applications : typing.Mapping[str, ~ApplicationStatus]
+ controller_timestamp : str
+ machines : typing.Mapping[str, ~MachineStatus]
model : ModelStatusInfo
- relations : typing.Sequence<+T_co>[~RelationStatus]<~RelationStatus>
- remote_applications : typing.Mapping<~KT, +VT_co>[str, ~RemoteApplicationStatus]<~RemoteApplicationStatus>
+ offers : typing.Mapping[str, ~ApplicationOfferStatus]
+ relations : typing.Sequence[~RelationStatus]
+ remote_applications : typing.Mapping[str, ~RemoteApplicationStatus]
'''
self.applications = applications
+ self.controller_timestamp = controller_timestamp
self.machines = machines
self.model = ModelStatusInfo.from_json(model) if model else None
+ self.offers = offers
self.relations = [RelationStatus.from_json(o) for o in relations or []]
self.remote_applications = remote_applications
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~GetLeadershipSettingsResult]<~GetLeadershipSettingsResult>
+ results : typing.Sequence[~GetLeadershipSettingsResult]
'''
self.results = [GetLeadershipSettingsResult.from_json(o) for o in results or []]
def __init__(self, error=None, settings=None, **unknown_fields):
'''
error : Error
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
'''
self.error = Error.from_json(error) if error else None
self.settings = settings
+class GetTokenArg(Type):
+ _toSchema = {'tag': 'tag'}
+ _toPy = {'tag': 'tag'}
+ def __init__(self, tag=None, **unknown_fields):
+ '''
+ tag : str
+ '''
+ self.tag = tag
+
+
+
+class GetTokenArgs(Type):
+ _toSchema = {'args': 'Args'}
+ _toPy = {'Args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~GetTokenArg]
+ '''
+ self.args = [GetTokenArg.from_json(o) for o in args or []]
+
+
+
+class GoalState(Type):
+ _toSchema = {'relations': 'relations', 'units': 'units'}
+ _toPy = {'relations': 'relations', 'units': 'units'}
+ def __init__(self, relations=None, units=None, **unknown_fields):
+ '''
+ relations : typing.Mapping[str, typing.Any]
+ units : typing.Mapping[str, ~GoalStateStatus]
+ '''
+ self.relations = relations
+ self.units = units
+
+
+
+class GoalStateResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : GoalState
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = GoalState.from_json(result) if result else None
+
+
+
+class GoalStateResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~GoalStateResult]
+ '''
+ self.results = [GoalStateResult.from_json(o) for o in results or []]
+
+
+
+class GoalStateStatus(Type):
+ _toSchema = {'since': 'since', 'status': 'status'}
+ _toPy = {'since': 'since', 'status': 'status'}
+ def __init__(self, since=None, status=None, **unknown_fields):
+ '''
+ since : str
+ status : str
+ '''
+ self.since = since
+ self.status = status
+
+
+
class HAMember(Type):
_toSchema = {'public_address': 'public-address', 'series': 'series', 'tag': 'tag'}
_toPy = {'public-address': 'public_address', 'series': 'series', 'tag': 'tag'}
cpu_power : int
mem : int
root_disk : int
- tags : typing.Sequence<+T_co>[str]
+ tags : typing.Sequence[str]
'''
self.arch = arch
self.availability_zone = availability_zone
def __init__(self, error=None, statuses=None, **unknown_fields):
'''
error : Error
- statuses : typing.Sequence<+T_co>[~DetailedStatus]<~DetailedStatus>
+ statuses : typing.Sequence[~DetailedStatus]
'''
self.error = Error.from_json(error) if error else None
self.statuses = [DetailedStatus.from_json(o) for o in statuses or []]
def __init__(self, error=None, new_bridges=None, reconfigure_delay=None, **unknown_fields):
'''
error : Error
- new_bridges : typing.Sequence<+T_co>[~DeviceBridgeInfo]<~DeviceBridgeInfo>
+ new_bridges : typing.Sequence[~DeviceBridgeInfo]
reconfigure_delay : int
'''
self.error = Error.from_json(error) if error else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~HostNetworkChange]<~HostNetworkChange>
+ results : typing.Sequence[~HostNetworkChange]
'''
self.results = [HostNetworkChange.from_json(o) for o in results or []]
def __init__(self, cloud_spec=None, config=None, error=None, name=None, owner=None, **unknown_fields):
'''
cloud_spec : CloudSpec
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
error : Error
name : str
owner : str
_toPy = {'models': 'models'}
def __init__(self, models=None, **unknown_fields):
'''
- models : typing.Sequence<+T_co>[~HostedModelConfig]<~HostedModelConfig>
+ models : typing.Sequence[~HostedModelConfig]
'''
self.models = [HostedModelConfig.from_json(o) for o in models or []]
_toPy = {'images': 'images'}
def __init__(self, images=None, **unknown_fields):
'''
- images : typing.Sequence<+T_co>[~ImageSpec]<~ImageSpec>
+ images : typing.Sequence[~ImageSpec]
'''
self.images = [ImageSpec.from_json(o) for o in images or []]
_toPy = {'arches': 'arches', 'region': 'region', 'root-storage-type': 'root_storage_type', 'series': 'series', 'stream': 'stream', 'virt-type': 'virt_type'}
def __init__(self, arches=None, region=None, root_storage_type=None, series=None, stream=None, virt_type=None, **unknown_fields):
'''
- arches : typing.Sequence<+T_co>[str]
+ arches : typing.Sequence[str]
region : str
root_storage_type : str
- series : typing.Sequence<+T_co>[str]
+ series : typing.Sequence[str]
stream : str
virt_type : str
'''
+class ImportStorageDetails(Type):
+ _toSchema = {'storage_tag': 'storage-tag'}
+ _toPy = {'storage-tag': 'storage_tag'}
+ def __init__(self, storage_tag=None, **unknown_fields):
+ '''
+ storage_tag : str
+ '''
+ self.storage_tag = storage_tag
+
+
+
+class ImportStorageParams(Type):
+ _toSchema = {'kind': 'kind', 'pool': 'pool', 'provider_id': 'provider-id', 'storage_name': 'storage-name'}
+ _toPy = {'kind': 'kind', 'pool': 'pool', 'provider-id': 'provider_id', 'storage-name': 'storage_name'}
+ def __init__(self, kind=None, pool=None, provider_id=None, storage_name=None, **unknown_fields):
+ '''
+ kind : int
+ pool : str
+ provider_id : str
+ storage_name : str
+ '''
+ self.kind = kind
+ self.pool = pool
+ self.provider_id = provider_id
+ self.storage_name = storage_name
+
+
+
+class ImportStorageResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ImportStorageDetails
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ImportStorageDetails.from_json(result) if result else None
+
+
+
+class ImportStorageResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ImportStorageResult]
+ '''
+ self.results = [ImportStorageResult.from_json(o) for o in results or []]
+
+
+
+class IngressNetworksChangeEvent(Type):
+ _toSchema = {'application_token': 'application-token', 'ingress_required': 'ingress-required', 'macaroons': 'macaroons', 'networks': 'networks', 'relation_token': 'relation-token'}
+ _toPy = {'application-token': 'application_token', 'ingress-required': 'ingress_required', 'macaroons': 'macaroons', 'networks': 'networks', 'relation-token': 'relation_token'}
+ def __init__(self, application_token=None, ingress_required=None, macaroons=None, networks=None, relation_token=None, **unknown_fields):
+ '''
+ application_token : str
+ ingress_required : bool
+ macaroons : typing.Sequence[~Macaroon]
+ networks : typing.Sequence[str]
+ relation_token : str
+ '''
+ self.application_token = application_token
+ self.ingress_required = ingress_required
+ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []]
+ self.networks = networks
+ self.relation_token = relation_token
+
+
+
+class IngressNetworksChanges(Type):
+ _toSchema = {'changes': 'changes'}
+ _toPy = {'changes': 'changes'}
+ def __init__(self, changes=None, **unknown_fields):
+ '''
+ changes : typing.Sequence[~IngressNetworksChangeEvent]
+ '''
+ self.changes = [IngressNetworksChangeEvent.from_json(o) for o in changes or []]
+
+
+
class InitiateMigrationArgs(Type):
_toSchema = {'specs': 'specs'}
_toPy = {'specs': 'specs'}
def __init__(self, specs=None, **unknown_fields):
'''
- specs : typing.Sequence<+T_co>[~MigrationSpec]<~MigrationSpec>
+ specs : typing.Sequence[~MigrationSpec]
'''
self.specs = [MigrationSpec.from_json(o) for o in specs or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~InitiateMigrationResult]<~InitiateMigrationResult>
+ results : typing.Sequence[~InitiateMigrationResult]
'''
self.results = [InitiateMigrationResult.from_json(o) for o in results or []]
'''
characteristics : HardwareCharacteristics
instance_id : str
- network_config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ network_config : typing.Sequence[~NetworkConfig]
nonce : str
tag : str
- volume_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
+ volume_attachments : typing.Mapping[str, ~VolumeAttachmentInfo]
+ volumes : typing.Sequence[~Volume]
'''
self.characteristics = HardwareCharacteristics.from_json(characteristics) if characteristics else None
self.instance_id = instance_id
_toPy = {'arches': 'arches', 'cost': 'cost', 'cpu-cores': 'cpu_cores', 'deprecated': 'deprecated', 'memory': 'memory', 'name': 'name', 'root-disk': 'root_disk', 'virt-type': 'virt_type'}
def __init__(self, arches=None, cost=None, cpu_cores=None, deprecated=None, memory=None, name=None, root_disk=None, virt_type=None, **unknown_fields):
'''
- arches : typing.Sequence<+T_co>[str]
+ arches : typing.Sequence[str]
cost : int
cpu_cores : int
deprecated : bool
cost_divisor : int
cost_unit : str
error : Error
- instance_types : typing.Sequence<+T_co>[~InstanceType]<~InstanceType>
+ instance_types : typing.Sequence[~InstanceType]
'''
self.cost_currency = cost_currency
self.cost_divisor = cost_divisor
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~InstanceTypesResult]<~InstanceTypesResult>
+ results : typing.Sequence[~InstanceTypesResult]
'''
self.results = [InstanceTypesResult.from_json(o) for o in results or []]
_toPy = {'machines': 'machines'}
def __init__(self, machines=None, **unknown_fields):
'''
- machines : typing.Sequence<+T_co>[~InstanceInfo]<~InstanceInfo>
+ machines : typing.Sequence[~InstanceInfo]
'''
self.machines = [InstanceInfo.from_json(o) for o in machines or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~IntResult]<~IntResult>
+ results : typing.Sequence[~IntResult]
'''
self.results = [IntResult.from_json(o) for o in results or []]
+class 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, error=None, jobs=None, **unknown_fields):
'''
error : Error
- jobs : typing.Sequence<+T_co>[str]
+ jobs : typing.Sequence[str]
'''
self.error = Error.from_json(error) if error else None
self.jobs = jobs
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~JobsResult]<~JobsResult>
+ results : typing.Sequence[~JobsResult]
'''
self.results = [JobsResult.from_json(o) for o in results or []]
-class LifeResult(Type):
- _toSchema = {'error': 'error', 'life': 'life'}
- _toPy = {'error': 'error', 'life': 'life'}
- def __init__(self, error=None, life=None, **unknown_fields):
+class KnownServiceArgs(Type):
+ _toSchema = {'known_services': 'known-services'}
+ _toPy = {'known-services': 'known_services'}
+ def __init__(self, known_services=None, **unknown_fields):
'''
- error : Error
- life : str
+ known_services : typing.Sequence[str]
'''
- self.error = Error.from_json(error) if error else None
- self.life = life
+ self.known_services = known_services
-class LifeResults(Type):
- _toSchema = {'results': 'results'}
- _toPy = {'results': 'results'}
- def __init__(self, results=None, **unknown_fields):
+class KubernetesDeviceParams(Type):
+ _toSchema = {'attributes': 'Attributes', 'count': 'Count', 'type_': 'Type'}
+ _toPy = {'Attributes': 'attributes', 'Count': 'count', 'Type': 'type_'}
+ def __init__(self, attributes=None, count=None, type_=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~LifeResult]<~LifeResult>
+ attributes : typing.Mapping[str, str]
+ count : int
+ type_ : str
'''
- self.results = [LifeResult.from_json(o) for o in results or []]
+ self.attributes = attributes
+ self.count = count
+ self.type_ = type_
-class ListCloudImageMetadataResult(Type):
- _toSchema = {'result': 'result'}
- _toPy = {'result': 'result'}
- def __init__(self, result=None, **unknown_fields):
+class KubernetesFilesystemAttachmentParams(Type):
+ _toSchema = {'mount_point': 'mount-point', 'provider': 'provider', 'read_only': 'read-only'}
+ _toPy = {'mount-point': 'mount_point', 'provider': 'provider', 'read-only': 'read_only'}
+ def __init__(self, mount_point=None, provider=None, read_only=None, **unknown_fields):
'''
- result : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
+ mount_point : str
+ provider : str
+ read_only : bool
'''
- self.result = [CloudImageMetadata.from_json(o) for o in result or []]
+ self.mount_point = mount_point
+ self.provider = provider
+ self.read_only = read_only
-class ListImageResult(Type):
- _toSchema = {'result': 'result'}
- _toPy = {'result': 'result'}
- def __init__(self, result=None, **unknown_fields):
+class KubernetesFilesystemInfo(Type):
+ _toSchema = {'data': 'data', 'filesystem_id': 'filesystem-id', 'info': 'info', 'mount_point': 'mount-point', 'pool': 'pool', 'read_only': 'read-only', 'size': 'size', 'status': 'status', 'storagename': 'storagename', 'volume': 'volume'}
+ _toPy = {'data': 'data', 'filesystem-id': 'filesystem_id', 'info': 'info', 'mount-point': 'mount_point', 'pool': 'pool', 'read-only': 'read_only', 'size': 'size', 'status': 'status', 'storagename': 'storagename', 'volume': 'volume'}
+ def __init__(self, data=None, filesystem_id=None, info=None, mount_point=None, pool=None, read_only=None, size=None, status=None, storagename=None, volume=None, **unknown_fields):
'''
- result : typing.Sequence<+T_co>[~ImageMetadata]<~ImageMetadata>
+ data : typing.Mapping[str, typing.Any]
+ filesystem_id : str
+ info : str
+ mount_point : str
+ pool : str
+ read_only : bool
+ size : int
+ status : str
+ storagename : str
+ volume : KubernetesVolumeInfo
'''
- self.result = [ImageMetadata.from_json(o) for o in result or []]
+ self.data = data
+ self.filesystem_id = filesystem_id
+ self.info = info
+ self.mount_point = mount_point
+ self.pool = pool
+ self.read_only = read_only
+ self.size = size
+ self.status = status
+ self.storagename = storagename
+ self.volume = KubernetesVolumeInfo.from_json(volume) if volume else None
-class ListResourcesArgs(Type):
- _toSchema = {'entities': 'entities'}
- _toPy = {'entities': 'entities'}
- def __init__(self, entities=None, **unknown_fields):
+class KubernetesFilesystemParams(Type):
+ _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'}
+ _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'}
+ def __init__(self, attachment=None, attributes=None, provider=None, size=None, storagename=None, tags=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ attachment : KubernetesFilesystemAttachmentParams
+ attributes : typing.Mapping[str, typing.Any]
+ provider : str
+ size : int
+ storagename : str
+ tags : typing.Mapping[str, str]
'''
- self.entities = [Entity.from_json(o) for o in entities or []]
+ self.attachment = KubernetesFilesystemAttachmentParams.from_json(attachment) if attachment else None
+ self.attributes = attributes
+ self.provider = provider
+ self.size = size
+ self.storagename = storagename
+ self.tags = tags
-class ListSSHKeys(Type):
+class KubernetesProvisioningInfo(Type):
+ _toSchema = {'constraints': 'constraints', 'devices': 'devices', 'filesystems': 'filesystems', 'placement': 'placement', 'pod_spec': 'pod-spec', 'tags': 'tags', 'volumes': 'volumes'}
+ _toPy = {'constraints': 'constraints', 'devices': 'devices', 'filesystems': 'filesystems', 'placement': 'placement', 'pod-spec': 'pod_spec', 'tags': 'tags', 'volumes': 'volumes'}
+ def __init__(self, constraints=None, devices=None, filesystems=None, placement=None, pod_spec=None, tags=None, volumes=None, **unknown_fields):
+ '''
+ constraints : Value
+ devices : typing.Sequence[~KubernetesDeviceParams]
+ filesystems : typing.Sequence[~KubernetesFilesystemParams]
+ placement : str
+ pod_spec : str
+ tags : typing.Mapping[str, str]
+ volumes : typing.Sequence[~KubernetesVolumeParams]
+ '''
+ self.constraints = Value.from_json(constraints) if constraints else None
+ self.devices = [KubernetesDeviceParams.from_json(o) for o in devices or []]
+ self.filesystems = [KubernetesFilesystemParams.from_json(o) for o in filesystems or []]
+ self.placement = placement
+ self.pod_spec = pod_spec
+ self.tags = tags
+ self.volumes = [KubernetesVolumeParams.from_json(o) for o in volumes or []]
+
+
+
+class KubernetesProvisioningInfoResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : KubernetesProvisioningInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = KubernetesProvisioningInfo.from_json(result) if result else None
+
+
+
+class KubernetesProvisioningInfoResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~KubernetesProvisioningInfoResult]
+ '''
+ self.results = [KubernetesProvisioningInfoResult.from_json(o) for o in results or []]
+
+
+
+class KubernetesVolumeAttachmentParams(Type):
+ _toSchema = {'provider': 'provider', 'read_only': 'read-only'}
+ _toPy = {'provider': 'provider', 'read-only': 'read_only'}
+ def __init__(self, provider=None, read_only=None, **unknown_fields):
+ '''
+ provider : str
+ read_only : bool
+ '''
+ self.provider = provider
+ self.read_only = read_only
+
+
+
+class KubernetesVolumeInfo(Type):
+ _toSchema = {'data': 'data', 'info': 'info', 'persistent': 'persistent', 'pool': 'pool', 'size': 'size', 'status': 'status', 'volume_id': 'volume-id'}
+ _toPy = {'data': 'data', 'info': 'info', 'persistent': 'persistent', 'pool': 'pool', 'size': 'size', 'status': 'status', 'volume-id': 'volume_id'}
+ def __init__(self, data=None, info=None, persistent=None, pool=None, size=None, status=None, volume_id=None, **unknown_fields):
+ '''
+ data : typing.Mapping[str, typing.Any]
+ info : str
+ persistent : bool
+ pool : str
+ size : int
+ status : str
+ volume_id : str
+ '''
+ self.data = data
+ self.info = info
+ self.persistent = persistent
+ self.pool = pool
+ self.size = size
+ self.status = status
+ self.volume_id = volume_id
+
+
+
+class KubernetesVolumeParams(Type):
+ _toSchema = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'}
+ _toPy = {'attachment': 'attachment', 'attributes': 'attributes', 'provider': 'provider', 'size': 'size', 'storagename': 'storagename', 'tags': 'tags'}
+ def __init__(self, attachment=None, attributes=None, provider=None, size=None, storagename=None, tags=None, **unknown_fields):
+ '''
+ attachment : KubernetesVolumeAttachmentParams
+ attributes : typing.Mapping[str, typing.Any]
+ provider : str
+ size : int
+ storagename : str
+ tags : typing.Mapping[str, str]
+ '''
+ self.attachment = KubernetesVolumeAttachmentParams.from_json(attachment) if attachment else None
+ self.attributes = attributes
+ self.provider = provider
+ self.size = size
+ self.storagename = storagename
+ self.tags = tags
+
+
+
+class LXDProfile(Type):
+ _toSchema = {'config': 'config', 'description': 'description', 'devices': 'devices'}
+ _toPy = {'config': 'config', 'description': 'description', 'devices': 'devices'}
+ def __init__(self, config=None, description=None, devices=None, **unknown_fields):
+ '''
+ config : typing.Mapping[str, str]
+ description : str
+ devices : typing.Mapping[str, typing.Any]
+ '''
+ self.config = config
+ self.description = description
+ self.devices = devices
+
+
+
+class LXDProfileUpgradeMessages(Type):
+ _toSchema = {'application': 'application', 'watcher_id': 'watcher-id'}
+ _toPy = {'application': 'application', 'watcher-id': 'watcher_id'}
+ def __init__(self, application=None, watcher_id=None, **unknown_fields):
+ '''
+ application : Entity
+ watcher_id : str
+ '''
+ self.application = Entity.from_json(application) if application else None
+ self.watcher_id = watcher_id
+
+
+
+class LXDProfileUpgradeMessagesResult(Type):
+ _toSchema = {'error': 'error', 'message': 'message', 'unit_name': 'unit-name'}
+ _toPy = {'error': 'error', 'message': 'message', 'unit-name': 'unit_name'}
+ def __init__(self, error=None, message=None, unit_name=None, **unknown_fields):
+ '''
+ error : Error
+ message : str
+ unit_name : str
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.message = message
+ self.unit_name = unit_name
+
+
+
+class LXDProfileUpgradeMessagesResults(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~LXDProfileUpgradeMessagesResult]
+ '''
+ self.args = [LXDProfileUpgradeMessagesResult.from_json(o) for o in args or []]
+
+
+
+class LifeResult(Type):
+ _toSchema = {'error': 'error', 'life': 'life'}
+ _toPy = {'error': 'error', 'life': 'life'}
+ def __init__(self, error=None, life=None, **unknown_fields):
+ '''
+ error : Error
+ life : str
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.life = life
+
+
+
+class LifeResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~LifeResult]
+ '''
+ self.results = [LifeResult.from_json(o) for o in results or []]
+
+
+
+class ListCloudImageMetadataResult(Type):
+ _toSchema = {'result': 'result'}
+ _toPy = {'result': 'result'}
+ def __init__(self, result=None, **unknown_fields):
+ '''
+ result : typing.Sequence[~CloudImageMetadata]
+ '''
+ self.result = [CloudImageMetadata.from_json(o) for o in result or []]
+
+
+
+class ListCloudInfo(Type):
+ _toSchema = {'clouddetails': 'CloudDetails', 'user_access': 'user-access'}
+ _toPy = {'CloudDetails': 'clouddetails', 'user-access': 'user_access'}
+ def __init__(self, clouddetails=None, user_access=None, **unknown_fields):
+ '''
+ clouddetails : CloudDetails
+ user_access : str
+ '''
+ self.clouddetails = CloudDetails.from_json(clouddetails) if clouddetails else None
+ self.user_access = user_access
+
+
+
+class ListCloudInfoResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ListCloudInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ListCloudInfo.from_json(result) if result else None
+
+
+
+class ListCloudInfoResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ListCloudInfoResult]
+ '''
+ self.results = [ListCloudInfoResult.from_json(o) for o in results or []]
+
+
+
+class ListCloudsRequest(Type):
+ _toSchema = {'all_': 'all', 'user_tag': 'user-tag'}
+ _toPy = {'all': 'all_', 'user-tag': 'user_tag'}
+ def __init__(self, all_=None, user_tag=None, **unknown_fields):
+ '''
+ all_ : bool
+ user_tag : str
+ '''
+ self.all_ = all_
+ self.user_tag = user_tag
+
+
+
+class ListFirewallRulesResults(Type):
+ _toSchema = {'rules': 'Rules'}
+ _toPy = {'Rules': 'rules'}
+ def __init__(self, rules=None, **unknown_fields):
+ '''
+ rules : typing.Sequence[~FirewallRule]
+ '''
+ self.rules = [FirewallRule.from_json(o) for o in rules or []]
+
+
+
+class ListImageResult(Type):
+ _toSchema = {'result': 'result'}
+ _toPy = {'result': 'result'}
+ def __init__(self, result=None, **unknown_fields):
+ '''
+ result : typing.Sequence[~ImageMetadata]
+ '''
+ self.result = [ImageMetadata.from_json(o) for o in result or []]
+
+
+
+class ListResourcesArgs(Type):
+ _toSchema = {'entities': 'entities'}
+ _toPy = {'entities': 'entities'}
+ def __init__(self, entities=None, **unknown_fields):
+ '''
+ entities : typing.Sequence[~Entity]
+ '''
+ self.entities = [Entity.from_json(o) for o in entities or []]
+
+
+
+class ListSSHKeys(Type):
_toSchema = {'entities': 'entities', 'mode': 'mode'}
_toPy = {'entities': 'entities', 'mode': 'mode'}
def __init__(self, entities=None, mode=None, **unknown_fields):
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~Space]<~Space>
+ results : typing.Sequence[~Space]
'''
self.results = [Space.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ results : typing.Sequence[~Subnet]
'''
self.results = [Subnet.from_json(o) for o in results or []]
_toPy = {'resource-names': 'resource_names'}
def __init__(self, resource_names=None, **unknown_fields):
'''
- resource_names : typing.Sequence<+T_co>[str]
+ resource_names : typing.Sequence[str]
'''
self.resource_names = resource_names
_toPy = {'ids': 'ids'}
def __init__(self, ids=None, **unknown_fields):
'''
- ids : typing.Sequence<+T_co>[~LogForwardingID]<~LogForwardingID>
+ ids : typing.Sequence[~LogForwardingID]
'''
self.ids = [LogForwardingID.from_json(o) for o in ids or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~LogForwardingGetLastSentResult]<~LogForwardingGetLastSentResult>
+ results : typing.Sequence[~LogForwardingGetLastSentResult]
'''
self.results = [LogForwardingGetLastSentResult.from_json(o) for o in results or []]
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~LogForwardingSetLastSentParam]<~LogForwardingSetLastSentParam>
+ params : typing.Sequence[~LogForwardingSetLastSentParam]
'''
self.params = [LogForwardingSetLastSentParam.from_json(o) for o in params or []]
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~LookUpArg]<~LookUpArg>
+ args : typing.Sequence[~LookUpArg]
'''
self.args = [LookUpArg.from_json(o) for o in args or []]
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~LookUpPayloadArg]<~LookUpPayloadArg>
+ args : typing.Sequence[~LookUpPayloadArg]
'''
self.args = [LookUpPayloadArg.from_json(o) for o in args or []]
+class 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 []]
_toPy = {'addresses': 'addresses', 'error': 'error'}
def __init__(self, addresses=None, error=None, **unknown_fields):
'''
- addresses : typing.Sequence<+T_co>[~Address]<~Address>
+ addresses : typing.Sequence[~Address]
error : Error
'''
self.addresses = [Address.from_json(o) for o in addresses or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MachineAddressesResult]<~MachineAddressesResult>
+ results : typing.Sequence[~MachineAddressesResult]
'''
self.results = [MachineAddressesResult.from_json(o) for o in results or []]
_toPy = {'block-devices': 'block_devices', 'machine': 'machine'}
def __init__(self, block_devices=None, machine=None, **unknown_fields):
'''
- block_devices : typing.Sequence<+T_co>[~BlockDevice]<~BlockDevice>
+ block_devices : typing.Sequence[~BlockDevice]
machine : str
'''
self.block_devices = [BlockDevice.from_json(o) for o in block_devices or []]
_toPy = {'container-types': 'container_types', 'machine-tag': 'machine_tag'}
def __init__(self, container_types=None, machine_tag=None, **unknown_fields):
'''
- container_types : typing.Sequence<+T_co>[str]
+ container_types : typing.Sequence[str]
machine_tag : str
'''
self.container_types = container_types
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~MachineContainers]<~MachineContainers>
+ params : typing.Sequence[~MachineContainers]
'''
self.params = [MachineContainers.from_json(o) for o in params or []]
cpu_power : int
mem : int
root_disk : int
- tags : typing.Sequence<+T_co>[str]
+ tags : typing.Sequence[str]
'''
self.arch = arch
self.availability_zone = availability_zone
def __init__(self, error=None, info=None, **unknown_fields):
'''
error : Error
- info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ info : typing.Sequence[~NetworkConfig]
'''
self.error = Error.from_json(error) if error else None
self.info = [NetworkConfig.from_json(o) for o in info or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MachineNetworkConfigResult]<~MachineNetworkConfigResult>
+ results : typing.Sequence[~MachineNetworkConfigResult]
'''
self.results = [MachineNetworkConfigResult.from_json(o) for o in results or []]
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~MachinePorts]<~MachinePorts>
+ params : typing.Sequence[~MachinePorts]
'''
self.params = [MachinePorts.from_json(o) for o in params or []]
def __init__(self, error=None, ports=None, **unknown_fields):
'''
error : Error
- ports : typing.Sequence<+T_co>[~MachinePortRange]<~MachinePortRange>
+ ports : typing.Sequence[~MachinePortRange]
'''
self.error = Error.from_json(error) if error else None
self.ports = [MachinePortRange.from_json(o) for o in ports or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MachinePortsResult]<~MachinePortsResult>
+ results : typing.Sequence[~MachinePortsResult]
'''
self.results = [MachinePortsResult.from_json(o) for o in results or []]
def __init__(self, agent_status=None, containers=None, dns_name=None, hardware=None, has_vote=None, id_=None, instance_id=None, instance_status=None, ip_addresses=None, jobs=None, series=None, wants_vote=None, **unknown_fields):
'''
agent_status : DetailedStatus
- containers : typing.Mapping<~KT, +VT_co>[str, ~MachineStatus]<~MachineStatus>
+ containers : typing.Mapping[str, ~MachineStatus]
dns_name : str
hardware : str
has_vote : bool
id_ : str
instance_id : str
instance_status : DetailedStatus
- ip_addresses : typing.Sequence<+T_co>[str]
- jobs : typing.Sequence<+T_co>[str]
+ ip_addresses : typing.Sequence[str]
+ jobs : typing.Sequence[str]
series : str
wants_vote : bool
'''
_toPy = {'ids': 'ids'}
def __init__(self, ids=None, **unknown_fields):
'''
- ids : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
+ ids : typing.Sequence[~MachineStorageId]
'''
self.ids = [MachineStorageId.from_json(o) for o in ids or []]
_toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[~MachineStorageId]<~MachineStorageId>
+ changes : typing.Sequence[~MachineStorageId]
error : Error
watcher_id : str
'''
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MachineStorageIdsWatchResult]<~MachineStorageIdsWatchResult>
+ results : typing.Sequence[~MachineStorageIdsWatchResult]
'''
self.results = [MachineStorageIdsWatchResult.from_json(o) for o in results or []]
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ result : typing.Mapping[str, typing.Any]
'''
self.error = Error.from_json(error) if error else None
self.result = result
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MapResult]<~MapResult>
+ results : typing.Sequence[~MapResult]
'''
self.results = [MapResult.from_json(o) for o in results or []]
id_ : int
priority : float
slavedelay : int
- tags : typing.Mapping<~KT, +VT_co>[str, str]
+ tags : typing.Mapping[str, str]
votes : int
'''
self.address = address
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~MergeLeadershipSettingsParam]<~MergeLeadershipSettingsParam>
+ params : typing.Sequence[~MergeLeadershipSettingsParam]
'''
self.params = [MergeLeadershipSettingsParam.from_json(o) for o in params or []]
def __init__(self, application_tag=None, settings=None, **unknown_fields):
'''
application_tag : str
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
'''
self.application_tag = application_tag
self.settings = settings
_toPy = {'image-ids': 'image_ids'}
def __init__(self, image_ids=None, **unknown_fields):
'''
- image_ids : typing.Sequence<+T_co>[str]
+ image_ids : typing.Sequence[str]
'''
self.image_ids = image_ids
_toPy = {'metadata': 'metadata'}
def __init__(self, metadata=None, **unknown_fields):
'''
- metadata : typing.Sequence<+T_co>[~CloudImageMetadataList]<~CloudImageMetadataList>
+ metadata : typing.Sequence[~CloudImageMetadataList]
'''
self.metadata = [CloudImageMetadataList.from_json(o) for o in metadata or []]
_toPy = {'statues': 'statues'}
def __init__(self, statues=None, **unknown_fields):
'''
- statues : typing.Sequence<+T_co>[~MeterStatusParam]<~MeterStatusParam>
+ statues : typing.Sequence[~MeterStatusParam]
'''
self.statues = [MeterStatusParam.from_json(o) for o in statues or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~MeterStatusResult]<~MeterStatusResult>
+ results : typing.Sequence[~MeterStatusResult]
'''
self.results = [MeterStatusResult.from_json(o) for o in results or []]
'''
charm_url : str
created : str
- metrics : typing.Sequence<+T_co>[~Metric]<~Metric>
+ metrics : typing.Sequence[~Metric]
uuid : str
'''
self.charm_url = charm_url
_toPy = {'batches': 'batches'}
def __init__(self, batches=None, **unknown_fields):
'''
- batches : typing.Sequence<+T_co>[~MetricBatchParam]<~MetricBatchParam>
+ batches : typing.Sequence[~MetricBatchParam]
'''
self.batches = [MetricBatchParam.from_json(o) for o in batches or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~EntityMetrics]<~EntityMetrics>
+ results : typing.Sequence[~EntityMetrics]
'''
self.results = [EntityMetrics.from_json(o) for o in results or []]
external_control : bool
migration_id : str
phase : str
- source_api_addrs : typing.Sequence<+T_co>[str]
+ source_api_addrs : typing.Sequence[str]
source_ca_cert : str
- target_api_addrs : typing.Sequence<+T_co>[str]
+ target_api_addrs : typing.Sequence[str]
target_ca_cert : str
'''
self.attempt = attempt
_toPy = {'addrs': 'addrs', 'auth-tag': 'auth_tag', 'ca-cert': 'ca_cert', 'controller-tag': 'controller_tag', 'macaroons': 'macaroons', 'password': 'password'}
def __init__(self, addrs=None, auth_tag=None, ca_cert=None, controller_tag=None, macaroons=None, password=None, **unknown_fields):
'''
- addrs : typing.Sequence<+T_co>[str]
+ addrs : typing.Sequence[str]
auth_tag : str
ca_cert : str
controller_tag : str
_toPy = {'failed': 'failed', 'migration-id': 'migration_id', 'phase': 'phase', 'success-count': 'success_count', 'unknown-count': 'unknown_count', 'unknown-sample': 'unknown_sample'}
def __init__(self, failed=None, migration_id=None, phase=None, success_count=None, unknown_count=None, unknown_sample=None, **unknown_fields):
'''
- failed : typing.Sequence<+T_co>[str]
+ failed : typing.Sequence[str]
migration_id : str
phase : str
success_count : int
unknown_count : int
- unknown_sample : typing.Sequence<+T_co>[str]
+ unknown_sample : typing.Sequence[str]
'''
self.failed = failed
self.migration_id = migration_id
+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'}
_toPy = {'blocks': 'blocks', 'model-uuid': 'model_uuid', 'name': 'name', 'owner-tag': 'owner_tag'}
def __init__(self, blocks=None, model_uuid=None, name=None, owner_tag=None, **unknown_fields):
'''
- blocks : typing.Sequence<+T_co>[str]
+ blocks : typing.Sequence[str]
model_uuid : str
name : str
owner_tag : str
_toPy = {'models': 'models'}
def __init__(self, models=None, **unknown_fields):
'''
- models : typing.Sequence<+T_co>[~ModelBlockInfo]<~ModelBlockInfo>
+ models : typing.Sequence[~ModelBlockInfo]
'''
self.models = [ModelBlockInfo.from_json(o) for o in models or []]
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
'''
self.config = config
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, ~ConfigValue]<~ConfigValue>
+ config : typing.Mapping[str, ~ConfigValue]
'''
self.config = config
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
+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'}
'''
cloud_region : str
cloud_tag : str
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
'''
self.cloud_region = cloud_region
self.cloud_tag = cloud_tag
_toPy = {'controller': 'controller', 'default': 'default', 'regions': 'regions'}
def __init__(self, controller=None, default=None, regions=None, **unknown_fields):
'''
- controller : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- default : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- regions : typing.Sequence<+T_co>[~RegionDefaults]<~RegionDefaults>
+ controller : typing.Mapping[str, typing.Any]
+ default : typing.Mapping[str, typing.Any]
+ regions : typing.Sequence[~RegionDefaults]
'''
self.controller = controller
self.default = default
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, ~ModelDefaults]<~ModelDefaults>
+ config : typing.Mapping[str, ~ModelDefaults]
'''
self.config = config
+class ModelEntityCount(Type):
+ _toSchema = {'count': 'count', 'entity': 'entity'}
+ _toPy = {'count': 'count', 'entity': 'entity'}
+ def __init__(self, count=None, entity=None, **unknown_fields):
+ '''
+ count : int
+ entity : str
+ '''
+ self.count = count
+ self.entity = entity
+
+
+
+class ModelFilesystemInfo(Type):
+ _toSchema = {'detachable': 'detachable', 'id_': 'id', 'message': 'message', 'provider_id': 'provider-id', 'status': 'status'}
+ _toPy = {'detachable': 'detachable', 'id': 'id_', 'message': 'message', 'provider-id': 'provider_id', 'status': 'status'}
+ def __init__(self, detachable=None, id_=None, message=None, provider_id=None, status=None, **unknown_fields):
+ '''
+ detachable : bool
+ id_ : str
+ message : str
+ provider_id : str
+ status : str
+ '''
+ self.detachable = detachable
+ self.id_ = id_
+ self.message = message
+ self.provider_id = provider_id
+ self.status = status
+
+
+
class ModelInfo(Type):
- _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'default_series': 'default-series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'users': 'users', 'uuid': 'uuid'}
- _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'default-series': 'default_series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'users': 'users', 'uuid': 'uuid'}
- def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, default_series=None, life=None, machines=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, users=None, uuid=None, **unknown_fields):
+ _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'default_series': 'default-series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'type_': 'type', 'users': 'users', 'uuid': 'uuid'}
+ _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'default-series': 'default_series', 'life': 'life', 'machines': 'machines', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'type': 'type_', 'users': 'users', 'uuid': 'uuid'}
+ def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, default_series=None, life=None, machines=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, type_=None, users=None, uuid=None, **unknown_fields):
'''
agent_version : Number
cloud_credential_tag : str
controller_uuid : str
default_series : str
life : str
- machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
+ machines : typing.Sequence[~ModelMachineInfo]
migration : ModelMigrationStatus
name : str
owner_tag : str
provider_type : str
sla : ModelSLAInfo
status : EntityStatus
- users : typing.Sequence<+T_co>[~ModelUserInfo]<~ModelUserInfo>
+ type_ : str
+ users : typing.Sequence[~ModelUserInfo]
uuid : str
'''
self.agent_version = Number.from_json(agent_version) if agent_version else None
self.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
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ModelInfoResult]<~ModelInfoResult>
+ results : typing.Sequence[~ModelInfoResult]
'''
self.results = [ModelInfoResult.from_json(o) for o in results or []]
_toPy = {'constraints': 'constraints'}
def __init__(self, constraints=None, **unknown_fields):
'''
- constraints : typing.Sequence<+T_co>[~ModelInstanceTypesConstraint]<~ModelInstanceTypesConstraint>
+ constraints : typing.Sequence[~ModelInstanceTypesConstraint]
'''
self.constraints = [ModelInstanceTypesConstraint.from_json(o) for o in constraints or []]
_toPy = {'creds': 'creds', 'level': 'level'}
def __init__(self, creds=None, level=None, **unknown_fields):
'''
- creds : typing.Sequence<+T_co>[int]
+ creds : typing.Sequence[int]
level : str
'''
self.creds = creds
+class ModelSequencesResult(Type):
+ _toSchema = {'sequences': 'sequences'}
+ _toPy = {'sequences': 'sequences'}
+ def __init__(self, sequences=None, **unknown_fields):
+ '''
+ sequences : typing.Mapping[str, int]
+ '''
+ self.sequences = sequences
+
+
+
class ModelSet(Type):
_toSchema = {'config': 'config'}
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ config : typing.Mapping[str, typing.Any]
'''
self.config = config
application_count : int
hosted_machine_count : int
life : str
- machines : typing.Sequence<+T_co>[~ModelMachineInfo]<~ModelMachineInfo>
+ machines : typing.Sequence[~ModelMachineInfo]
model_tag : str
owner_tag : str
'''
class ModelStatusInfo(Type):
- _toSchema = {'available_version': 'available-version', 'cloud_tag': 'cloud-tag', 'meter_status': 'meter-status', 'model_status': 'model-status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'}
- _toPy = {'available-version': 'available_version', 'cloud-tag': 'cloud_tag', 'meter-status': 'meter_status', 'model-status': 'model_status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'version': 'version'}
- def __init__(self, available_version=None, cloud_tag=None, meter_status=None, model_status=None, name=None, region=None, sla=None, version=None, **unknown_fields):
+ _toSchema = {'available_version': 'available-version', 'cloud_tag': 'cloud-tag', 'meter_status': 'meter-status', 'model_status': 'model-status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'type_': 'type', 'version': 'version'}
+ _toPy = {'available-version': 'available_version', 'cloud-tag': 'cloud_tag', 'meter-status': 'meter_status', 'model-status': 'model_status', 'name': 'name', 'region': 'region', 'sla': 'sla', 'type': 'type_', 'version': 'version'}
+ def __init__(self, available_version=None, cloud_tag=None, meter_status=None, model_status=None, name=None, region=None, sla=None, type_=None, version=None, **unknown_fields):
'''
available_version : str
cloud_tag : str
name : str
region : str
sla : str
+ type_ : str
version : str
'''
self.available_version = available_version
self.name = name
self.region = region
self.sla = sla
+ self.type_ = type_
self.version = version
_toPy = {'models': 'models'}
def __init__(self, models=None, **unknown_fields):
'''
- models : typing.Sequence<+T_co>[~ModelStatus]<~ModelStatus>
+ models : typing.Sequence[~ModelStatus]
'''
self.models = [ModelStatus.from_json(o) for o in models or []]
+class ModelSummariesRequest(Type):
+ _toSchema = {'all_': 'all', 'user_tag': 'user-tag'}
+ _toPy = {'all': 'all_', 'user-tag': 'user_tag'}
+ def __init__(self, all_=None, user_tag=None, **unknown_fields):
+ '''
+ all_ : bool
+ user_tag : str
+ '''
+ self.all_ = all_
+ self.user_tag = user_tag
+
+
+
+class ModelSummary(Type):
+ _toSchema = {'agent_version': 'agent-version', 'cloud_credential_tag': 'cloud-credential-tag', 'cloud_region': 'cloud-region', 'cloud_tag': 'cloud-tag', 'controller_uuid': 'controller-uuid', 'counts': 'counts', 'default_series': 'default-series', 'last_connection': 'last-connection', 'life': 'life', 'migration': 'migration', 'name': 'name', 'owner_tag': 'owner-tag', 'provider_type': 'provider-type', 'sla': 'sla', 'status': 'status', 'type_': 'type', 'user_access': 'user-access', 'uuid': 'uuid'}
+ _toPy = {'agent-version': 'agent_version', 'cloud-credential-tag': 'cloud_credential_tag', 'cloud-region': 'cloud_region', 'cloud-tag': 'cloud_tag', 'controller-uuid': 'controller_uuid', 'counts': 'counts', 'default-series': 'default_series', 'last-connection': 'last_connection', 'life': 'life', 'migration': 'migration', 'name': 'name', 'owner-tag': 'owner_tag', 'provider-type': 'provider_type', 'sla': 'sla', 'status': 'status', 'type': 'type_', 'user-access': 'user_access', 'uuid': 'uuid'}
+ def __init__(self, agent_version=None, cloud_credential_tag=None, cloud_region=None, cloud_tag=None, controller_uuid=None, counts=None, default_series=None, last_connection=None, life=None, migration=None, name=None, owner_tag=None, provider_type=None, sla=None, status=None, type_=None, user_access=None, uuid=None, **unknown_fields):
+ '''
+ agent_version : Number
+ cloud_credential_tag : str
+ cloud_region : str
+ cloud_tag : str
+ controller_uuid : str
+ counts : typing.Sequence[~ModelEntityCount]
+ default_series : str
+ last_connection : str
+ life : str
+ migration : ModelMigrationStatus
+ name : str
+ owner_tag : str
+ provider_type : str
+ sla : ModelSLAInfo
+ status : EntityStatus
+ type_ : str
+ user_access : str
+ uuid : str
+ '''
+ self.agent_version = Number.from_json(agent_version) if agent_version else None
+ self.cloud_credential_tag = cloud_credential_tag
+ self.cloud_region = cloud_region
+ self.cloud_tag = cloud_tag
+ self.controller_uuid = controller_uuid
+ self.counts = [ModelEntityCount.from_json(o) for o in counts or []]
+ self.default_series = default_series
+ self.last_connection = last_connection
+ self.life = life
+ self.migration = ModelMigrationStatus.from_json(migration) if migration else None
+ self.name = name
+ self.owner_tag = owner_tag
+ self.provider_type = provider_type
+ self.sla = ModelSLAInfo.from_json(sla) if sla else None
+ self.status = EntityStatus.from_json(status) if status else None
+ self.type_ = type_
+ self.user_access = user_access
+ self.uuid = uuid
+
+
+
+class ModelSummaryResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : ModelSummary
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = ModelSummary.from_json(result) if result else None
+
+
+
+class ModelSummaryResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ModelSummaryResult]
+ '''
+ self.results = [ModelSummaryResult.from_json(o) for o in results or []]
+
+
+
class ModelTag(Type):
_toSchema = {}
_toPy = {}
_toPy = {'keys': 'keys'}
def __init__(self, keys=None, **unknown_fields):
'''
- keys : typing.Sequence<+T_co>[str]
+ keys : typing.Sequence[str]
'''
self.keys = keys
'''
cloud_region : str
cloud_tag : str
- keys : typing.Sequence<+T_co>[str]
+ keys : typing.Sequence[str]
'''
self.cloud_region = cloud_region
self.cloud_tag = cloud_tag
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ModelUserInfoResult]<~ModelUserInfoResult>
+ results : typing.Sequence[~ModelUserInfoResult]
'''
self.results = [ModelUserInfoResult.from_json(o) for o in results or []]
+class ModelVolumeInfo(Type):
+ _toSchema = {'detachable': 'detachable', 'id_': 'id', 'message': 'message', 'provider_id': 'provider-id', 'status': 'status'}
+ _toPy = {'detachable': 'detachable', 'id': 'id_', 'message': 'message', 'provider-id': 'provider_id', 'status': 'status'}
+ def __init__(self, detachable=None, id_=None, message=None, provider_id=None, status=None, **unknown_fields):
+ '''
+ detachable : bool
+ id_ : str
+ message : str
+ provider_id : str
+ status : str
+ '''
+ self.detachable = detachable
+ self.id_ = id_
+ self.message = message
+ self.provider_id = provider_id
+ self.status = status
+
+
+
+class ModifyCloudAccess(Type):
+ _toSchema = {'access': 'access', 'action': 'action', 'cloud_tag': 'cloud-tag', 'user_tag': 'user-tag'}
+ _toPy = {'access': 'access', 'action': 'action', 'cloud-tag': 'cloud_tag', 'user-tag': 'user_tag'}
+ def __init__(self, access=None, action=None, cloud_tag=None, user_tag=None, **unknown_fields):
+ '''
+ access : str
+ action : str
+ cloud_tag : str
+ user_tag : str
+ '''
+ self.access = access
+ self.action = action
+ self.cloud_tag = cloud_tag
+ self.user_tag = user_tag
+
+
+
+class ModifyCloudAccessRequest(Type):
+ _toSchema = {'changes': 'changes'}
+ _toPy = {'changes': 'changes'}
+ def __init__(self, changes=None, **unknown_fields):
+ '''
+ changes : typing.Sequence[~ModifyCloudAccess]
+ '''
+ self.changes = [ModifyCloudAccess.from_json(o) for o in changes or []]
+
+
+
class ModifyControllerAccess(Type):
_toSchema = {'access': 'access', 'action': 'action', 'user_tag': 'user-tag'}
_toPy = {'access': 'access', 'action': 'action', 'user-tag': 'user_tag'}
_toPy = {'changes': 'changes'}
def __init__(self, changes=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[~ModifyControllerAccess]<~ModifyControllerAccess>
+ changes : typing.Sequence[~ModifyControllerAccess]
'''
self.changes = [ModifyControllerAccess.from_json(o) for o in changes or []]
_toPy = {'changes': 'changes'}
def __init__(self, changes=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[~ModifyModelAccess]<~ModifyModelAccess>
+ changes : typing.Sequence[~ModifyModelAccess]
'''
self.changes = [ModifyModelAccess.from_json(o) for o in changes or []]
+class ModifyOfferAccess(Type):
+ _toSchema = {'access': 'access', 'action': 'action', 'offer_url': 'offer-url', 'user_tag': 'user-tag'}
+ _toPy = {'access': 'access', 'action': 'action', 'offer-url': 'offer_url', 'user-tag': 'user_tag'}
+ def __init__(self, access=None, action=None, offer_url=None, user_tag=None, **unknown_fields):
+ '''
+ access : str
+ action : str
+ offer_url : str
+ user_tag : str
+ '''
+ self.access = access
+ self.action = action
+ self.offer_url = offer_url
+ self.user_tag = user_tag
+
+
+
+class ModifyOfferAccessRequest(Type):
+ _toSchema = {'changes': 'changes'}
+ _toPy = {'changes': 'changes'}
+ def __init__(self, changes=None, **unknown_fields):
+ '''
+ changes : typing.Sequence[~ModifyOfferAccess]
+ '''
+ self.changes = [ModifyOfferAccess.from_json(o) for o in changes or []]
+
+
+
class ModifyUserSSHKeys(Type):
_toSchema = {'ssh_keys': 'ssh-keys', 'user': 'user'}
_toPy = {'ssh-keys': 'ssh_keys', 'user': 'user'}
def __init__(self, ssh_keys=None, user=None, **unknown_fields):
'''
- ssh_keys : typing.Sequence<+T_co>[str]
+ ssh_keys : typing.Sequence[str]
user : str
'''
self.ssh_keys = ssh_keys
_toPy = {'ha-members': 'ha_members', 'master': 'master', 'rs-members': 'rs_members'}
def __init__(self, ha_members=None, master=None, rs_members=None, **unknown_fields):
'''
- ha_members : typing.Sequence<+T_co>[~HAMember]<~HAMember>
+ ha_members : typing.Sequence[~HAMember]
master : HAMember
- rs_members : typing.Sequence<+T_co>[~Member]<~Member>
+ rs_members : typing.Sequence[~Member]
'''
self.ha_members = [HAMember.from_json(o) for o in ha_members or []]
self.master = HAMember.from_json(master) if master else None
config_type : str
device_index : int
disabled : bool
- dns_search_domains : typing.Sequence<+T_co>[str]
- dns_servers : typing.Sequence<+T_co>[str]
+ dns_search_domains : typing.Sequence[str]
+ dns_servers : typing.Sequence[str]
gateway_address : str
interface_name : str
interface_type : str
_toPy = {'addresses': 'addresses', 'interface-name': 'interface_name', 'mac-address': 'mac_address'}
def __init__(self, addresses=None, interface_name=None, mac_address=None, **unknown_fields):
'''
- addresses : typing.Sequence<+T_co>[~InterfaceAddress]<~InterfaceAddress>
+ addresses : typing.Sequence[~InterfaceAddress]
interface_name : str
mac_address : str
'''
_toPy = {'bindings': 'bindings', 'unit': 'unit'}
def __init__(self, bindings=None, unit=None, **unknown_fields):
'''
- bindings : typing.Sequence<+T_co>[str]
+ bindings : typing.Sequence[str]
unit : str
'''
self.bindings = bindings
def __init__(self, error=None, network_info=None, **unknown_fields):
'''
error : Error
- network_info : typing.Sequence<+T_co>[~NetworkInfo]<~NetworkInfo>
+ network_info : typing.Sequence[~NetworkInfo]
'''
self.error = Error.from_json(error) if error else None
self.network_info = [NetworkInfo.from_json(o) for o in network_info or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Mapping<~KT, +VT_co>[str, ~NetworkInfoResult]<~NetworkInfoResult>
+ results : typing.Mapping[str, ~NetworkInfoResult]
'''
self.results = results
_toPy = {'dns-nameservers': 'dns_nameservers', 'gateway': 'gateway', 'ip-addresses': 'ip_addresses', 'is-up': 'is_up', 'mac-address': 'mac_address', 'space': 'space'}
def __init__(self, dns_nameservers=None, gateway=None, ip_addresses=None, is_up=None, mac_address=None, space=None, **unknown_fields):
'''
- dns_nameservers : typing.Sequence<+T_co>[str]
+ dns_nameservers : typing.Sequence[str]
gateway : str
- ip_addresses : typing.Sequence<+T_co>[str]
+ ip_addresses : typing.Sequence[str]
is_up : bool
mac_address : str
space : str
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~NotifyWatchResult]<~NotifyWatchResult>
+ results : typing.Sequence[~NotifyWatchResult]
'''
self.results = [NotifyWatchResult.from_json(o) for o in results or []]
+class 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'}
'''
class_ : str
id_ : str
- labels : typing.Sequence<+T_co>[str]
+ labels : typing.Sequence[str]
machine : str
status : str
type_ : str
_toPy = {'patterns': 'patterns'}
def __init__(self, patterns=None, **unknown_fields):
'''
- patterns : typing.Sequence<+T_co>[str]
+ patterns : typing.Sequence[str]
'''
self.patterns = patterns
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~Payload]<~Payload>
+ results : typing.Sequence[~Payload]
'''
self.results = [Payload.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~PayloadResult]<~PayloadResult>
+ results : typing.Sequence[~PayloadResult]
'''
self.results = [PayloadResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~PhaseResult]<~PhaseResult>
+ results : typing.Sequence[~PhaseResult]
'''
self.results = [PhaseResult.from_json(o) for o in results or []]
+class PinApplicationResult(Type):
+ _toSchema = {'application_name': 'application-name', 'error': 'error'}
+ _toPy = {'application-name': 'application_name', 'error': 'error'}
+ def __init__(self, application_name=None, error=None, **unknown_fields):
+ '''
+ application_name : str
+ error : Error
+ '''
+ self.application_name = application_name
+ self.error = Error.from_json(error) if error else None
+
+
+
+class PinApplicationsResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~PinApplicationResult]
+ '''
+ self.results = [PinApplicationResult.from_json(o) for o in results or []]
+
+
+
+class PinnedLeadershipResult(Type):
+ _toSchema = {'result': 'result'}
+ _toPy = {'result': 'result'}
+ def __init__(self, result=None, **unknown_fields):
+ '''
+ result : typing.Sequence[str]
+ '''
+ self.result = result
+
+
+
class Placement(Type):
_toSchema = {'directive': 'directive', 'scope': 'scope'}
_toPy = {'directive': 'directive', 'scope': 'scope'}
+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, error=None, interfaces=None, machine_tag=None, **unknown_fields):
'''
error : Error
- interfaces : typing.Sequence<+T_co>[~ProviderInterfaceInfo]<~ProviderInterfaceInfo>
+ interfaces : typing.Sequence[~ProviderInterfaceInfo]
machine_tag : str
'''
self.error = Error.from_json(error) if error else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ProviderInterfaceInfoResult]<~ProviderInterfaceInfoResult>
+ results : typing.Sequence[~ProviderInterfaceInfoResult]
'''
self.results = [ProviderInterfaceInfoResult.from_json(o) for o in results or []]
error : Error
name : str
provider_id : str
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ subnets : typing.Sequence[~Subnet]
'''
self.error = Error.from_json(error) if error else None
self.name = name
def __init__(self, constraints=None, controller_config=None, endpoint_bindings=None, image_metadata=None, jobs=None, placement=None, series=None, subnets_to_zones=None, tags=None, volumes=None, **unknown_fields):
'''
constraints : Value
- controller_config : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- endpoint_bindings : typing.Mapping<~KT, +VT_co>[str, str]
- image_metadata : typing.Sequence<+T_co>[~CloudImageMetadata]<~CloudImageMetadata>
- jobs : typing.Sequence<+T_co>[str]
+ controller_config : typing.Mapping[str, typing.Any]
+ endpoint_bindings : typing.Mapping[str, str]
+ image_metadata : typing.Sequence[~CloudImageMetadata]
+ jobs : typing.Sequence[str]
placement : str
series : str
- subnets_to_zones : typing.Sequence<+T_co>[str]
- tags : typing.Mapping<~KT, +VT_co>[str, str]
- volumes : typing.Sequence<+T_co>[~VolumeParams]<~VolumeParams>
+ subnets_to_zones : typing.Sequence[str]
+ tags : typing.Mapping[str, str]
+ volumes : typing.Sequence[~VolumeParams]
'''
self.constraints = Value.from_json(constraints) if constraints else None
self.controller_config = controller_config
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ProvisioningInfoResult]<~ProvisioningInfoResult>
+ results : typing.Sequence[~ProvisioningInfoResult]
'''
self.results = [ProvisioningInfoResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ProxyConfigResult]<~ProxyConfigResult>
+ results : typing.Sequence[~ProxyConfigResult]
'''
self.results = [ProxyConfigResult.from_json(o) for o in results or []]
+class 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'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~RebootActionResult]<~RebootActionResult>
+ results : typing.Sequence[~RebootActionResult]
'''
self.results = [RebootActionResult.from_json(o) for o in results or []]
def __init__(self, region_name=None, value=None, **unknown_fields):
'''
region_name : str
- value : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ value : typing.Mapping[str, typing.Any]
'''
self.region_name = region_name
self.value = value
+class RegisterRemoteRelationArg(Type):
+ _toSchema = {'application_token': 'application-token', 'local_endpoint_name': 'local-endpoint-name', 'macaroons': 'macaroons', 'offer_uuid': 'offer-uuid', 'relation_token': 'relation-token', 'remote_endpoint': 'remote-endpoint', 'remote_space': 'remote-space', 'source_model_tag': 'source-model-tag'}
+ _toPy = {'application-token': 'application_token', 'local-endpoint-name': 'local_endpoint_name', 'macaroons': 'macaroons', 'offer-uuid': 'offer_uuid', 'relation-token': 'relation_token', 'remote-endpoint': 'remote_endpoint', 'remote-space': 'remote_space', 'source-model-tag': 'source_model_tag'}
+ def __init__(self, application_token=None, local_endpoint_name=None, macaroons=None, offer_uuid=None, relation_token=None, remote_endpoint=None, remote_space=None, source_model_tag=None, **unknown_fields):
+ '''
+ application_token : str
+ local_endpoint_name : str
+ macaroons : typing.Sequence[~Macaroon]
+ offer_uuid : str
+ relation_token : str
+ remote_endpoint : RemoteEndpoint
+ remote_space : RemoteSpace
+ source_model_tag : str
+ '''
+ self.application_token = application_token
+ self.local_endpoint_name = local_endpoint_name
+ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []]
+ self.offer_uuid = offer_uuid
+ self.relation_token = relation_token
+ self.remote_endpoint = RemoteEndpoint.from_json(remote_endpoint) if remote_endpoint else None
+ self.remote_space = RemoteSpace.from_json(remote_space) if remote_space else None
+ self.source_model_tag = source_model_tag
+
+
+
+class RegisterRemoteRelationArgs(Type):
+ _toSchema = {'relations': 'relations'}
+ _toPy = {'relations': 'relations'}
+ def __init__(self, relations=None, **unknown_fields):
+ '''
+ relations : typing.Sequence[~RegisterRemoteRelationArg]
+ '''
+ self.relations = [RegisterRemoteRelationArg.from_json(o) for o in relations or []]
+
+
+
+class RegisterRemoteRelationResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : RemoteRelationDetails
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = RemoteRelationDetails.from_json(result) if result else None
+
+
+
+class RegisterRemoteRelationResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~RegisterRemoteRelationResult]
+ '''
+ self.results = [RegisterRemoteRelationResult.from_json(o) for o in results or []]
+
+
+
class RelationChange(Type):
_toSchema = {'changedunits': 'changedunits', 'departedunits': 'departedunits', 'id_': 'id', 'life': 'life'}
_toPy = {'changedunits': 'changedunits', 'departedunits': 'departedunits', 'id': 'id_', 'life': 'life'}
def __init__(self, changedunits=None, departedunits=None, id_=None, life=None, **unknown_fields):
'''
- changedunits : typing.Mapping<~KT, +VT_co>[str, ~RelationUnitChange]<~RelationUnitChange>
- departedunits : typing.Sequence<+T_co>[str]
+ changedunits : typing.Mapping[str, ~RelationUnitChange]
+ departedunits : typing.Sequence[str]
id_ : int
life : str
'''
_toPy = {'relation-ids': 'relation_ids'}
def __init__(self, relation_ids=None, **unknown_fields):
'''
- relation_ids : typing.Sequence<+T_co>[int]
+ relation_ids : typing.Sequence[int]
'''
self.relation_ids = relation_ids
+class RelationLifeSuspendedStatusChange(Type):
+ _toSchema = {'key': 'key', 'life': 'life', 'suspended': 'suspended', 'suspended_reason': 'suspended-reason'}
+ _toPy = {'key': 'key', 'life': 'life', 'suspended': 'suspended', 'suspended-reason': 'suspended_reason'}
+ def __init__(self, key=None, life=None, suspended=None, suspended_reason=None, **unknown_fields):
+ '''
+ key : str
+ life : str
+ suspended : bool
+ suspended_reason : str
+ '''
+ self.key = key
+ self.life = life
+ self.suspended = suspended
+ self.suspended_reason = suspended_reason
+
+
+
+class RelationLifeSuspendedStatusWatchResult(Type):
+ _toSchema = {'changes': 'changes', 'error': 'error', 'watcher_id': 'watcher-id'}
+ _toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
+ def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
+ '''
+ changes : typing.Sequence[~RelationLifeSuspendedStatusChange]
+ error : Error
+ watcher_id : str
+ '''
+ self.changes = [RelationLifeSuspendedStatusChange.from_json(o) for o in changes or []]
+ self.error = Error.from_json(error) if error else None
+ self.watcher_id = watcher_id
+
+
+
class RelationResult(Type):
_toSchema = {'endpoint': 'endpoint', 'error': 'error', 'id_': 'id', 'key': 'key', 'life': 'life'}
_toPy = {'endpoint': 'endpoint', 'error': 'error', 'id': 'id_', 'key': 'key', 'life': 'life'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~RelationResult]<~RelationResult>
+ results : typing.Sequence[~RelationResult]
'''
self.results = [RelationResult.from_json(o) for o in results or []]
_toPy = {'endpoints': 'endpoints', 'id': 'id_', 'interface': 'interface', 'key': 'key', 'scope': 'scope'}
def __init__(self, endpoints=None, id_=None, interface=None, key=None, scope=None, **unknown_fields):
'''
- endpoints : typing.Sequence<+T_co>[~EndpointStatus]<~EndpointStatus>
+ endpoints : typing.Sequence[~EndpointStatus]
id_ : int
interface : str
key : str
+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'}
_toPy = {'settings': 'settings'}
def __init__(self, settings=None, **unknown_fields):
'''
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ settings : typing.Mapping[str, typing.Any]
'''
self.settings = settings
_toPy = {'relation-unit-pairs': 'relation_unit_pairs'}
def __init__(self, relation_unit_pairs=None, **unknown_fields):
'''
- relation_unit_pairs : typing.Sequence<+T_co>[~RelationUnitPair]<~RelationUnitPair>
+ relation_unit_pairs : typing.Sequence[~RelationUnitPair]
'''
self.relation_unit_pairs = [RelationUnitPair.from_json(o) for o in relation_unit_pairs or []]
def __init__(self, relation=None, settings=None, unit=None, **unknown_fields):
'''
relation : str
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
unit : str
'''
self.relation = relation
+class RelationUnitStatus(Type):
+ _toSchema = {'in_scope': 'in-scope', 'relation_tag': 'relation-tag', 'suspended': 'suspended'}
+ _toPy = {'in-scope': 'in_scope', 'relation-tag': 'relation_tag', 'suspended': 'suspended'}
+ def __init__(self, in_scope=None, relation_tag=None, suspended=None, **unknown_fields):
+ '''
+ in_scope : bool
+ relation_tag : str
+ suspended : bool
+ '''
+ self.in_scope = in_scope
+ self.relation_tag = relation_tag
+ self.suspended = suspended
+
+
+
+class RelationUnitStatusResult(Type):
+ _toSchema = {'error': 'error', 'results': 'results'}
+ _toPy = {'error': 'error', 'results': 'results'}
+ def __init__(self, error=None, results=None, **unknown_fields):
+ '''
+ error : Error
+ results : typing.Sequence[~RelationUnitStatus]
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.results = [RelationUnitStatus.from_json(o) for o in results or []]
+
+
+
+class RelationUnitStatusResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~RelationUnitStatusResult]
+ '''
+ self.results = [RelationUnitStatusResult.from_json(o) for o in results or []]
+
+
+
class RelationUnits(Type):
_toSchema = {'relation_units': 'relation-units'}
_toPy = {'relation-units': 'relation_units'}
def __init__(self, relation_units=None, **unknown_fields):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnit]<~RelationUnit>
+ relation_units : typing.Sequence[~RelationUnit]
'''
self.relation_units = [RelationUnit.from_json(o) for o in relation_units or []]
_toPy = {'changed': 'changed', 'departed': 'departed'}
def __init__(self, changed=None, departed=None, **unknown_fields):
'''
- changed : typing.Mapping<~KT, +VT_co>[str, ~UnitSettings]<~UnitSettings>
- departed : typing.Sequence<+T_co>[str]
+ changed : typing.Mapping[str, ~UnitSettings]
+ departed : typing.Sequence[str]
'''
self.changed = changed
self.departed = departed
_toPy = {'relation-units': 'relation_units'}
def __init__(self, relation_units=None, **unknown_fields):
'''
- relation_units : typing.Sequence<+T_co>[~RelationUnitSettings]<~RelationUnitSettings>
+ relation_units : typing.Sequence[~RelationUnitSettings]
'''
self.relation_units = [RelationUnitSettings.from_json(o) for o in relation_units or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~RelationUnitsWatchResult]<~RelationUnitsWatchResult>
+ results : typing.Sequence[~RelationUnitsWatchResult]
'''
self.results = [RelationUnitsWatchResult.from_json(o) for o in results or []]
+class RemoteApplication(Type):
+ _toSchema = {'is_consumer_proxy': 'is-consumer-proxy', 'life': 'life', 'macaroon': 'macaroon', 'model_uuid': 'model-uuid', 'name': 'name', 'offer_uuid': 'offer-uuid', 'status': 'status'}
+ _toPy = {'is-consumer-proxy': 'is_consumer_proxy', 'life': 'life', 'macaroon': 'macaroon', 'model-uuid': 'model_uuid', 'name': 'name', 'offer-uuid': 'offer_uuid', 'status': 'status'}
+ def __init__(self, is_consumer_proxy=None, life=None, macaroon=None, model_uuid=None, name=None, offer_uuid=None, status=None, **unknown_fields):
+ '''
+ is_consumer_proxy : bool
+ life : str
+ macaroon : Macaroon
+ model_uuid : str
+ name : str
+ offer_uuid : str
+ status : str
+ '''
+ self.is_consumer_proxy = is_consumer_proxy
+ self.life = life
+ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+ self.model_uuid = model_uuid
+ self.name = name
+ self.offer_uuid = offer_uuid
+ self.status = status
+
+
+
class RemoteApplicationChange(Type):
_toSchema = {'application_tag': 'application-tag', 'life': 'life', 'relations': 'relations'}
_toPy = {'application-tag': 'application_tag', 'life': 'life', 'relations': 'relations'}
'''
application_url : str
description : str
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
+ endpoints : typing.Sequence[~RemoteEndpoint]
icon_url_path : str
model_tag : str
name : str
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~RemoteApplicationInfoResult]<~RemoteApplicationInfoResult>
+ results : typing.Sequence[~RemoteApplicationInfoResult]
'''
self.results = [RemoteApplicationInfoResult.from_json(o) for o in results or []]
+class RemoteApplicationResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : RemoteApplication
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = RemoteApplication.from_json(result) if result else None
+
+
+
+class RemoteApplicationResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~RemoteApplicationResult]
+ '''
+ self.results = [RemoteApplicationResult.from_json(o) for o in results or []]
+
+
+
class RemoteApplicationStatus(Type):
_toSchema = {'application_name': 'application-name', 'application_url': 'application-url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'}
_toPy = {'application-name': 'application_name', 'application-url': 'application_url', 'endpoints': 'endpoints', 'err': 'err', 'life': 'life', 'relations': 'relations', 'status': 'status'}
'''
application_name : str
application_url : str
- endpoints : typing.Sequence<+T_co>[~RemoteEndpoint]<~RemoteEndpoint>
- err : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ endpoints : typing.Sequence[~RemoteEndpoint]
+ err : typing.Mapping[str, typing.Any]
life : str
- relations : typing.Sequence<+T_co>[str]
+ relations : typing.Sequence[str]
status : DetailedStatus
'''
self.application_name = application_name
+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'}
+class RemoteEntityTokenArg(Type):
+ _toSchema = {'tag': 'tag', 'token': 'token'}
+ _toPy = {'tag': 'tag', 'token': 'token'}
+ def __init__(self, tag=None, token=None, **unknown_fields):
+ '''
+ tag : str
+ token : str
+ '''
+ self.tag = tag
+ self.token = token
+
+
+
+class RemoteEntityTokenArgs(Type):
+ _toSchema = {'args': 'Args'}
+ _toPy = {'Args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~RemoteEntityTokenArg]
+ '''
+ self.args = [RemoteEntityTokenArg.from_json(o) for o in args or []]
+
+
+
+class RemoteRelation(Type):
+ _toSchema = {'application_name': 'application-name', 'endpoint': 'endpoint', 'id_': 'id', 'key': 'key', 'life': 'life', 'remote_application_name': 'remote-application-name', 'remote_endpoint_name': 'remote-endpoint-name', 'source_model_uuid': 'source-model-uuid', 'suspended': 'suspended'}
+ _toPy = {'application-name': 'application_name', 'endpoint': 'endpoint', 'id': 'id_', 'key': 'key', 'life': 'life', 'remote-application-name': 'remote_application_name', 'remote-endpoint-name': 'remote_endpoint_name', 'source-model-uuid': 'source_model_uuid', 'suspended': 'suspended'}
+ def __init__(self, application_name=None, endpoint=None, id_=None, key=None, life=None, remote_application_name=None, remote_endpoint_name=None, source_model_uuid=None, suspended=None, **unknown_fields):
+ '''
+ application_name : str
+ endpoint : RemoteEndpoint
+ id_ : int
+ key : str
+ life : str
+ remote_application_name : str
+ remote_endpoint_name : str
+ source_model_uuid : str
+ suspended : bool
+ '''
+ self.application_name = application_name
+ self.endpoint = RemoteEndpoint.from_json(endpoint) if endpoint else None
+ self.id_ = id_
+ self.key = key
+ self.life = life
+ self.remote_application_name = remote_application_name
+ self.remote_endpoint_name = remote_endpoint_name
+ self.source_model_uuid = source_model_uuid
+ self.suspended = suspended
+
+
+
class RemoteRelationChange(Type):
_toSchema = {'changed_units': 'changed-units', 'departed_units': 'departed-units', 'id_': 'id', 'life': 'life'}
_toPy = {'changed-units': 'changed_units', 'departed-units': 'departed_units', 'id': 'id_', 'life': 'life'}
def __init__(self, changed_units=None, departed_units=None, id_=None, life=None, **unknown_fields):
'''
- changed_units : typing.Mapping<~KT, +VT_co>[str, ~RemoteRelationUnitChange]<~RemoteRelationUnitChange>
- departed_units : typing.Sequence<+T_co>[str]
+ changed_units : typing.Mapping[str, ~RemoteRelationUnitChange]
+ departed_units : typing.Sequence[str]
id_ : int
life : str
'''
+class RemoteRelationChangeEvent(Type):
+ _toSchema = {'application_token': 'application-token', 'changed_units': 'changed-units', 'departed_units': 'departed-units', 'force_cleanup': 'force-cleanup', 'life': 'life', 'macaroons': 'macaroons', 'relation_token': 'relation-token', 'suspended': 'suspended', 'suspended_reason': 'suspended-reason'}
+ _toPy = {'application-token': 'application_token', 'changed-units': 'changed_units', 'departed-units': 'departed_units', 'force-cleanup': 'force_cleanup', 'life': 'life', 'macaroons': 'macaroons', 'relation-token': 'relation_token', 'suspended': 'suspended', 'suspended-reason': 'suspended_reason'}
+ def __init__(self, application_token=None, changed_units=None, departed_units=None, force_cleanup=None, life=None, macaroons=None, relation_token=None, suspended=None, suspended_reason=None, **unknown_fields):
+ '''
+ application_token : str
+ changed_units : typing.Sequence[~RemoteRelationUnitChange]
+ departed_units : typing.Sequence[int]
+ force_cleanup : bool
+ life : str
+ macaroons : typing.Sequence[~Macaroon]
+ relation_token : str
+ suspended : bool
+ suspended_reason : str
+ '''
+ self.application_token = application_token
+ self.changed_units = [RemoteRelationUnitChange.from_json(o) for o in changed_units or []]
+ self.departed_units = departed_units
+ self.force_cleanup = force_cleanup
+ self.life = life
+ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []]
+ self.relation_token = relation_token
+ self.suspended = suspended
+ self.suspended_reason = suspended_reason
+
+
+
+class RemoteRelationDetails(Type):
+ _toSchema = {'macaroon': 'macaroon', 'relation_token': 'relation-token'}
+ _toPy = {'macaroon': 'macaroon', 'relation-token': 'relation_token'}
+ def __init__(self, macaroon=None, relation_token=None, **unknown_fields):
+ '''
+ macaroon : Macaroon
+ relation_token : str
+ '''
+ self.macaroon = Macaroon.from_json(macaroon) if macaroon else None
+ self.relation_token = relation_token
+
+
+
+class RemoteRelationResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : RemoteRelation
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = RemoteRelation.from_json(result) if result else None
+
+
+
+class RemoteRelationResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~RemoteRelationResult]
+ '''
+ self.results = [RemoteRelationResult.from_json(o) for o in results or []]
+
+
+
+class RemoteRelationUnit(Type):
+ _toSchema = {'macaroons': 'macaroons', 'relation_token': 'relation-token', 'unit': 'unit'}
+ _toPy = {'macaroons': 'macaroons', 'relation-token': 'relation_token', 'unit': 'unit'}
+ def __init__(self, macaroons=None, relation_token=None, unit=None, **unknown_fields):
+ '''
+ macaroons : typing.Sequence[~Macaroon]
+ relation_token : str
+ unit : str
+ '''
+ self.macaroons = [Macaroon.from_json(o) for o in macaroons or []]
+ self.relation_token = relation_token
+ self.unit = unit
+
+
+
class RemoteRelationUnitChange(Type):
_toSchema = {'settings': 'settings', 'unit_id': 'unit-id'}
_toPy = {'settings': 'settings', 'unit-id': 'unit_id'}
def __init__(self, settings=None, unit_id=None, **unknown_fields):
'''
- settings : typing.Mapping<~KT, +VT_co>[str, typing.Any]
- unit_id : RemoteEntityId
+ settings : typing.Mapping[str, typing.Any]
+ unit_id : RemoteEntityId
+ '''
+ self.settings = settings
+ self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None
+
+
+
+class RemoteRelationUnits(Type):
+ _toSchema = {'relation_units': 'relation-units'}
+ _toPy = {'relation-units': 'relation_units'}
+ def __init__(self, relation_units=None, **unknown_fields):
+ '''
+ relation_units : typing.Sequence[~RemoteRelationUnit]
'''
- self.settings = settings
- self.unit_id = RemoteEntityId.from_json(unit_id) if unit_id else None
+ self.relation_units = [RemoteRelationUnit.from_json(o) for o in relation_units or []]
_toPy = {'changed': 'changed', 'initial': 'initial', 'removed': 'removed'}
def __init__(self, changed=None, initial=None, removed=None, **unknown_fields):
'''
- changed : typing.Sequence<+T_co>[~RemoteRelationChange]<~RemoteRelationChange>
+ changed : typing.Sequence[~RemoteRelationChange]
initial : bool
- removed : typing.Sequence<+T_co>[int]
+ removed : typing.Sequence[int]
'''
self.changed = [RemoteRelationChange.from_json(o) for o in changed or []]
self.initial = initial
+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'}
'''
cloud_type : str
name : str
- provider_attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ provider_attributes : typing.Mapping[str, typing.Any]
provider_id : str
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ subnets : typing.Sequence[~Subnet]
'''
self.cloud_type = cloud_type
self.name = name
+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'}
_toPy = {'urls': 'urls'}
def __init__(self, urls=None, **unknown_fields):
'''
- urls : typing.Sequence<+T_co>[~ResolveCharmResult]<~ResolveCharmResult>
+ urls : typing.Sequence[~ResolveCharmResult]
'''
self.urls = [ResolveCharmResult.from_json(o) for o in urls or []]
_toPy = {'references': 'references'}
def __init__(self, references=None, **unknown_fields):
'''
- references : typing.Sequence<+T_co>[str]
+ references : typing.Sequence[str]
'''
self.references = references
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ResolvedModeResult]<~ResolvedModeResult>
+ results : typing.Sequence[~ResolvedModeResult]
'''
self.results = [ResolvedModeResult.from_json(o) for o in results or []]
def __init__(self, errorresult=None, charm_store_resources=None, resources=None, unit_resources=None, **unknown_fields):
'''
errorresult : ErrorResult
- charm_store_resources : typing.Sequence<+T_co>[~CharmResource]<~CharmResource>
- resources : typing.Sequence<+T_co>[~Resource]<~Resource>
- unit_resources : typing.Sequence<+T_co>[~UnitResources]<~UnitResources>
+ charm_store_resources : typing.Sequence[~CharmResource]
+ resources : typing.Sequence[~Resource]
+ unit_resources : typing.Sequence[~UnitResources]
'''
self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
self.charm_store_resources = [CharmResource.from_json(o) for o in charm_store_resources or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ResourcesResult]<~ResourcesResult>
+ results : typing.Sequence[~ResourcesResult]
'''
self.results = [ResourcesResult.from_json(o) for o in results or []]
_toPy = {'members': 'members'}
def __init__(self, members=None, **unknown_fields):
'''
- members : typing.Sequence<+T_co>[~Member]<~Member>
+ members : typing.Sequence[~Member]
'''
self.members = [Member.from_json(o) for o in members or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~RetryStrategyResult]<~RetryStrategyResult>
+ results : typing.Sequence[~RetryStrategyResult]
'''
self.results = [RetryStrategyResult.from_json(o) for o in results or []]
+class RevokeCredentialArg(Type):
+ _toSchema = {'force': 'force', 'tag': 'tag'}
+ _toPy = {'force': 'force', 'tag': 'tag'}
+ def __init__(self, force=None, tag=None, **unknown_fields):
+ '''
+ force : bool
+ tag : str
+ '''
+ self.force = force
+ self.tag = tag
+
+
+
+class RevokeCredentialArgs(Type):
+ _toSchema = {'credentials': 'credentials'}
+ _toPy = {'credentials': 'credentials'}
+ def __init__(self, credentials=None, **unknown_fields):
+ '''
+ credentials : typing.Sequence[~RevokeCredentialArg]
+ '''
+ self.credentials = [RevokeCredentialArg.from_json(o) for o in credentials or []]
+
+
+
class RunParams(Type):
_toSchema = {'applications': 'applications', 'commands': 'commands', 'machines': 'machines', 'timeout': 'timeout', 'units': 'units'}
_toPy = {'applications': 'applications', 'commands': 'commands', 'machines': 'machines', 'timeout': 'timeout', 'units': 'units'}
def __init__(self, applications=None, commands=None, machines=None, timeout=None, units=None, **unknown_fields):
'''
- applications : typing.Sequence<+T_co>[str]
+ applications : typing.Sequence[str]
commands : str
- machines : typing.Sequence<+T_co>[str]
+ machines : typing.Sequence[str]
timeout : int
- units : typing.Sequence<+T_co>[str]
+ units : typing.Sequence[str]
'''
self.applications = applications
self.commands = commands
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~SSHAddressResult]<~SSHAddressResult>
+ results : typing.Sequence[~SSHAddressResult]
'''
self.results = [SSHAddressResult.from_json(o) for o in results or []]
_toPy = {'addresses': 'addresses', 'error': 'error'}
def __init__(self, addresses=None, error=None, **unknown_fields):
'''
- addresses : typing.Sequence<+T_co>[str]
+ addresses : typing.Sequence[str]
error : Error
'''
self.addresses = addresses
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~SSHAddressesResult]<~SSHAddressesResult>
+ results : typing.Sequence[~SSHAddressesResult]
'''
self.results = [SSHAddressesResult.from_json(o) for o in results or []]
_toPy = {'entity-keys': 'entity_keys'}
def __init__(self, entity_keys=None, **unknown_fields):
'''
- entity_keys : typing.Sequence<+T_co>[~SSHHostKeys]<~SSHHostKeys>
+ entity_keys : typing.Sequence[~SSHHostKeys]
'''
self.entity_keys = [SSHHostKeys.from_json(o) for o in entity_keys or []]
_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
def __init__(self, error=None, public_keys=None, **unknown_fields):
'''
error : Error
- public_keys : typing.Sequence<+T_co>[str]
+ public_keys : typing.Sequence[str]
'''
self.error = Error.from_json(error) if error else None
self.public_keys = public_keys
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~SSHPublicKeysResult]<~SSHPublicKeysResult>
+ results : typing.Sequence[~SSHPublicKeysResult]
'''
self.results = [SSHPublicKeysResult.from_json(o) for o in results or []]
+class ScaleApplicationInfo(Type):
+ _toSchema = {'num_units': 'num-units'}
+ _toPy = {'num-units': 'num_units'}
+ def __init__(self, num_units=None, **unknown_fields):
+ '''
+ num_units : int
+ '''
+ self.num_units = num_units
+
+
+
+class ScaleApplicationParams(Type):
+ _toSchema = {'application_tag': 'application-tag', 'scale': 'scale', 'scale_change': 'scale-change'}
+ _toPy = {'application-tag': 'application_tag', 'scale': 'scale', 'scale-change': 'scale_change'}
+ def __init__(self, application_tag=None, scale=None, scale_change=None, **unknown_fields):
+ '''
+ application_tag : str
+ scale : int
+ scale_change : int
+ '''
+ self.application_tag = application_tag
+ self.scale = scale
+ self.scale_change = scale_change
+
+
+
+class ScaleApplicationResult(Type):
+ _toSchema = {'error': 'error', 'info': 'info'}
+ _toPy = {'error': 'error', 'info': 'info'}
+ def __init__(self, error=None, info=None, **unknown_fields):
+ '''
+ error : Error
+ info : ScaleApplicationInfo
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.info = ScaleApplicationInfo.from_json(info) if info else None
+
+
+
+class ScaleApplicationResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~ScaleApplicationResult]
+ '''
+ self.results = [ScaleApplicationResult.from_json(o) for o in results or []]
+
+
+
+class ScaleApplicationsParams(Type):
+ _toSchema = {'applications': 'applications'}
+ _toPy = {'applications': 'applications'}
+ def __init__(self, applications=None, **unknown_fields):
+ '''
+ applications : typing.Sequence[~ScaleApplicationParams]
+ '''
+ self.applications = [ScaleApplicationParams.from_json(o) for o in applications or []]
+
+
+
class SerializedModel(Type):
_toSchema = {'bytes_': 'bytes', 'charms': 'charms', 'tools': 'tools'}
_toPy = {'bytes': 'bytes_', 'charms': 'charms', 'tools': 'tools'}
def __init__(self, bytes_=None, charms=None, tools=None, **unknown_fields):
'''
- bytes_ : typing.Sequence<+T_co>[int]
- charms : typing.Sequence<+T_co>[str]
- tools : typing.Sequence<+T_co>[~SerializedModelTools]<~SerializedModelTools>
+ bytes_ : typing.Sequence[int]
+ charms : typing.Sequence[str]
+ tools : typing.Sequence[~SerializedModelTools]
'''
self.bytes_ = bytes_
self.charms = charms
application_revision : SerializedModelResourceRevision
charmstore_revision : SerializedModelResourceRevision
name : str
- unit_revisions : typing.Mapping<~KT, +VT_co>[str, ~SerializedModelResourceRevision]<~SerializedModelResourceRevision>
+ unit_revisions : typing.Mapping[str, ~SerializedModelResourceRevision]
'''
self.application = application
self.application_revision = SerializedModelResourceRevision.from_json(application_revision) if application_revision else None
+class SetExternalControllerInfoParams(Type):
+ _toSchema = {'info': 'info'}
+ _toPy = {'info': 'info'}
+ def __init__(self, info=None, **unknown_fields):
+ '''
+ info : ExternalControllerInfo
+ '''
+ self.info = ExternalControllerInfo.from_json(info) if info else None
+
+
+
+class SetExternalControllersInfoParams(Type):
+ _toSchema = {'controllers': 'controllers'}
+ _toPy = {'controllers': 'controllers'}
+ def __init__(self, controllers=None, **unknown_fields):
+ '''
+ controllers : typing.Sequence[~SetExternalControllerInfoParams]
+ '''
+ self.controllers = [SetExternalControllerInfoParams.from_json(o) for o in controllers or []]
+
+
+
class SetMachineBlockDevices(Type):
_toSchema = {'machine_block_devices': 'machine-block-devices'}
_toPy = {'machine-block-devices': 'machine_block_devices'}
def __init__(self, machine_block_devices=None, **unknown_fields):
'''
- machine_block_devices : typing.Sequence<+T_co>[~MachineBlockDevices]<~MachineBlockDevices>
+ machine_block_devices : typing.Sequence[~MachineBlockDevices]
'''
self.machine_block_devices = [MachineBlockDevices.from_json(o) for o in machine_block_devices or []]
_toPy = {'config': 'config', 'tag': 'tag'}
def __init__(self, config=None, tag=None, **unknown_fields):
'''
- config : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ config : typing.Sequence[~NetworkConfig]
tag : str
'''
self.config = [NetworkConfig.from_json(o) for o in config or []]
_toPy = {'machine-addresses': 'machine_addresses'}
def __init__(self, machine_addresses=None, **unknown_fields):
'''
- machine_addresses : typing.Sequence<+T_co>[~MachineAddresses]<~MachineAddresses>
+ machine_addresses : typing.Sequence[~MachineAddresses]
'''
self.machine_addresses = [MachineAddresses.from_json(o) for o in machine_addresses or []]
_toPy = {'config': 'config'}
def __init__(self, config=None, **unknown_fields):
'''
- config : typing.Sequence<+T_co>[~ModelDefaultValues]<~ModelDefaultValues>
+ config : typing.Sequence[~ModelDefaultValues]
'''
self.config = [ModelDefaultValues.from_json(o) for o in config or []]
+class SetModelEnvironVersion(Type):
+ _toSchema = {'model_tag': 'model-tag', 'version': 'version'}
+ _toPy = {'model-tag': 'model_tag', 'version': 'version'}
+ def __init__(self, model_tag=None, version=None, **unknown_fields):
+ '''
+ model_tag : str
+ version : int
+ '''
+ self.model_tag = model_tag
+ self.version = version
+
+
+
+class SetModelEnvironVersions(Type):
+ _toSchema = {'models': 'models'}
+ _toPy = {'models': 'models'}
+ def __init__(self, models=None, **unknown_fields):
+ '''
+ models : typing.Sequence[~SetModelEnvironVersion]
+ '''
+ self.models = [SetModelEnvironVersion.from_json(o) for o in models or []]
+
+
+
class SetPayloadStatusArg(Type):
_toSchema = {'entity': 'Entity', 'status': 'status'}
_toPy = {'Entity': 'entity', 'status': 'status'}
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~SetPayloadStatusArg]<~SetPayloadStatusArg>
+ args : typing.Sequence[~SetPayloadStatusArg]
'''
self.args = [SetPayloadStatusArg.from_json(o) for o in args or []]
+class SetPodSpecParams(Type):
+ _toSchema = {'specs': 'specs'}
+ _toPy = {'specs': 'specs'}
+ def __init__(self, specs=None, **unknown_fields):
+ '''
+ specs : typing.Sequence[~EntityString]
+ '''
+ self.specs = [EntityString.from_json(o) for o in specs or []]
+
+
+
+class SetProfileArg(Type):
+ _toSchema = {'entity': 'entity', 'profiles': 'profiles'}
+ _toPy = {'entity': 'entity', 'profiles': 'profiles'}
+ def __init__(self, entity=None, profiles=None, **unknown_fields):
+ '''
+ entity : Entity
+ profiles : typing.Sequence[str]
+ '''
+ self.entity = Entity.from_json(entity) if entity else None
+ self.profiles = profiles
+
+
+
+class SetProfileArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~SetProfileArg]
+ '''
+ self.args = [SetProfileArg.from_json(o) for o in args or []]
+
+
+
+class SetProfileUpgradeCompleteArg(Type):
+ _toSchema = {'entity': 'entity', 'message': 'message'}
+ _toPy = {'entity': 'entity', 'message': 'message'}
+ def __init__(self, entity=None, message=None, **unknown_fields):
+ '''
+ entity : Entity
+ message : str
+ '''
+ self.entity = Entity.from_json(entity) if entity else None
+ self.message = message
+
+
+
+class SetProfileUpgradeCompleteArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~SetProfileUpgradeCompleteArg]
+ '''
+ self.args = [SetProfileUpgradeCompleteArg.from_json(o) for o in args or []]
+
+
+
class SetStatus(Type):
_toSchema = {'entities': 'entities'}
_toPy = {'entities': 'entities'}
def __init__(self, entities=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~EntityStatusArgs]<~EntityStatusArgs>
+ entities : typing.Sequence[~EntityStatusArgs]
'''
self.entities = [EntityStatusArgs.from_json(o) for o in entities or []]
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~SetStatusArg]<~SetStatusArg>
+ args : typing.Sequence[~SetStatusArg]
'''
self.args = [SetStatusArg.from_json(o) for o in args or []]
def __init__(self, error=None, settings=None, **unknown_fields):
'''
error : Error
- settings : typing.Mapping<~KT, +VT_co>[str, str]
+ settings : typing.Mapping[str, str]
'''
self.error = Error.from_json(error) if error else None
self.settings = settings
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~SettingsResult]<~SettingsResult>
+ results : typing.Sequence[~SettingsResult]
'''
self.results = [SettingsResult.from_json(o) for o in results or []]
_toPy = {'claims': 'claims'}
def __init__(self, claims=None, **unknown_fields):
'''
- claims : typing.Sequence<+T_co>[~SingularClaim]<~SingularClaim>
+ claims : typing.Sequence[~SingularClaim]
'''
self.claims = [SingularClaim.from_json(o) for o in claims or []]
'''
error : Error
name : str
- subnets : typing.Sequence<+T_co>[~Subnet]<~Subnet>
+ subnets : typing.Sequence[~Subnet]
'''
self.error = Error.from_json(error) if error else None
self.name = name
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~SpaceResult]<~SpaceResult>
+ results : typing.Sequence[~SpaceResult]
'''
self.results = [SpaceResult.from_json(o) for o in results or []]
_toPy = {'requests': 'requests'}
def __init__(self, requests=None, **unknown_fields):
'''
- requests : typing.Sequence<+T_co>[~StatusHistoryRequest]<~StatusHistoryRequest>
+ requests : typing.Sequence[~StatusHistoryRequest]
'''
self.requests = [StatusHistoryRequest.from_json(o) for o in requests or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StatusHistoryResult]<~StatusHistoryResult>
+ results : typing.Sequence[~StatusHistoryResult]
'''
self.results = [StatusHistoryResult.from_json(o) for o in results or []]
_toPy = {'patterns': 'patterns'}
def __init__(self, patterns=None, **unknown_fields):
'''
- patterns : typing.Sequence<+T_co>[str]
+ patterns : typing.Sequence[str]
'''
self.patterns = patterns
_toPy = {'data': 'data', 'error': 'error', 'id': 'id_', 'info': 'info', 'life': 'life', 'since': 'since', 'status': 'status'}
def __init__(self, data=None, error=None, id_=None, info=None, life=None, since=None, status=None, **unknown_fields):
'''
- data : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ data : typing.Mapping[str, typing.Any]
error : Error
id_ : str
info : str
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StatusResult]<~StatusResult>
+ results : typing.Sequence[~StatusResult]
'''
self.results = [StatusResult.from_json(o) for o in results or []]
_toPy = {'ids': 'ids'}
def __init__(self, ids=None, **unknown_fields):
'''
- ids : typing.Sequence<+T_co>[~StorageAttachmentId]<~StorageAttachmentId>
+ ids : typing.Sequence[~StorageAttachmentId]
'''
self.ids = [StorageAttachmentId.from_json(o) for o in ids or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StorageAttachmentIdsResult]<~StorageAttachmentIdsResult>
+ results : typing.Sequence[~StorageAttachmentIdsResult]
'''
self.results = [StorageAttachmentIdsResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StorageAttachmentResult]<~StorageAttachmentResult>
+ results : typing.Sequence[~StorageAttachmentResult]
'''
self.results = [StorageAttachmentResult.from_json(o) for o in results or []]
_toPy = {'attachments': 'attachments', 'kind': 'kind', 'owner-tag': 'owner_tag', 'persistent': 'persistent', 'status': 'status', 'storage-tag': 'storage_tag'}
def __init__(self, attachments=None, kind=None, owner_tag=None, persistent=None, status=None, storage_tag=None, **unknown_fields):
'''
- attachments : typing.Mapping<~KT, +VT_co>[str, ~StorageAttachmentDetails]<~StorageAttachmentDetails>
+ attachments : typing.Mapping[str, ~StorageAttachmentDetails]
kind : int
owner_tag : str
persistent : bool
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Sequence<+T_co>[~StorageDetails]<~StorageDetails>
+ result : typing.Sequence[~StorageDetails]
'''
self.error = Error.from_json(error) if error else None
self.result = [StorageDetails.from_json(o) for o in result or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StorageDetailsListResult]<~StorageDetailsListResult>
+ results : typing.Sequence[~StorageDetailsListResult]
'''
self.results = [StorageDetailsListResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StorageDetailsResult]<~StorageDetailsResult>
+ results : typing.Sequence[~StorageDetailsResult]
'''
self.results = [StorageDetailsResult.from_json(o) for o in results or []]
_toPy = {'filters': 'filters'}
def __init__(self, filters=None, **unknown_fields):
'''
- filters : typing.Sequence<+T_co>[~StorageFilter]<~StorageFilter>
+ filters : typing.Sequence[~StorageFilter]
'''
self.filters = [StorageFilter.from_json(o) for o in filters or []]
_toPy = {'attrs': 'attrs', 'name': 'name', 'provider': 'provider'}
def __init__(self, attrs=None, name=None, provider=None, **unknown_fields):
'''
- attrs : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ attrs : typing.Mapping[str, typing.Any]
name : str
provider : str
'''
_toPy = {'names': 'names', 'providers': 'providers'}
def __init__(self, names=None, providers=None, **unknown_fields):
'''
- names : typing.Sequence<+T_co>[str]
- providers : typing.Sequence<+T_co>[str]
+ names : typing.Sequence[str]
+ providers : typing.Sequence[str]
'''
self.names = names
self.providers = providers
_toPy = {'filters': 'filters'}
def __init__(self, filters=None, **unknown_fields):
'''
- filters : typing.Sequence<+T_co>[~StoragePoolFilter]<~StoragePoolFilter>
+ filters : typing.Sequence[~StoragePoolFilter]
'''
self.filters = [StoragePoolFilter.from_json(o) for o in filters or []]
def __init__(self, error=None, storage_pools=None, **unknown_fields):
'''
error : Error
- storage_pools : typing.Sequence<+T_co>[~StoragePool]<~StoragePool>
+ storage_pools : typing.Sequence[~StoragePool]
'''
self.error = Error.from_json(error) if error else None
self.storage_pools = [StoragePool.from_json(o) for o in storage_pools or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StoragePoolsResult]<~StoragePoolsResult>
+ results : typing.Sequence[~StoragePoolsResult]
'''
self.results = [StoragePoolsResult.from_json(o) for o in results or []]
_toPy = {'storages': 'storages'}
def __init__(self, storages=None, **unknown_fields):
'''
- storages : typing.Sequence<+T_co>[~StorageAddParams]<~StorageAddParams>
+ storages : typing.Sequence[~StorageAddParams]
'''
self.storages = [StorageAddParams.from_json(o) for o in storages or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StringBoolResult]<~StringBoolResult>
+ results : typing.Sequence[~StringBoolResult]
'''
self.results = [StringBoolResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StringResult]<~StringResult>
+ results : typing.Sequence[~StringResult]
'''
self.results = [StringResult.from_json(o) for o in results or []]
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Sequence<+T_co>[str]
+ result : typing.Sequence[str]
'''
self.error = Error.from_json(error) if error else None
self.result = result
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StringsResult]<~StringsResult>
+ results : typing.Sequence[~StringsResult]
'''
self.results = [StringsResult.from_json(o) for o in results or []]
_toPy = {'changes': 'changes', 'error': 'error', 'watcher-id': 'watcher_id'}
def __init__(self, changes=None, error=None, watcher_id=None, **unknown_fields):
'''
- changes : typing.Sequence<+T_co>[str]
+ changes : typing.Sequence[str]
error : Error
watcher_id : str
'''
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~StringsWatchResult]<~StringsWatchResult>
+ results : typing.Sequence[~StringsWatchResult]
+ '''
+ self.results = [StringsWatchResult.from_json(o) for o in results or []]
+
+
+
+class Subnet(Type):
+ _toSchema = {'cidr': 'cidr', 'life': 'life', 'provider_id': 'provider-id', 'space_tag': 'space-tag', 'status': 'status', 'vlan_tag': 'vlan-tag', 'zones': 'zones'}
+ _toPy = {'cidr': 'cidr', 'life': 'life', 'provider-id': 'provider_id', 'space-tag': 'space_tag', 'status': 'status', 'vlan-tag': 'vlan_tag', 'zones': 'zones'}
+ def __init__(self, cidr=None, life=None, provider_id=None, space_tag=None, status=None, vlan_tag=None, zones=None, **unknown_fields):
+ '''
+ cidr : str
+ life : str
+ provider_id : str
+ space_tag : str
+ status : str
+ vlan_tag : int
+ zones : typing.Sequence[str]
+ '''
+ self.cidr = cidr
+ self.life = life
+ self.provider_id = provider_id
+ self.space_tag = space_tag
+ self.status = status
+ self.vlan_tag = vlan_tag
+ self.zones = zones
+
+
+
+class SubnetsFilters(Type):
+ _toSchema = {'space_tag': 'space-tag', 'zone': 'zone'}
+ _toPy = {'space-tag': 'space_tag', 'zone': 'zone'}
+ def __init__(self, space_tag=None, zone=None, **unknown_fields):
+ '''
+ space_tag : str
+ zone : str
+ '''
+ self.space_tag = space_tag
+ self.zone = zone
+
+
+
+class TaggedCredential(Type):
+ _toSchema = {'credential': 'credential', 'tag': 'tag'}
+ _toPy = {'credential': 'credential', 'tag': 'tag'}
+ def __init__(self, credential=None, tag=None, **unknown_fields):
+ '''
+ credential : CloudCredential
+ tag : str
+ '''
+ self.credential = CloudCredential.from_json(credential) if credential else None
+ self.tag = tag
+
+
+
+class TaggedCredentials(Type):
+ _toSchema = {'credentials': 'credentials'}
+ _toPy = {'credentials': 'credentials'}
+ def __init__(self, credentials=None, **unknown_fields):
+ '''
+ credentials : typing.Sequence[~TaggedCredential]
'''
- self.results = [StringsWatchResult.from_json(o) for o in results or []]
+ self.credentials = [TaggedCredential.from_json(o) for o in credentials or []]
-class Subnet(Type):
- _toSchema = {'cidr': 'cidr', 'life': 'life', 'provider_id': 'provider-id', 'space_tag': 'space-tag', 'status': 'status', 'vlan_tag': 'vlan-tag', 'zones': 'zones'}
- _toPy = {'cidr': 'cidr', 'life': 'life', 'provider-id': 'provider_id', 'space-tag': 'space_tag', 'status': 'status', 'vlan-tag': 'vlan_tag', 'zones': 'zones'}
- def __init__(self, cidr=None, life=None, provider_id=None, space_tag=None, status=None, vlan_tag=None, zones=None, **unknown_fields):
+class TokenResult(Type):
+ _toSchema = {'error': 'error', 'token': 'token'}
+ _toPy = {'error': 'error', 'token': 'token'}
+ def __init__(self, error=None, token=None, **unknown_fields):
'''
- cidr : str
- life : str
- provider_id : str
- space_tag : str
- status : str
- vlan_tag : int
- zones : typing.Sequence<+T_co>[str]
+ error : Error
+ token : str
'''
- self.cidr = cidr
- self.life = life
- self.provider_id = provider_id
- self.space_tag = space_tag
- self.status = status
- self.vlan_tag = vlan_tag
- self.zones = zones
+ self.error = Error.from_json(error) if error else None
+ self.token = token
-class SubnetsFilters(Type):
- _toSchema = {'space_tag': 'space-tag', 'zone': 'zone'}
- _toPy = {'space-tag': 'space_tag', 'zone': 'zone'}
- def __init__(self, space_tag=None, zone=None, **unknown_fields):
+class TokenResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
'''
- space_tag : str
- zone : str
+ results : typing.Sequence[~TokenResult]
'''
- self.space_tag = space_tag
- self.zone = zone
+ self.results = [TokenResult.from_json(o) for o in results or []]
'''
disable_ssl_hostname_verification : bool
error : Error
- tools : typing.Sequence<+T_co>[~Tools]<~Tools>
+ tools : typing.Sequence[~Tools]
'''
self.disable_ssl_hostname_verification = disable_ssl_hostname_verification
self.error = Error.from_json(error) if error else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ToolsResult]<~ToolsResult>
+ results : typing.Sequence[~ToolsResult]
'''
self.results = [ToolsResult.from_json(o) for o in results or []]
_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 []]
_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 []]
def __init__(self, error=None, info=None, **unknown_fields):
'''
error : Error
- info : typing.Sequence<+T_co>[~NetworkConfig]<~NetworkConfig>
+ info : typing.Sequence[~NetworkConfig]
'''
self.error = Error.from_json(error) if error else None
self.info = [NetworkConfig.from_json(o) for o in info or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~UnitNetworkConfigResult]<~UnitNetworkConfigResult>
+ results : typing.Sequence[~UnitNetworkConfigResult]
'''
self.results = [UnitNetworkConfigResult.from_json(o) for o in results or []]
+class UnitRefreshResult(Type):
+ _toSchema = {'error': 'Error', 'life': 'Life', 'resolved': 'Resolved'}
+ _toPy = {'Error': 'error', 'Life': 'life', 'Resolved': 'resolved'}
+ def __init__(self, error=None, life=None, resolved=None, **unknown_fields):
+ '''
+ error : Error
+ life : str
+ resolved : str
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.life = life
+ self.resolved = resolved
+
+
+
+class UnitRefreshResults(Type):
+ _toSchema = {'results': 'Results'}
+ _toPy = {'Results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~UnitRefreshResult]
+ '''
+ self.results = [UnitRefreshResult.from_json(o) for o in results or []]
+
+
+
class UnitResourceResult(Type):
_toSchema = {'errorresult': 'ErrorResult', 'resource': 'resource'}
_toPy = {'ErrorResult': 'errorresult', 'resource': 'resource'}
def __init__(self, entity=None, download_progress=None, resources=None, **unknown_fields):
'''
entity : Entity
- download_progress : typing.Mapping<~KT, +VT_co>[str, int]
- resources : typing.Sequence<+T_co>[~Resource]<~Resource>
+ download_progress : typing.Mapping[str, int]
+ resources : typing.Sequence[~Resource]
'''
self.entity = Entity.from_json(entity) if entity else None
self.download_progress = download_progress
def __init__(self, errorresult=None, resources=None, **unknown_fields):
'''
errorresult : ErrorResult
- resources : typing.Sequence<+T_co>[~UnitResourceResult]<~UnitResourceResult>
+ resources : typing.Sequence[~UnitResourceResult]
'''
self.errorresult = ErrorResult.from_json(errorresult) if errorresult else None
self.resources = [UnitResourceResult.from_json(o) for o in resources or []]
charm : str
leader : bool
machine : str
- opened_ports : typing.Sequence<+T_co>[str]
+ opened_ports : typing.Sequence[str]
public_address : str
- subordinates : typing.Mapping<~KT, +VT_co>[str, ~UnitStatus]<~UnitStatus>
+ subordinates : typing.Mapping[str, ~UnitStatus]
workload_status : DetailedStatus
workload_version : str
'''
_toPy = {'args': 'args'}
def __init__(self, args=None, **unknown_fields):
'''
- args : typing.Sequence<+T_co>[~UnitNetworkConfig]<~UnitNetworkConfig>
+ args : typing.Sequence[~UnitNetworkConfig]
'''
self.args = [UnitNetworkConfig.from_json(o) for o in args or []]
+class UnitsResolved(Type):
+ _toSchema = {'all_': 'all', 'retry': 'retry', 'tags': 'tags'}
+ _toPy = {'all': 'all_', 'retry': 'retry', 'tags': 'tags'}
+ def __init__(self, all_=None, retry=None, tags=None, **unknown_fields):
+ '''
+ all_ : bool
+ retry : bool
+ tags : Entities
+ '''
+ self.all_ = all_
+ self.retry = retry
+ self.tags = Entities.from_json(tags) if tags else None
+
+
+
class UnsetModelDefaults(Type):
_toSchema = {'keys': 'keys'}
_toPy = {'keys': 'keys'}
def __init__(self, keys=None, **unknown_fields):
'''
- keys : typing.Sequence<+T_co>[~ModelUnsetKeys]<~ModelUnsetKeys>
+ keys : typing.Sequence[~ModelUnsetKeys]
'''
self.keys = [ModelUnsetKeys.from_json(o) for o in keys or []]
+class UpdateApplicationServiceArg(Type):
+ _toSchema = {'addresses': 'addresses', 'application_tag': 'application-tag', 'provider_id': 'provider-id'}
+ _toPy = {'addresses': 'addresses', 'application-tag': 'application_tag', 'provider-id': 'provider_id'}
+ def __init__(self, addresses=None, application_tag=None, provider_id=None, **unknown_fields):
+ '''
+ addresses : typing.Sequence[~Address]
+ application_tag : str
+ provider_id : str
+ '''
+ self.addresses = [Address.from_json(o) for o in addresses or []]
+ self.application_tag = application_tag
+ self.provider_id = provider_id
+
+
+
+class UpdateApplicationServiceArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~UpdateApplicationServiceArg]
+ '''
+ self.args = [UpdateApplicationServiceArg.from_json(o) for o in args or []]
+
+
+
+class UpdateApplicationUnitArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~UpdateApplicationUnits]
+ '''
+ self.args = [UpdateApplicationUnits.from_json(o) for o in args or []]
+
+
+
+class UpdateApplicationUnits(Type):
+ _toSchema = {'application_tag': 'application-tag', 'units': 'units'}
+ _toPy = {'application-tag': 'application_tag', 'units': 'units'}
+ def __init__(self, application_tag=None, units=None, **unknown_fields):
+ '''
+ application_tag : str
+ units : typing.Sequence[~ApplicationUnitParams]
+ '''
+ self.application_tag = application_tag
+ self.units = [ApplicationUnitParams.from_json(o) for o in units or []]
+
+
+
class UpdateBehavior(Type):
_toSchema = {'enable_os_refresh_update': 'enable-os-refresh-update', 'enable_os_upgrade': 'enable-os-upgrade'}
_toPy = {'enable-os-refresh-update': 'enable_os_refresh_update', 'enable-os-upgrade': 'enable_os_upgrade'}
_toPy = {'credentials': 'credentials'}
def __init__(self, credentials=None, **unknown_fields):
'''
- credentials : typing.Sequence<+T_co>[~UpdateCloudCredential]<~UpdateCloudCredential>
+ credentials : typing.Sequence[~UpdateCloudCredential]
'''
self.credentials = [UpdateCloudCredential.from_json(o) for o in credentials or []]
+class UpdateCredentialArgs(Type):
+ _toSchema = {'credentials': 'credentials', 'force': 'force'}
+ _toPy = {'credentials': 'credentials', 'force': 'force'}
+ def __init__(self, credentials=None, force=None, **unknown_fields):
+ '''
+ credentials : typing.Sequence[~TaggedCredential]
+ force : bool
+ '''
+ self.credentials = [TaggedCredential.from_json(o) for o in credentials or []]
+ self.force = force
+
+
+
+class UpdateCredentialModelResult(Type):
+ _toSchema = {'errors': 'errors', 'name': 'name', 'uuid': 'uuid'}
+ _toPy = {'errors': 'errors', 'name': 'name', 'uuid': 'uuid'}
+ def __init__(self, errors=None, name=None, uuid=None, **unknown_fields):
+ '''
+ errors : typing.Sequence[~ErrorResult]
+ name : str
+ uuid : str
+ '''
+ self.errors = [ErrorResult.from_json(o) for o in errors or []]
+ self.name = name
+ self.uuid = uuid
+
+
+
+class UpdateCredentialResult(Type):
+ _toSchema = {'error': 'error', 'models': 'models', 'tag': 'tag'}
+ _toPy = {'error': 'error', 'models': 'models', 'tag': 'tag'}
+ def __init__(self, error=None, models=None, tag=None, **unknown_fields):
+ '''
+ error : Error
+ models : typing.Sequence[~UpdateCredentialModelResult]
+ tag : str
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.models = [UpdateCredentialModelResult.from_json(o) for o in models or []]
+ self.tag = tag
+
+
+
+class UpdateCredentialResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~UpdateCredentialResult]
+ '''
+ self.results = [UpdateCredentialResult.from_json(o) for o in results or []]
+
+
+
+class UpdateSeriesArg(Type):
+ _toSchema = {'force': 'force', 'series': 'series', 'tag': 'tag'}
+ _toPy = {'force': 'force', 'series': 'series', 'tag': 'tag'}
+ def __init__(self, force=None, series=None, tag=None, **unknown_fields):
+ '''
+ force : bool
+ series : str
+ tag : Entity
+ '''
+ self.force = force
+ self.series = series
+ self.tag = Entity.from_json(tag) if tag else None
+
+
+
+class UpdateSeriesArgs(Type):
+ _toSchema = {'args': 'args'}
+ _toPy = {'args': 'args'}
+ def __init__(self, args=None, **unknown_fields):
+ '''
+ args : typing.Sequence[~UpdateSeriesArg]
+ '''
+ self.args = [UpdateSeriesArg.from_json(o) for o in args or []]
+
+
+
class UpgradeMongoParams(Type):
_toSchema = {'target': 'target'}
_toPy = {'target': 'target'}
+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'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~UserAccessResult]<~UserAccessResult>
+ results : typing.Sequence[~UserAccessResult]
'''
self.results = [UserAccessResult.from_json(o) for o in results or []]
_toPy = {'user-clouds': 'user_clouds'}
def __init__(self, user_clouds=None, **unknown_fields):
'''
- user_clouds : typing.Sequence<+T_co>[~UserCloud]<~UserCloud>
+ user_clouds : typing.Sequence[~UserCloud]
'''
self.user_clouds = [UserCloud.from_json(o) for o in user_clouds or []]
_toPy = {'entities': 'entities', 'include-disabled': 'include_disabled'}
def __init__(self, entities=None, include_disabled=None, **unknown_fields):
'''
- entities : typing.Sequence<+T_co>[~Entity]<~Entity>
+ entities : typing.Sequence[~Entity]
include_disabled : bool
'''
self.entities = [Entity.from_json(o) for o in entities or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~UserInfoResult]<~UserInfoResult>
+ results : typing.Sequence[~UserInfoResult]
'''
self.results = [UserInfoResult.from_json(o) for o in results or []]
_toPy = {'user-models': 'user_models'}
def __init__(self, user_models=None, **unknown_fields):
'''
- user_models : typing.Sequence<+T_co>[~UserModel]<~UserModel>
+ user_models : typing.Sequence[~UserModel]
'''
self.user_models = [UserModel.from_json(o) for o in user_models or []]
instance_type : str
mem : int
root_disk : int
- spaces : typing.Sequence<+T_co>[str]
- tags : typing.Sequence<+T_co>[str]
+ spaces : typing.Sequence[str]
+ tags : typing.Sequence[str]
virt_type : str
'''
self.arch = arch
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VersionResult]<~VersionResult>
+ results : typing.Sequence[~VersionResult]
'''
self.results = [VersionResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VolumeAttachmentParamsResult]<~VolumeAttachmentParamsResult>
+ results : typing.Sequence[~VolumeAttachmentParamsResult]
'''
self.results = [VolumeAttachmentParamsResult.from_json(o) for o in results or []]
+class VolumeAttachmentPlan(Type):
+ _toSchema = {'block_device': 'block-device', 'life': 'life', 'machine_tag': 'machine-tag', 'plan_info': 'plan-info', 'volume_tag': 'volume-tag'}
+ _toPy = {'block-device': 'block_device', 'life': 'life', 'machine-tag': 'machine_tag', 'plan-info': 'plan_info', 'volume-tag': 'volume_tag'}
+ def __init__(self, block_device=None, life=None, machine_tag=None, plan_info=None, volume_tag=None, **unknown_fields):
+ '''
+ block_device : BlockDevice
+ life : str
+ machine_tag : str
+ plan_info : VolumeAttachmentPlanInfo
+ volume_tag : str
+ '''
+ self.block_device = BlockDevice.from_json(block_device) if block_device else None
+ self.life = life
+ self.machine_tag = machine_tag
+ self.plan_info = VolumeAttachmentPlanInfo.from_json(plan_info) if plan_info else None
+ self.volume_tag = volume_tag
+
+
+
+class VolumeAttachmentPlanInfo(Type):
+ _toSchema = {'device_attributes': 'device-attributes', 'device_type': 'device-type'}
+ _toPy = {'device-attributes': 'device_attributes', 'device-type': 'device_type'}
+ def __init__(self, device_attributes=None, device_type=None, **unknown_fields):
+ '''
+ device_attributes : typing.Mapping[str, str]
+ device_type : str
+ '''
+ self.device_attributes = device_attributes
+ self.device_type = device_type
+
+
+
+class VolumeAttachmentPlanResult(Type):
+ _toSchema = {'error': 'error', 'result': 'result'}
+ _toPy = {'error': 'error', 'result': 'result'}
+ def __init__(self, error=None, result=None, **unknown_fields):
+ '''
+ error : Error
+ result : VolumeAttachmentPlan
+ '''
+ self.error = Error.from_json(error) if error else None
+ self.result = VolumeAttachmentPlan.from_json(result) if result else None
+
+
+
+class VolumeAttachmentPlanResults(Type):
+ _toSchema = {'results': 'results'}
+ _toPy = {'results': 'results'}
+ def __init__(self, results=None, **unknown_fields):
+ '''
+ results : typing.Sequence[~VolumeAttachmentPlanResult]
+ '''
+ self.results = [VolumeAttachmentPlanResult.from_json(o) for o in results or []]
+
+
+
+class VolumeAttachmentPlans(Type):
+ _toSchema = {'volume_plans': 'volume-plans'}
+ _toPy = {'volume-plans': 'volume_plans'}
+ def __init__(self, volume_plans=None, **unknown_fields):
+ '''
+ volume_plans : typing.Sequence[~VolumeAttachmentPlan]
+ '''
+ self.volume_plans = [VolumeAttachmentPlan.from_json(o) for o in volume_plans or []]
+
+
+
class VolumeAttachmentResult(Type):
_toSchema = {'error': 'error', 'result': 'result'}
_toPy = {'error': 'error', 'result': 'result'}
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VolumeAttachmentResult]<~VolumeAttachmentResult>
+ results : typing.Sequence[~VolumeAttachmentResult]
'''
self.results = [VolumeAttachmentResult.from_json(o) for o in results or []]
_toPy = {'volume-attachments': 'volume_attachments'}
def __init__(self, volume_attachments=None, **unknown_fields):
'''
- volume_attachments : typing.Sequence<+T_co>[~VolumeAttachment]<~VolumeAttachment>
+ volume_attachments : typing.Sequence[~VolumeAttachment]
'''
self.volume_attachments = [VolumeAttachment.from_json(o) for o in volume_attachments or []]
def __init__(self, info=None, machine_attachments=None, status=None, storage=None, volume_tag=None, **unknown_fields):
'''
info : VolumeInfo
- machine_attachments : typing.Mapping<~KT, +VT_co>[str, ~VolumeAttachmentInfo]<~VolumeAttachmentInfo>
+ machine_attachments : typing.Mapping[str, ~VolumeAttachmentInfo]
status : EntityStatus
storage : StorageDetails
volume_tag : str
def __init__(self, error=None, result=None, **unknown_fields):
'''
error : Error
- result : typing.Sequence<+T_co>[~VolumeDetails]<~VolumeDetails>
+ result : typing.Sequence[~VolumeDetails]
'''
self.error = Error.from_json(error) if error else None
self.result = [VolumeDetails.from_json(o) for o in result or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VolumeDetailsListResult]<~VolumeDetailsListResult>
+ results : typing.Sequence[~VolumeDetailsListResult]
'''
self.results = [VolumeDetailsListResult.from_json(o) for o in results or []]
_toPy = {'machines': 'machines'}
def __init__(self, machines=None, **unknown_fields):
'''
- machines : typing.Sequence<+T_co>[str]
+ machines : typing.Sequence[str]
'''
self.machines = machines
_toPy = {'filters': 'filters'}
def __init__(self, filters=None, **unknown_fields):
'''
- filters : typing.Sequence<+T_co>[~VolumeFilter]<~VolumeFilter>
+ filters : typing.Sequence[~VolumeFilter]
'''
self.filters = [VolumeFilter.from_json(o) for o in filters or []]
def __init__(self, attachment=None, attributes=None, provider=None, size=None, tags=None, volume_tag=None, **unknown_fields):
'''
attachment : VolumeAttachmentParams
- attributes : typing.Mapping<~KT, +VT_co>[str, typing.Any]
+ attributes : typing.Mapping[str, typing.Any]
provider : str
size : int
- tags : typing.Mapping<~KT, +VT_co>[str, str]
+ tags : typing.Mapping[str, str]
volume_tag : str
'''
self.attachment = VolumeAttachmentParams.from_json(attachment) if attachment else None
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VolumeParamsResult]<~VolumeParamsResult>
+ results : typing.Sequence[~VolumeParamsResult]
'''
self.results = [VolumeParamsResult.from_json(o) for o in results or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~VolumeResult]<~VolumeResult>
+ results : typing.Sequence[~VolumeResult]
'''
self.results = [VolumeResult.from_json(o) for o in results or []]
_toPy = {'volumes': 'volumes'}
def __init__(self, volumes=None, **unknown_fields):
'''
- volumes : typing.Sequence<+T_co>[~Volume]<~Volume>
+ volumes : typing.Sequence[~Volume]
'''
self.volumes = [Volume.from_json(o) for o in volumes or []]
_toPy = {'params': 'params'}
def __init__(self, params=None, **unknown_fields):
'''
- params : typing.Sequence<+T_co>[~WatchContainer]<~WatchContainer>
+ params : typing.Sequence[~WatchContainer]
'''
self.params = [WatchContainer.from_json(o) for o in params or []]
_toPy = {'results': 'results'}
def __init__(self, results=None, **unknown_fields):
'''
- results : typing.Sequence<+T_co>[~ZoneResult]<~ZoneResult>
+ results : typing.Sequence[~ZoneResult]
'''
self.results = [ZoneResult.from_json(o) for o in results or []]
'''Replace auto-generated classes with our own, where necessary.
'''
-from . import _client, _definitions, overrides
-
+from . import _client, _definitions, overrides # isort:skip
for o in overrides.__all__:
- if not "Facade" in o:
+ if "Facade" not in o:
# Override stuff in _definitions, which is all imported
# into _client. We Monkey patch both the original class and
# the ref in _client (import shenanigans are fun!)
if not a.startswith('_'):
setattr(c_type, a, getattr(o_type, a))
-from ._client import * # noqa
+from ._client import * # noqa, isort:skip
+import asyncio
import base64
-import io
import json
import logging
-import os
-import random
-import shlex
import ssl
-import string
-import subprocess
+import urllib.request
import weakref
-import websockets
from concurrent.futures import CancelledError
from http.client import HTTPSConnection
-from pathlib import Path
-
-import asyncio
-import yaml
-from juju import tag, utils
+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.errors import JujuError, JujuAPIError, JujuConnectionError
from juju.utils import IdQueue
-log = logging.getLogger("websocket")
+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 inspecttion of
+ 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.
self.connection = weakref.ref(connection)
self.reconnecting = asyncio.Lock(loop=connection.loop)
self.close_called = asyncio.Event(loop=connection.loop)
- self.receiver_stopped = asyncio.Event(loop=connection.loop)
- self.pinger_stopped = asyncio.Event(loop=connection.loop)
- self.receiver_stopped.set()
- self.pinger_stopped.set()
@property
def status(self):
return self.DISCONNECTING
# connection closed uncleanly (we didn't call connection.close)
- if self.receiver_stopped.is_set() or not connection.ws.open:
+ stopped = connection._receiver_task.stopped.is_set()
+ if stopped or not connection.ws.open:
return self.ERROR
# everything is fine!
client = await Connection.connect(
api_endpoint, model_uuid, username, password, cacert)
- # Connect using a controller/model name
- client = await Connection.connect_model('local.local:default')
-
- # Connect to the currently active model
- client = await Connection.connect_current()
-
Note: Any connection method or constructor can accept an optional `loop`
argument to override the default event loop from `asyncio.get_event_loop`.
"""
- DEFAULT_FRAME_SIZE = 'default_frame_size'
MAX_FRAME_SIZE = 2**22
"Maximum size for a single frame. Defaults to 4MB."
- def __init__(
- self, endpoint, uuid, username, password, cacert=None,
- macaroons=None, loop=None, max_frame_size=DEFAULT_FRAME_SIZE):
- self.endpoint = endpoint
- self._endpoint = endpoint
+ @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 macaroons:
- self.macaroons = macaroons
- self.username = ''
- self.password = ''
- else:
- self.macaroons = []
- self.username = username
- self.password = password
- self.cacert = cacert
- self._cacert = cacert
+ 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 self.DEFAULT_FRAME_SIZE:
+ 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 ssl.create_default_context(
purpose=ssl.Purpose.CLIENT_AUTH, cadata=cert)
- async def open(self):
+ async def _open(self, endpoint, cacert):
if self.uuid:
- url = "wss://{}/model/{}/api".format(self.endpoint, self.uuid)
+ url = "wss://{}/model/{}/api".format(endpoint, self.uuid)
else:
- url = "wss://{}/api".format(self.endpoint)
-
- kw = dict()
- kw['ssl'] = self._get_ssl(self.cacert)
- kw['loop'] = self.loop
- kw['max_size'] = self.max_frame_size
- self.addr = url
- self.ws = await websockets.connect(url, **kw)
- self.loop.create_task(self.receiver())
- self.monitor.receiver_stopped.clear()
- log.info("Driver connected to juju %s", url)
- self.monitor.close_called.clear()
- return self
+ 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.monitor.pinger_stopped.wait()
- await self.monitor.receiver_stopped.wait()
+ 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):
+ 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):
+ async def _receiver(self):
try:
while self.is_open:
result = await utils.run_with_interrupt(
# make pending listeners aware of the error
await self.messages.put_all(e)
raise
- finally:
- self.monitor.receiver_stopped.set()
- async def pinger(self):
+ 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.
loop=self.loop)
if self.monitor.close_called.is_set():
break
- finally:
- self.monitor.pinger_stopped.set()
- return
+ 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:
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
# 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)
- result = await self.recv(msg['request-id'])
+ 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 JujuAPIError(result)
+ raise errors.JujuAPIError(result)
if 'response' not in result:
# This may never happen
if 'results' in result['response']:
# Check for errors in a result list.
- errors = []
+ # 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'):
- errors.append(res['error']['message'])
- if errors:
- raise JujuError(errors)
+ err_results.append(res['error']['message'])
+ if err_results:
+ raise errors.JujuError(err_results)
elif result['response'].get('error', {}).get('message'):
- raise JujuError(result['response']['error']['message'])
+ raise errors.JujuError(result['response']['error']['message'])
return result
- def http_headers(self):
+ 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.username:
+ if not self.usertag:
return {}
creds = u'{}:{}'.format(
- tag.user(self.username),
+ self.usertag,
self.password or ''
)
token = base64.b64encode(creds.encode())
"/model/{}".format(self.uuid)
if self.uuid else ""
)
- return conn, self.http_headers(), path
+ 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.endpoint,
- self.uuid,
- self.username,
- self.password,
- self.cacert,
- self.macaroons,
- self.loop,
- self.max_frame_size,
- )
+ 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,
- None,
- self.username,
- self.password,
- self.cacert,
- self.macaroons,
- self.loop,
+ 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 _try_endpoint(self, endpoint, cacert):
- success = False
- result = None
- new_endpoints = []
-
- self.endpoint = endpoint
- self.cacert = cacert
- await self.open()
- try:
- result = await self.login()
- if 'discharge-required-error' in result['response']:
- log.info('Macaroon discharge required, disconnecting')
- else:
- # successful login!
- log.info('Authenticated')
- success = True
- except JujuAPIError as e:
- if e.error_code != 'redirection required':
- raise
- log.info('Controller requested redirect')
- redirect_info = await self.redirect_info()
- redir_cacert = redirect_info['ca-cert']
- new_endpoints = [
- ("{value}:{port}".format(**s), redir_cacert)
- for servers in redirect_info['servers']
- for s in servers if s["scope"] == 'public'
- ]
- finally:
- if not success:
- await self.close()
- return success, result, new_endpoints
-
async def reconnect(self):
""" Force a reconnection.
"""
return
async with monitor.reconnecting:
await self.close()
- await self._connect()
-
- async def _connect(self):
- endpoints = [(self._endpoint, self._cacert)]
- while endpoints:
- _endpoint, _cacert = endpoints.pop(0)
- success, result, new_endpoints = await self._try_endpoint(
- _endpoint, _cacert)
- if success:
- break
- endpoints.extend(new_endpoints)
- else:
- # ran out of endpoints without a successful login
- raise Exception("Couldn't authenticate to {}".format(
- self._endpoint))
-
- response = result['response']
- self.info = response.copy()
- self.build_facades(response.get('facades', {}))
- self.loop.create_task(self.pinger())
- self.monitor.pinger_stopped.clear()
+ await self._connect_with_login([(self.endpoint, self.cacert)])
+
+ async def _connect(self, endpoints):
+ if len(endpoints) == 0:
+ raise errors.JujuConnectionError('no endpoints to connect to')
+
+ async def _try_endpoint(endpoint, cacert, delay):
+ if delay:
+ await asyncio.sleep(delay)
+ return await self._open(endpoint, cacert)
+
+ # Try all endpoints in parallel, with slight increasing delay (+100ms
+ # for each subsequent endpoint); the delay allows us to prefer the
+ # earlier endpoints over the latter. Use first successful connection.
+ tasks = [self.loop.create_task(_try_endpoint(endpoint, cacert,
+ 0.1 * i))
+ for i, (endpoint, cacert) in enumerate(endpoints)]
+ for attempt in range(self._retries + 1):
+ for task in asyncio.as_completed(tasks, loop=self.loop):
+ try:
+ result = await task
+ break
+ except ConnectionError:
+ continue # ignore; try another endpoint
+ else:
+ _endpoints_str = ', '.join([endpoint
+ for endpoint, cacert in endpoints])
+ if attempt < self._retries:
+ log.debug('Retrying connection to endpoints: {}; '
+ 'attempt {} of {}'.format(_endpoints_str,
+ attempt + 1,
+ self._retries + 1))
+ await asyncio.sleep((attempt + 1) * self._retry_backoff)
+ continue
+ else:
+ raise errors.JujuConnectionError(
+ 'Unable to connect to any endpoint: '
+ '{}'.format(_endpoints_str))
+ # only executed if inner loop's else did not continue
+ # (i.e., inner loop did break due to successful connection)
+ break
+ for task in tasks:
+ task.cancel()
+ self.ws = result[0]
+ self.addr = result[1]
+ self.endpoint = result[2]
+ self.cacert = result[3]
+ self._receiver_task.start()
+ log.debug("Driver connected to juju %s", self.addr)
+ self.monitor.close_called.clear()
- @classmethod
- async def connect(
- cls, endpoint, uuid, username, password, cacert=None,
- macaroons=None, loop=None, max_frame_size=None):
+ 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.
-
- """
- client = cls(endpoint, uuid, username, password, cacert, macaroons,
- loop, max_frame_size)
- await client._connect()
- return client
-
- @classmethod
- async def connect_current(cls, loop=None, max_frame_size=None):
- """Connect to the currently active model.
-
+ :return: The response field of login response JSON object.
"""
- jujudata = JujuData()
-
- controller_name = jujudata.current_controller()
- if not controller_name:
- raise JujuConnectionError('No current controller')
-
- model_name = jujudata.current_model()
-
- return await cls.connect_model(
- '{}:{}'.format(controller_name, model_name), loop, max_frame_size)
-
- @classmethod
- async def connect_current_controller(cls, loop=None, max_frame_size=None):
- """Connect to the currently active controller.
-
- """
- jujudata = JujuData()
- controller_name = jujudata.current_controller()
- if not controller_name:
- raise JujuConnectionError('No current controller')
-
- return await cls.connect_controller(controller_name, loop,
- max_frame_size)
-
- @classmethod
- async def connect_controller(cls, controller_name, loop=None,
- max_frame_size=None):
- """Connect to a controller by name.
-
- """
- jujudata = JujuData()
- controller = jujudata.controllers()[controller_name]
- endpoint = controller['api-endpoints'][0]
- cacert = controller.get('ca-cert')
- accounts = jujudata.accounts()[controller_name]
- username = accounts['user']
- password = accounts.get('password')
- macaroons = get_macaroons(controller_name) if not password else None
-
- return await cls.connect(
- endpoint, None, username, password, cacert, macaroons, loop,
- max_frame_size)
-
- @classmethod
- async def connect_model(cls, model, loop=None, max_frame_size=None):
- """Connect to a model by name.
-
- :param str model: [<controller>:]<model>
+ 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()
- """
- jujudata = JujuData()
+ 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()
- if ':' in model:
- # explicit controller given
- controller_name, model_name = model.split(':')
- else:
- # use the current controller if one isn't explicitly given
- controller_name = jujudata.current_controller()
- model_name = model
-
- accounts = jujudata.accounts()[controller_name]
- username = accounts['user']
- # model name must include a user prefix, so add it if it doesn't
- if '/' not in model_name:
- model_name = '{}/{}'.format(username, model_name)
-
- controller = jujudata.controllers()[controller_name]
- endpoint = controller['api-endpoints'][0]
- cacert = controller.get('ca-cert')
- password = accounts.get('password')
- models = jujudata.models()[controller_name]
- model_uuid = models['models'][model_name]['uuid']
- macaroons = get_macaroons(controller_name) if not password else None
-
- return await cls.connect(
- endpoint, model_uuid, username, password, cacert, macaroons, loop,
- max_frame_size)
-
- def build_facades(self, facades):
+ def _build_facades(self, facades):
self.facades.clear()
for facade in facades:
self.facades[facade['name']] = facade['versions'][-1]
async def login(self):
- username = self.username
- if username and not username.startswith('user-'):
- username = 'user-{}'.format(username)
-
- result = await self.rpc({
- "type": "Admin",
- "request": "Login",
- "version": 3,
- "params": {
- "auth-tag": username,
- "credentials": self.password,
- "nonce": "".join(random.sample(string.printable, 12)),
- "macaroons": self.macaroons
- }})
- return result
+ 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]
- async def redirect_info(self):
try:
- result = await self.rpc({
+ return await self.rpc({
"type": "Admin",
- "request": "RedirectInfo",
+ "request": "Login",
"version": 3,
+ "params": params,
})
- except JujuAPIError as e:
- if e.message == 'not redirected':
- return None
- raise
- return result['response']
-
-
-class JujuData:
- def __init__(self):
- self.path = os.environ.get('JUJU_DATA') or '~/.local/share/juju'
- self.path = os.path.abspath(os.path.expanduser(self.path))
-
- def current_controller(self):
- cmd = shlex.split('juju list-controllers --format yaml')
- output = subprocess.check_output(cmd)
- output = yaml.safe_load(output)
- return output.get('current-controller', '')
-
- def current_model(self, controller_name=None):
- if not controller_name:
- controller_name = self.current_controller()
- models = self.models()[controller_name]
- if 'current-model' not in models:
- raise JujuError('No current model')
- return models['current-model']
-
- def controllers(self):
- return self._load_yaml('controllers.yaml', 'controllers')
-
- def models(self):
- return self._load_yaml('models.yaml', 'controllers')
-
- def accounts(self):
- return self._load_yaml('accounts.yaml', 'controllers')
-
- def _load_yaml(self, filename, key):
- filepath = os.path.join(self.path, filename)
- with io.open(filepath, 'rt') as f:
- return yaml.safe_load(f)[key]
+ 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
-def get_macaroons(controller_name=None):
- """Decode and return macaroons from default ~/.go-cookies
+class _Task:
+ def __init__(self, task, loop):
+ self.stopped = asyncio.Event(loop=loop)
+ self.stopped.set()
+ self.task = task
+ self.loop = loop
- """
- cookie_files = []
- if controller_name:
- cookie_files.append('~/.local/share/juju/cookies/{}.json'.format(
- controller_name))
- cookie_files.append('~/.go-cookies')
- for cookie_file in cookie_files:
- cookie_file = Path(cookie_file).expanduser()
- if cookie_file.exists():
+ def start(self):
+ async def run():
try:
- cookies = json.loads(cookie_file.read_text())
- break
- except (OSError, ValueError):
- log.warn("Couldn't load macaroons from %s", cookie_file)
- return []
- else:
- log.warn("Couldn't load macaroons from %s", ' or '.join(cookie_files))
- return []
-
- base64_macaroons = [
- c['Value'] for c in cookies
- if c['Name'].startswith('macaroon-') and c['Value']
- ]
-
- return [
- json.loads(base64.b64decode(value).decode('utf-8'))
- for value in base64_macaroons
- ]
+ 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
+import asyncio
+import logging
+import copy
+
+import macaroonbakery.httpbakery as httpbakery
+from juju.client.connection import Connection
+from juju.client.gocookies import go_to_py_cookie, GoCookieJar
+from juju.client.jujudata import FileJujuData
+from juju.errors import JujuConnectionError, JujuError
+
+log = logging.getLogger('connector')
+
+
+class NoConnectionException(Exception):
+ '''Raised by Connector when the connection method is called
+ and there is no current connection.'''
+ pass
+
+
+class Connector:
+ '''This class abstracts out a reconnectable client that can connect
+ to controllers and models found in the Juju data files.
+ '''
+ def __init__(
+ self,
+ loop=None,
+ max_frame_size=None,
+ bakery_client=None,
+ jujudata=None,
+ ):
+ '''Initialize a connector that will use the given parameters
+ by default when making a new connection'''
+ self.max_frame_size = max_frame_size
+ self.loop = loop or asyncio.get_event_loop()
+ self.bakery_client = bakery_client
+ self._connection = None
+ self.controller_name = None
+ self.model_name = None
+ self.jujudata = jujudata or FileJujuData()
+
+ def is_connected(self):
+ '''Report whether there is a currently connected controller or not'''
+ return self._connection is not None
+
+ def connection(self):
+ '''Return the current connection; raises an exception if there
+ is no current connection.'''
+ if not self.is_connected():
+ raise NoConnectionException('not connected')
+ return self._connection
+
+ async def connect(self, **kwargs):
+ """Connect to an arbitrary Juju model.
+
+ kwargs are passed through to Connection.connect()
+ """
+ kwargs.setdefault('loop', self.loop)
+ kwargs.setdefault('max_frame_size', self.max_frame_size)
+ kwargs.setdefault('bakery_client', self.bakery_client)
+ if 'macaroons' in kwargs:
+ if not kwargs['bakery_client']:
+ kwargs['bakery_client'] = httpbakery.Client()
+ if not kwargs['bakery_client'].cookies:
+ kwargs['bakery_client'].cookies = GoCookieJar()
+ jar = kwargs['bakery_client'].cookies
+ for macaroon in kwargs.pop('macaroons'):
+ jar.set_cookie(go_to_py_cookie(macaroon))
+ self._connection = await Connection.connect(**kwargs)
+
+ async def disconnect(self):
+ """Shut down the watcher task and close websockets.
+ """
+ if self._connection:
+ log.debug('Closing model connection')
+ await self._connection.close()
+ self._connection = None
+
+ async def connect_controller(self, controller_name=None):
+ """Connect to a controller by name. If the name is empty, it
+ connect to the current controller.
+ """
+ if not controller_name:
+ controller_name = self.jujudata.current_controller()
+ if not controller_name:
+ raise JujuConnectionError('No current controller')
+
+ controller = self.jujudata.controllers()[controller_name]
+ # TODO change Connection so we can pass all the endpoints
+ # instead of just the first.
+ endpoint = controller['api-endpoints'][0]
+ accounts = self.jujudata.accounts().get(controller_name, {})
+
+ await self.connect(
+ endpoint=endpoint,
+ uuid=None,
+ username=accounts.get('user'),
+ password=accounts.get('password'),
+ cacert=controller.get('ca-cert'),
+ bakery_client=self.bakery_client_for_controller(controller_name),
+ )
+ self.controller_name = controller_name
+
+ async def connect_model(self, model_name=None):
+ """Connect to a model by name. If either controller or model
+ parts of the name are empty, the current controller and/or model
+ will be used.
+
+ :param str model: <controller>:<model>
+ """
+
+ try:
+ controller_name, model_name = self.jujudata.parse_model(model_name)
+ controller = self.jujudata.controllers().get(controller_name)
+ except JujuError as e:
+ raise JujuConnectionError(e.message) from e
+ if controller is None:
+ raise JujuConnectionError('Controller {} not found'.format(
+ controller_name))
+ # TODO change Connection so we can pass all the endpoints
+ # instead of just the first one.
+ endpoint = controller['api-endpoints'][0]
+ account = self.jujudata.accounts().get(controller_name, {})
+ models = self.jujudata.models().get(controller_name, {}).get('models',
+ {})
+ if model_name not in models:
+ raise JujuConnectionError('Model not found: {}'.format(model_name))
+
+ # TODO if there's no record for the required model name, connect
+ # to the controller to find out the model's uuid, then connect
+ # to that. This will let connect_model work with models that
+ # haven't necessarily synced with the local juju data,
+ # and also remove the need for base.CleanModel to
+ # subclass JujuData.
+ await self.connect(
+ endpoint=endpoint,
+ uuid=models[model_name]['uuid'],
+ username=account.get('user'),
+ password=account.get('password'),
+ cacert=controller.get('ca-cert'),
+ bakery_client=self.bakery_client_for_controller(controller_name),
+ )
+ self.controller_name = controller_name
+ self.model_name = controller_name + ':' + model_name
+
+ def bakery_client_for_controller(self, controller_name):
+ '''Make a copy of the bakery client with a the appropriate controller's
+ cookiejar in it.
+ '''
+ bakery_client = self.bakery_client
+ if bakery_client:
+ bakery_client = copy.copy(bakery_client)
+ else:
+ bakery_client = httpbakery.Client()
+ bakery_client.cookies = self.jujudata.cookies_for_controller(
+ controller_name)
+ return bakery_client
import argparse
import builtins
-from collections import defaultdict
import functools
-from glob import glob
import json
import keyword
-from pathlib import Path
import pprint
import re
import textwrap
-from typing import Sequence, Mapping, TypeVar, Any, Union
import typing
+from collections import defaultdict
+from glob import glob
+from pathlib import Path
+from typing import Any, Mapping, Sequence, TypeVar, Union
from . import codegen
_marker = object()
-JUJU_VERSION = re.compile('[0-9]+\.[0-9-]+[\.\-][0-9a-z]+(\.[0-9]+)?')
+JUJU_VERSION = re.compile(r'[0-9]+\.[0-9-]+[\.\-][0-9a-z]+(\.[0-9]+)?')
# Workaround for https://bugs.launchpad.net/juju/+bug/1683906
NAUGHTY_CLASSES = ['ClientFacade', 'Client', 'FullStatus', 'ModelStatusInfo',
- 'ModelInfo']
+ 'ModelInfo', 'ApplicationDeploy']
# Map basic types to Python's typing with a callable
# 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.
+ """
+ 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)
- 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
+ facade = getattr(CLIENTS[str(_version)], name)
+ return facade
+ except (KeyError, AttributeError):
+ continue
+ else:
+ raise ImportError("No supported version for facade: "
+ "{}".format(name))
'''
@param connection: initialized Connection object.
"""
- version = connection.facades[cls.__name__[:-6]]
+ facade_name = cls.__name__
+ if not facade_name.endswith('Facade'):
+ raise TypeError('Unexpected class name: {}'.format(facade_name))
+ facade_name = facade_name[:-len('Facade')]
+ version = connection.facades.get(facade_name)
+ if version is None:
+ raise Exception('No facade {} in facades {}'.format(facade_name,
+ connection.facades))
c = lookup_facade(cls.__name__, version)
c = c()
return self[refname]
+
_types = TypeRegistry()
_registry = KindRegistry()
CLASSES = {}
def strcast(kind, keep_builtins=False):
- if issubclass(kind, typing.GenericMeta):
- return str(kind)[1:]
- if str(kind).startswith('~'):
- return str(kind)[1:]
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
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 not name in NAUGHTY_CLASSES:
+ if name in capture and name not in NAUGHTY_CLASSES:
continue
args = Args(kind)
# Write Factory class for _client.py
pprint.pformat(args.SchemaToPyMapping(), width=999),
", " if args else "",
args.as_kwargs(),
- textwrap.indent(args.get_doc(), INDENT * 2))
- ]
- assignments = args._get_arg_str(False, False)
+ textwrap.indent(args.get_doc(), INDENT * 2))]
if not args:
source.append("{}pass".format(INDENT * 2))
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))
+ 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]
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))
+ 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))
+ source.append("{}self.{} = {}".format(INDENT * 2,
+ arg_name,
+ arg_name))
elif issubclass(arg_type, typing.Mapping):
value_type = (
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))
+ 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))
- 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))
+ source.append("{}self.{} = {}".format(INDENT * 2,
+ arg_name,
+ arg_name))
else:
- source.append("{}self.{} = {}".format(INDENT * 2, arg_name, arg_name))
+ source.append("{}self.{} = {}".format(INDENT * 2,
+ arg_name,
+ arg_name))
source = "\n".join(source)
capture.clear(name)
return decorator
-def makeFunc(cls, name, params, result, async=True):
+def makeFunc(cls, name, params, result, _async=True):
INDENT = " "
args = Args(params)
assignments = []
source = """
@ReturnMapping({rettype})
-{async}def {name}(self{argsep}{args}):
+{_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)
+ msg = dict(type='{cls.name}',
+ request='{name}',
+ version={cls.version},
+ params=_params)
{assignments}
- reply = {await}self.rpc(msg)
+ reply = {_await}self.rpc(msg)
return reply
"""
- fsource = source.format(async="async " if async else "",
+ fsource = source.format(_async="async " if _async else "",
name=name,
argsep=", " if args else "",
args=args,
docstring=textwrap.indent(args.get_doc(), INDENT),
cls=cls,
assignments=assignments,
- await="await " if async else "")
+ _await="await " if _async else "")
ns = _getns()
exec(fsource, ns)
func = ns[name]
return d
def to_json(self):
- return json.dumps(self.serialize())
+ return json.dumps(self.serialize(), cls=TypeEncoder, sort_keys=True)
class Schema(dict):
if not defs:
return
for d, data in defs.items():
- if d in _registry and not d in NAUGHTY_CLASSES:
+ if d in _registry and d not in NAUGHTY_CLASSES:
continue
node = self.deref(data, d)
kind = node.get("type")
return captures
+
def setup():
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--schema", default="juju/client/schemas*")
options = parser.parse_args()
return options
+
def main():
options = setup()
write_definitions(captures, options, last_version)
write_client(captures, options)
+
if __name__ == '__main__':
main()
--- /dev/null
+import datetime
+import http.cookiejar as cookiejar
+import json
+import time
+
+import pyrfc3339
+
+
+class GoCookieJar(cookiejar.FileCookieJar):
+ '''A CookieJar implementation that reads and writes cookies
+ to the cookiejar format as understood by the Go package
+ github.com/juju/persistent-cookiejar.'''
+ def _really_load(self, f, filename, ignore_discard, ignore_expires):
+ '''Implement the _really_load method called by FileCookieJar
+ to implement the actual cookie loading'''
+ data = json.load(f) or []
+ now = time.time()
+ for cookie in map(go_to_py_cookie, data):
+ if not ignore_expires and cookie.is_expired(now):
+ continue
+ self.set_cookie(cookie)
+
+ def save(self, filename=None, ignore_discard=False, ignore_expires=False):
+ '''Implement the FileCookieJar abstract method.'''
+ if filename is None:
+ if self.filename is not None:
+ filename = self.filename
+ else:
+ raise ValueError(cookiejar.MISSING_FILENAME_TEXT)
+
+ # TODO: obtain file lock, read contents of file, and merge with
+ # current content.
+ go_cookies = []
+ now = time.time()
+ for cookie in self:
+ if not ignore_discard and cookie.discard:
+ continue
+ if not ignore_expires and cookie.is_expired(now):
+ continue
+ go_cookies.append(py_to_go_cookie(cookie))
+ with open(filename, "w") as f:
+ f.write(json.dumps(go_cookies))
+
+
+def go_to_py_cookie(go_cookie):
+ '''Convert a Go-style JSON-unmarshaled cookie into a Python cookie'''
+ expires = None
+ if go_cookie.get('Expires') is not None:
+ t = pyrfc3339.parse(go_cookie['Expires'])
+ expires = t.timestamp()
+ return cookiejar.Cookie(
+ version=0,
+ name=go_cookie['Name'],
+ value=go_cookie['Value'],
+ port=None,
+ port_specified=False,
+ # Unfortunately Python cookies don't record the original
+ # host that the cookie came from, so we'll just use Domain
+ # for that purpose, and record that the domain was specified,
+ # even though it probably was not. This means that
+ # we won't correctly record the CanonicalHost entry
+ # when writing the cookie file after reading it.
+ domain=go_cookie['Domain'],
+ domain_specified=not go_cookie['HostOnly'],
+ domain_initial_dot=False,
+ path=go_cookie['Path'],
+ path_specified=True,
+ secure=go_cookie['Secure'],
+ expires=expires,
+ discard=False,
+ comment=None,
+ comment_url=None,
+ rest=None,
+ rfc2109=False,
+ )
+
+
+def py_to_go_cookie(py_cookie):
+ '''Convert a python cookie to the JSON-marshalable Go-style cookie form.'''
+ # TODO (perhaps):
+ # HttpOnly
+ # Creation
+ # LastAccess
+ # Updated
+ # not done properly: CanonicalHost.
+ go_cookie = {
+ 'Name': py_cookie.name,
+ 'Value': py_cookie.value,
+ 'Domain': py_cookie.domain,
+ 'HostOnly': not py_cookie.domain_specified,
+ 'Persistent': not py_cookie.discard,
+ 'Secure': py_cookie.secure,
+ 'CanonicalHost': py_cookie.domain,
+ }
+ if py_cookie.path_specified:
+ go_cookie['Path'] = py_cookie.path
+ if py_cookie.expires is not None:
+ unix_time = datetime.datetime.fromtimestamp(py_cookie.expires)
+ # Note: fromtimestamp bizarrely produces a time without
+ # a time zone, so we need to use accept_naive.
+ go_cookie['Expires'] = pyrfc3339.generate(unix_time, accept_naive=True)
+ return go_cookie
--- /dev/null
+import abc
+import io
+import os
+import pathlib
+
+import juju.client.client as jujuclient
+import yaml
+from juju import tag
+from juju.client.gocookies import GoCookieJar
+from juju.errors import JujuError
+
+
+class NoModelException(Exception):
+ pass
+
+
+class JujuData:
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def current_controller(self):
+ '''Return the current controller name'''
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def controllers(self):
+ '''Return all the currently known controllers as a dict
+ mapping controller name to a dict containing the
+ following string keys:
+ uuid: The UUID of the controller
+ api-endpoints: A list of host:port addresses for the controller.
+ ca-cert: the PEM-encoded CA cert of the controller (optional)
+
+ This is compatible with the "controllers" entry in the YAML-unmarshaled data
+ stored in ~/.local/share/juju/controllers.yaml.
+ '''
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def models(self):
+ '''Return all the currently known models as a dict
+ containing a key for each known controller,
+ each holding a dict value containing an optional "current-model"
+ key (the name of the current model for that controller,
+ if there is one), and a dict mapping fully-qualified
+ model names to a dict containing a "uuid" key with the
+ key for that model.
+ This is compatible with the YAML-unmarshaled data
+ stored in ~/.local/share/juju/models.yaml.
+ '''
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def accounts(self):
+ '''Return the currently known accounts, as a dict
+ containing a key for each known controller, with
+ each value holding a dict with the following keys:
+
+ user: The username to use when logging into the controller (str)
+ password: The password to use when logging into the controller (str, optional)
+ '''
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def cookies_for_controller(self, controller_name):
+ '''Return the cookie jar to use when connecting to the
+ controller with the given name.
+ :return http.cookiejar.CookieJar
+ '''
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def current_model(self, controller_name=None, model_only=False):
+ '''Return the current model, qualified by its controller name.
+ If controller_name is specified, the current model for
+ that controller will be returned.
+ If model_only is true, only the model name, not qualified by
+ its controller name, will be returned.
+ '''
+ raise NotImplementedError()
+
+ def parse_model(self, model):
+ """Split the given model_name into controller and model parts.
+ If the controller part is empty, the current controller will be used.
+ If the model part is empty, the current model will be used for
+ the controller.
+ The returned model name will always be qualified with a username.
+ :param model str: The model name to parse.
+ :return (str, str): The controller and model names.
+ """
+ # TODO if model is empty, use $JUJU_MODEL environment variable.
+ if model and ':' in model:
+ # explicit controller given
+ controller_name, model_name = model.split(':')
+ else:
+ # use the current controller if one isn't explicitly given
+ controller_name = self.current_controller()
+ model_name = model
+ if not controller_name:
+ controller_name = self.current_controller()
+ if not model_name:
+ model_name = self.current_model(controller_name, model_only=True)
+ if not model_name:
+ raise NoModelException('no current model')
+
+ if '/' not in model_name:
+ # model name doesn't include a user prefix, so add one
+ # by using the current user for the controller.
+ accounts = self.accounts().get(controller_name)
+ if accounts is None:
+ raise JujuError('No account found for controller {} '.format(controller_name))
+ username = accounts.get('user')
+ if username is None:
+ raise JujuError('No username found for controller {}'.format(controller_name))
+ model_name = username + "/" + model_name
+
+ return controller_name, model_name
+
+
+class FileJujuData(JujuData):
+ '''Provide access to the Juju client configuration files.
+ Any configuration file is read once and then cached.'''
+ def __init__(self):
+ self.path = os.environ.get('JUJU_DATA') or '~/.local/share/juju'
+ self.path = os.path.abspath(os.path.expanduser(self.path))
+ # _loaded keeps track of the loaded YAML from
+ # the Juju data files so we don't need to load the same
+ # file many times.
+ self._loaded = {}
+
+ def refresh(self):
+ '''Forget the cache of configuration file data'''
+ self._loaded = {}
+
+ def current_controller(self):
+ '''Return the current controller name'''
+ return self._load_yaml('controllers.yaml', 'current-controller')
+
+ def current_model(self, controller_name=None, model_only=False):
+ '''Return the current model, qualified by its controller name.
+ If controller_name is specified, the current model for
+ that controller will be returned.
+
+ If model_only is true, only the model name, not qualified by
+ its controller name, will be returned.
+ '''
+ # TODO respect JUJU_MODEL environment variable.
+ if not controller_name:
+ controller_name = self.current_controller()
+ if not controller_name:
+ raise JujuError('No current controller')
+ models = self.models()[controller_name]
+ if 'current-model' not in models:
+ return None
+ if model_only:
+ return models['current-model']
+ return controller_name + ':' + models['current-model']
+
+ def load_credential(self, cloud, name=None):
+ """Load a local credential.
+
+ :param str cloud: Name of cloud to load credentials from.
+ :param str name: Name of credential. If None, the default credential
+ will be used, if available.
+ :return: A CloudCredential instance, or None.
+ """
+ try:
+ cloud = tag.untag('cloud-', cloud)
+ creds_data = self.credentials()[cloud]
+ if not name:
+ default_credential = creds_data.pop('default-credential', None)
+ default_region = creds_data.pop('default-region', None) # noqa
+ if default_credential:
+ name = creds_data['default-credential']
+ elif len(creds_data) == 1:
+ name = list(creds_data)[0]
+ else:
+ return None, None
+ cred_data = creds_data[name]
+ auth_type = cred_data.pop('auth-type')
+ return name, jujuclient.CloudCredential(
+ auth_type=auth_type,
+ attrs=cred_data,
+ )
+ except (KeyError, FileNotFoundError):
+ return None, None
+
+ def controllers(self):
+ return self._load_yaml('controllers.yaml', 'controllers')
+
+ def models(self):
+ return self._load_yaml('models.yaml', 'controllers')
+
+ def accounts(self):
+ return self._load_yaml('accounts.yaml', 'controllers')
+
+ def credentials(self):
+ return self._load_yaml('credentials.yaml', 'credentials')
+
+ def _load_yaml(self, filename, key):
+ if filename in self._loaded:
+ # Data already exists in the cache.
+ return self._loaded[filename].get(key)
+ # TODO use the file lock like Juju does.
+ filepath = os.path.join(self.path, filename)
+ with io.open(filepath, 'rt') as f:
+ data = yaml.safe_load(f)
+ self._loaded[filename] = data
+ return data.get(key)
+
+ def cookies_for_controller(self, controller_name):
+ f = pathlib.Path(self.path) / 'cookies' / (controller_name + '.json')
+ if not f.exists():
+ f = pathlib.Path('~/.go-cookies').expanduser()
+ # TODO if neither cookie file exists, where should
+ # we create the cookies?
+ jar = GoCookieJar(str(f))
+ jar.load()
+ return jar
-from collections import namedtuple
import re
+from collections import namedtuple
+from . import _client, _definitions
from .facade import ReturnMapping, Type, TypeEncoder
-from .import _client
-from .import _definitions
-
__all__ = [
'Delta',
'Number',
'Binary',
'ConfigValue',
+ 'Resource',
]
__patches__ = [
'ResourcesFacade',
'AllWatcherFacade',
+ 'ActionFacade',
]
return result
+class ActionFacade(Type):
+
+ class _FindTagsResults(Type):
+ _toSchema = {'matches': 'matches'}
+ _toPy = {'matches': 'matches'}
+
+ def __init__(self, matches=None, **unknown_fields):
+ '''
+ FindTagsResults wraps the mapping between the requested prefix and the
+ matching tags for each requested prefix.
+
+ Matches map[string][]Entity `json:"matches"`
+ '''
+ self.matches = {}
+ matches = matches or {}
+ for prefix, tags in matches.items():
+ self.matches[prefix] = [_definitions.Entity.from_json(r)
+ for r in tags]
+
+ @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=2,
+ params=_params)
+ _params['prefixes'] = prefixes
+ reply = await self.rpc(msg)
+ return reply
+
+
class Number(_definitions.Number):
"""
This type represents a semver string.
def __str__(self):
return self.serialize()
+ @property
+ def _cmp(self):
+ return (self.major, self.minor, self.tag, self.patch, self.build)
+
def __eq__(self, other):
- return (
- isinstance(other, type(self)) and
- other.major == self.major and
- other.minor == self.minor and
- other.tag == self.tag and
- other.patch == self.patch and
- other.build == self.build)
+ return isinstance(other, type(self)) and self._cmp == other._cmp
+
+ def __lt__(self, other):
+ return self._cmp < other._cmp
+
+ def __le__(self, other):
+ return self._cmp <= other._cmp
+
+ def __gt__(self, other):
+ return self._cmp > other._cmp
+
+ def __ge__(self, other):
+ return self._cmp >= other._cmp
@classmethod
def from_json(cls, data):
return '<{} source={} value={}>'.format(type(self).__name__,
repr(self.source),
repr(self.value))
+
+
+class Resource(Type):
+ _toSchema = {'application': 'application',
+ 'charmresource': 'CharmResource',
+ 'id_': 'id',
+ 'pending_id': 'pending-id',
+ 'timestamp': 'timestamp',
+ 'username': 'username',
+ 'name': 'name',
+ 'origin': 'origin'}
+ _toPy = {'CharmResource': 'charmresource',
+ 'application': 'application',
+ 'id': 'id_',
+ 'pending-id': 'pending_id',
+ 'timestamp': 'timestamp',
+ 'username': 'username',
+ 'name': 'name',
+ 'origin': 'origin'}
+
+ def __init__(self, charmresource=None, application=None, id_=None,
+ pending_id=None, timestamp=None, username=None, name=None,
+ origin=None, **unknown_fields):
+ '''
+ charmresource : CharmResource
+ application : str
+ id_ : str
+ pending_id : str
+ timestamp : str
+ username : str
+ name: str
+ origin : str
+ '''
+ if charmresource:
+ self.charmresource = _client.CharmResource.from_json(charmresource)
+ else:
+ self.charmresource = None
+ self.application = application
+ self.id_ = id_
+ self.pending_id = pending_id
+ self.timestamp = timestamp
+ self.username = username
+ self.name = name
+ self.origin = origin
-
-
class AsyncRunner:
async def __call__(self, facade_method, *args, **kwargs):
await self.connection.rpc(facade_method(*args, **kwargs))
# This could let us fake the protocol we want
# while decoupling the protocol from the RPC and the IO/Process context
-# The problem is leaking the runtime impl details to the top levels of the API with
-# async def
-# By handling the Marshal/Unmarshal side of RPC as a protocol we can leave the RPC running to a specific
-# delegate without altering the method signatures.
-# This still isn't quite right though as async is co-op multitasking and the methods still need to know
-# not to block or they will pause other execution
-
-
-
-
-
+# The problem is leaking the runtime impl details to the top levels of the API
+# with async def By handling the Marshal/Unmarshal side of RPC as a protocol we
+# can leave the RPC running to a specific delegate without altering the method
+# signatures. This still isn't quite right though as async is co-op
+# multitasking and the methods still need to know not to block or they will
+# pause other execution
--- /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"
+ ]
+ }
+ }
+ }
+ }
+]
-schemas-juju-2.3-alpha1.json
\ No newline at end of file
+schemas-juju-2.5-rc1.json
\ No newline at end of file
"P": 1024 * 1024 * 1024
}
+LIST_KEYS = {'tags', 'spaces'}
+
SNAKE1 = re.compile(r'(.)([A-Z][a-z]+)')
SNAKE2 = re.compile('([a-z0-9])([A-Z])')
return constraints
constraints = {
- normalize_key(k): normalize_value(v) for k, v in [
- s.split("=") for s in constraints.split(" ")]}
+ normalize_key(k): (
+ normalize_list_value(v) if k in LIST_KEYS else
+ normalize_value(v)
+ ) for k, v in [s.split("=") for s in constraints.split(" ")]}
return constraints
# Translate aliases to Megabytes. e.g. 1G = 10240
return int(value[:-1]) * FACTORS[value[-1:]]
- if "," in value:
- # Handle csv strings.
- values = value.split(",")
- values = [normalize_value(v) for v in values]
- return values
-
if value.isdigit():
return int(value)
return value
+
+
+def normalize_list_value(value):
+ values = value.strip().split(',')
+ return [normalize_value(value) for value in values]
import asyncio
+import json
import logging
+from pathlib import Path
-from . import tag
-from . import utils
-from .client import client
-from .client import connection
-from .model import Model
+from . import errors, tag, utils
+from .client import client, connector
+from .user import User
log = logging.getLogger(__name__)
-class Controller(object):
- def __init__(self, loop=None,
- max_frame_size=connection.Connection.DEFAULT_FRAME_SIZE):
+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.
- :param loop: an asyncio event loop
+ 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.loop = loop or asyncio.get_event_loop()
- self.max_frame_size = None
- self.connection = None
- self.controller_name = None
-
- async def connect(
- self, endpoint, username, password, cacert=None, macaroons=None):
- """Connect to an arbitrary Juju controller.
+ 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.
"""
- self.connection = await connection.Connection.connect(
- endpoint, None, username, password, cacert, macaroons,
- max_frame_size=self.max_frame_size)
+ 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):
- """Connect to the current Juju controller.
-
"""
- self.connection = (
- await connection.Connection.connect_current_controller(
- max_frame_size=self.max_frame_size))
+ .. deprecated:: 0.7.3
+ Use :meth:`.connect()` instead.
+ """
+ return await self.connect()
async def connect_controller(self, controller_name):
- """Connect to a Juju controller by name.
-
"""
- self.connection = (
- await connection.Connection.connect_controller(
- controller_name, max_frame_size=self.max_frame_size))
- self.controller_name = 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.
"""
- if self.connection and self.connection.is_open:
- log.debug('Closing controller connection')
- await self.connection.close()
- self.connection = None
+ await self._connector.disconnect()
+
+ async def add_credential(self, name=None, credential=None, cloud=None,
+ owner=None, force=False):
+ """Add or update a credential to the controller.
+
+ :param str name: Name of new credential. If None, the default
+ local credential is used. Name must be provided if a credential
+ is given.
+ :param CloudCredential credential: Credential to add. If not given,
+ it will attempt to read from local data, if available.
+ :param str cloud: Name of cloud to associate the credential with.
+ Defaults to the same cloud as the controller.
+ :param str owner: Username that will own the credential. Defaults to
+ the current user.
+ :param bool force: Force indicates whether the update should be forced.
+ It's only supported for facade v3 or later.
+ Defaults to false.
+ :returns: Name of credential that was uploaded.
+ """
+ if not cloud:
+ cloud = await self.get_cloud()
+
+ if not owner:
+ owner = self.connection().info['user-info']['identity']
+
+ if credential and not name:
+ raise errors.JujuError('Name must be provided for credential')
+
+ if not credential:
+ name, credential = self._connector.jujudata.load_credential(cloud,
+ name)
+ 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,
+ )]
+ 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,
: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. Defaults to current credential. If you
- pass a credential_name, you must also pass a cloud_name,
- even if it's the default cloud.
+ 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)
+ self.connection())
- owner = owner or self.connection.info['user-info']['identity']
+ 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,
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,
owner,
region
)
-
- # Add our ssh key to the model, to work around
- # https://bugs.launchpad.net/juju/+bug/1643076
- try:
- ssh_key = await utils.read_ssh_key(loop=self.loop)
-
- if self.controller_name:
- model_name = "{}:{}".format(self.controller_name, model_name)
-
- cmd = ['juju', 'add-ssh-key', '-m', model_name, ssh_key]
-
- await utils.execute_process(*cmd, log=log, loop=self.loop)
- except Exception:
- log.exception(
- "Could not add ssh key to model. You will not be able "
- "to ssh into machines in this model. "
- "Manually running `juju add-ssh-key <key>` in the cli "
- "may fix this problem.")
-
- model = Model()
- await model.connect(
- self.connection.endpoint,
- model_info.uuid,
- self.connection.username,
- self.connection.password,
- self.connection.cacert,
- self.connection.macaroons,
- loop=self.loop,
- )
+ from juju.model import Model
+ model = Model(jujudata=self._connector.jujudata)
+ kwargs = self.connection().connect_params()
+ kwargs['uuid'] = model_info.uuid
+ await model._connect_direct(**kwargs)
return model
- async def destroy_models(self, *uuids):
+ async def destroy_models(self, *models, destroy_storage=False):
"""Destroy one or more models.
- :param str \*uuids: UUIDs of models to destroy
+ :param str *models: Names or UUIDs of models to destroy
+ :param bool destroy_storage: Whether or not to destroy storage when
+ destroying the models. Defaults to false.
"""
+ uuids = await self.model_uuids()
+ models = [uuids[model] if model in uuids else model
+ for model in models]
+
model_facade = client.ModelManagerFacade.from_connection(
- self.connection)
+ self.connection())
log.debug(
'Destroying model%s %s',
- '' if len(uuids) == 1 else 's',
- ', '.join(uuids)
+ '' if len(models) == 1 else 's',
+ ', '.join(models)
)
- await model_facade.DestroyModels([
- client.Entity(tag.model(uuid))
- for uuid in uuids
- ])
+ 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
- :param str acl: Access control, e.g. 'read'
- :param list models: Models to which the user is granted access
-
+ :returns: A :class:`~juju.user.User` instance
"""
if not display_name:
display_name = username
- user_facade = client.UserManagerFacade.from_connection(self.connection)
- users = [{'display_name': display_name,
- 'password': password,
- 'username': username}]
- return await user_facade.AddUser(users)
+ user_facade = client.UserManagerFacade.from_connection(
+ self.connection())
+ users = [client.AddUser(display_name=display_name,
+ username=username,
+ password=password)]
+ 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 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.
"""
controller_facade = client.ControllerFacade.from_connection(
- self.connection)
+ self.connection())
return await controller_facade.DestroyController(destroy_all_models)
async def disable_user(self, username):
: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])
"""Re-enable a previously disabled user.
"""
- user_facade = client.UserManagerFacade.from_connection(self.connection)
+ user_facade = client.UserManagerFacade.from_connection(
+ self.connection())
entity = client.Entity(tag.user(username))
return await user_facade.EnableUser([entity])
"""
Get the name of the cloud that this controller lives on.
"""
- cloud_facade = client.CloudFacade.from_connection(self.connection)
+ 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):
- """Return list of available models on this controller.
-
- :param bool all_: List all models, regardless of user accessibilty
- (admin use only)
- :param str username: User for which to list models (admin use only)
-
+ """
+ .. 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)
- return await controller_facade.AllModels()
+ self.connection())
+ for attempt in (1, 2, 3):
+ try:
+ response = await controller_facade.AllModels()
+ return {um.model.name: um.model.uuid
+ for um in response.user_models}
+ except errors.JujuAPIError as e:
+ # retry concurrency error until resolved in Juju
+ # see: https://bugs.launchpad.net/juju/+bug/1721786
+ if 'has been removed' not in e.message or attempt == 3:
+ raise
+ await asyncio.sleep(attempt, loop=self._connector.loop)
+
+ async def list_models(self):
+ """Return list of names of the available models on this controller.
+
+ Equivalent to ``sorted((await self.model_uuids()).keys())``
+ """
+ uuids = await self.model_uuids()
+ return sorted(uuids.keys())
def get_payloads(self, *patterns):
"""Return list of known payloads.
- :param str \*patterns: Patterns to match against
+ :param str *patterns: Patterns to match against
Each pattern will be checked against the following info in Juju::
"""
raise NotImplementedError()
- def get_users(self, all_=False):
- """Return list of users that can connect to this controller.
-
- :param bool all_: Include disabled users
-
- """
- raise NotImplementedError()
-
def login(self):
"""Log in to this controller.
"""
raise NotImplementedError()
- def get_model(self, name):
- """Get a model by name.
-
- :param str name: Model name
+ 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.
"""
- raise NotImplementedError()
+ uuids = await self.model_uuids()
+ if model in uuids:
+ uuid = uuids[model]
+ else:
+ uuid = model
- async def get_user(self, username, include_disabled=False):
+ from juju.model import Model
+ model = Model()
+ kwargs = self.connection().connect_params()
+ kwargs['uuid'] = uuid
+ await model._connect_direct(**kwargs)
+ return model
+
+ async def get_user(self, username, 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)
+ self.connection())
user = tag.user(username)
- return await client_facade.UserInfo([client.Entity(user)],
- include_disabled)
+ args = [client.Entity(user)]
+ try:
+ response = await client_facade.UserInfo(args, True)
+ except errors.JujuError as e:
+ if 'permission denied' in e.errors:
+ # apparently, trying to get info for a nonexistent user returns
+ # a "permission denied" error rather than an empty result set
+ return None
+ raise
+ if response.results and response.results[0].result:
+ return User(self, response.results[0].result, secret_key=secret_key)
+ return None
+
+ async def get_users(self, include_disabled=False):
+ """Return list of users that can connect to this controller.
- async def grant(self, username, acl='login'):
- """Set access level of the given user on the 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)
+ self.connection())
user = tag.user(username)
- await self.revoke(username)
changes = client.ModifyControllerAccess(acl, 'grant', user)
- return await controller_facade.ModifyControllerAccess([changes])
-
- async def revoke(self, username):
- """Removes all access from a controller
+ 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)
+ self.connection())
user = tag.user(username)
changes = client.ModifyControllerAccess('login', 'revoke', user)
return await controller_facade.ModifyControllerAccess([changes])
+
+ async def grant_model(self, username, model_uuid, acl='read'):
+ """Grant a user access to a model. Note that if the user
+ already has higher permissions than the provided ACL,
+ this will do nothing (see revoke_model for a way to remove
+ permissions).
+
+ :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])
class JujuError(Exception):
- pass
+ def __init__(self, *args, **kwargs):
+ self.message = ''
+ self.errors = []
+ if args:
+ self.message = str(args[0])
+ if isinstance(args[0], (list, tuple)):
+ self.errors = args[0]
+ elif len(args) > 1:
+ self.errors = list(args)
+ else:
+ self.errors = [self.message]
+ super().__init__(*args, **kwargs)
class JujuAPIError(JujuError):
class JujuConnectionError(ConnectionError, JujuError):
pass
+
+
+class JujuAuthError(JujuConnectionError):
+ pass
+
+
+class JujuRedirectException(Exception):
+ """Exception indicating that a redirection was requested"""
+ def __init__(self, redirect_info):
+ self.redirect_info = redirect_info
+
+ @property
+ def ca_cert(self):
+ return self.redirect_info['ca-cert']
+
+ @property
+ def endpoints(self):
+ return [
+ ('{value}:{port}'.format(**s), self.ca_cert)
+ for servers in self.redirect_info['servers']
+ for s in servers if s['scope'] == 'public'
+ ]
def agree(self, *terms):
"""Agree to the terms of a charm.
- :param str \*terms: Terms to agree to
+ :param str *terms: Terms to agree to
"""
raise NotImplementedError()
try:
loop.add_signal_handler(signal.SIGINT, abort)
added = True
- except ValueError as e:
+ except (ValueError, OSError, RuntimeError) as e:
# add_signal_handler doesn't work in a thread
if 'main thread' not in str(e):
raise
import logging
import os
-from dateutil.parser import parse as parse_date
+import pyrfc3339
from . import model, utils
from .client import client
class Machine(model.ModelEntity):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.on_change(self._workaround_1695335)
+ 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,
+ 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):
"""
full_status = await utils.run_with_interrupt(model.get_status(),
model._watch_stopping,
- model.loop)
+ loop=model.loop)
if model._watch_stopping.is_set():
return
change_log.append(('agent-version', '', agent_version))
# only update (other) delta fields if status data is newer
- status_since = parse_date(machine['instance-status']['since'])
- delta_since = parse_date(delta.data['instance-status']['since'])
+ 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]
: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')
:param str destination: Local destination of transferred files
:param str user: Remote username
:param bool proxy: Proxy through the Juju API server
- :param str scp_opts: Additional options to the `scp` command
+ :param scp_opts: Additional options to the `scp` command
+ :type scp_opts: str or list
"""
if proxy:
raise NotImplementedError('proxy option is not implemented')
'scp',
'-i', os.path.expanduser('~/.local/share/juju/ssh/juju_id_rsa'),
'-o', 'StrictHostKeyChecking=no',
- source, destination
+ '-q',
+ '-B'
]
- cmd += scp_opts.split()
+ cmd.extend(scp_opts.split() if isinstance(scp_opts, str) else scp_opts)
+ cmd.extend([source, destination])
loop = self.model.loop
process = await asyncio.create_subprocess_exec(*cmd, loop=loop)
await process.wait()
"""Get the time when the `agent_status` was last updated.
"""
- return parse_date(self.safe_data['agent-status']['since'])
+ return pyrfc3339.parse(self.safe_data['agent-status']['since'])
@property
def agent_version(self):
"""Get the time when the `status` was last updated.
"""
- return parse_date(self.safe_data['instance-status']['since'])
+ return pyrfc3339.parse(self.safe_data['instance-status']['since'])
@property
def dns_name(self):
if addresses:
return addresses[0]['value']
return None
+
+ @property
+ def series(self):
+ """Returns the series of the current machine
+
+ """
+ return self.safe_data['series']
from functools import partial
from pathlib import Path
-import websockets
-import yaml
import theblues.charmstore
import theblues.errors
+import websockets
+import yaml
from . import tag, utils
-from .client import client
-from .client import connection
+from .client import client, connector
from .client.client import ConfigValue
-from .constraints import parse as parse_constraints, normalize_key
-from .delta import get_entity_delta
-from .delta import get_entity_class
+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 .errors import JujuError, JujuAPIError
from .placement import parse as parse_placement
+from . import provisioner
+
log = logging.getLogger(__name__)
-class _Observer(object):
+class _Observer:
"""Wrapper around an observer callable.
This wrapper allows filter criteria to be associated with the
return True
-class ModelObserver(object):
+class ModelObserver:
"""
Base class for creating observers that react to changes in a model.
"""
pass
-class ModelState(object):
+class ModelState:
"""Holds the state of the model, including the delta history of all
entities 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.
connected=connected)
-class ModelEntity(object):
+class ModelEntity:
"""An object in the Model tree"""
def __init__(self, entity_id, model, history_index=-1, connected=True):
self.model = model
self._history_index = history_index
self.connected = connected
- self.connection = model.connection
+ self.connection = model.connection()
def __repr__(self):
return '<{} entity_id="{}">'.format(type(self).__name__,
return self.model.state.get_entity(self.entity_type, self.entity_id)
-class Model(object):
+class Model:
"""
The main API for interacting with a Juju model.
"""
- def __init__(self, loop=None,
- max_frame_size=connection.Connection.DEFAULT_FRAME_SIZE):
- """Instantiate a new connected 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:
"""
- self.loop = loop or asyncio.get_event_loop()
- self.max_frame_size = max_frame_size
- self.connection = None
- self.observers = weakref.WeakValueDictionary()
- self.state = ModelState(self)
- self.info = None
- self._watch_stopping = asyncio.Event(loop=self.loop)
- self._watch_stopped = asyncio.Event(loop=self.loop)
- self._watch_received = asyncio.Event(loop=self.loop)
- self._charmstore = CharmStore(self.loop)
+ 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_current()
+ await self.connect()
return self
async def __aexit__(self, exc_type, exc, tb):
await self.disconnect()
- if exc_type is not None:
- return False
+ async def connect(self, *args, **kwargs):
+ """Connect to a juju model.
- async def connect(self, *args, **kw):
- """Connect to an arbitrary Juju model.
+ This supports two calling conventions:
- args and kw are passed through to Connection.connect()
+ 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.
- """
- if 'loop' not in kw:
- kw['loop'] = self.loop
- if 'max_frame_size' not in kw:
- kw['max_frame_size'] = self.max_frame_size
- self.connection = await connection.Connection.connect(*args, **kw)
- await self._after_connect()
+ Otherwise, all of the ``endpoint``, ``uuid``, and authentication
+ information (``username`` and ``password``, or ``bakery_client`` and/or
+ ``macaroons``) are required.
- async def connect_current(self):
- """Connect to the current Juju model.
+ 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.
"""
- self.connection = await connection.Connection.connect_current(
- self.loop, max_frame_size=self.max_frame_size)
+ 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):
- """Connect to a specific Juju model by name.
-
- :param model_name: Format [controller:][user/]model
+ """
+ .. 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.
"""
- self.connection = await connection.Connection.connect_model(
- model_name, self.loop, self.max_frame_size)
+ 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):
- """Run initialization steps after connecting to websocket.
-
- """
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 self.connection and self.connection.is_open:
+ 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.connection.close()
- self.connection = None
+ await self._connector.disconnect()
+ self._info = None
async def add_local_charm_dir(self, charm_dir, series):
"""Upload a local charm to the model.
with fh:
func = partial(
self.add_local_charm, fh, series, os.stat(fh.name).st_size)
- charm_url = await self.loop.run_in_executor(None, func)
+ 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
instead.
"""
- conn, headers, path_prefix = self.connection.https_connection()
+ conn, headers, path_prefix = self.connection().https_connection()
path = "%s/charms?series=%s" % (path_prefix, series)
headers['Content-Type'] = 'application/zip'
if size:
async def block_until(self, *conditions, timeout=None, wait_period=0.5):
"""Return only after all conditions are true.
+ Raises `websockets.ConnectionClosed` if disconnected.
"""
- async def _block():
- while not all(c() for c in conditions):
- if not (self.connection and self.connection.is_open):
- raise websockets.ConnectionClosed(1006, 'no reason')
- await asyncio.sleep(wait_period, loop=self.loop)
- await asyncio.wait_for(_block(), timeout, loop=self.loop)
+ 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 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.
explicit call to this method.
"""
- facade = client.ClientFacade.from_connection(self.connection)
+ facade = client.ClientFacade.from_connection(self.connection())
- self.info = await facade.ModelInfo()
+ 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):
"""
observer = _Observer(
callable_, entity_type, action, entity_id, predicate)
- self.observers[observer] = callable_
+ self._observers[observer] = callable_
def _watch(self):
"""Start an asynchronous watch against this model.
async def _all_watcher():
try:
allwatcher = client.AllWatcherFacade.from_connection(
- self.connection)
+ self.connection())
while not self._watch_stopping.is_set():
try:
results = await utils.run_with_interrupt(
allwatcher.Next(),
self._watch_stopping,
- self.loop)
+ loop=self._connector.loop)
except JujuAPIError as e:
if 'watcher was stopped' not in str(e):
raise
del allwatcher.Id
continue
except websockets.ConnectionClosed:
- monitor = self.connection.monitor
+ monitor = self.connection().monitor
if monitor.status == monitor.ERROR:
# closed unexpectedly, try to reopen
log.warning(
'Watcher: connection closed, reopening')
- await self.connection.reconnect()
+ 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():
- await allwatcher.Stop()
+ 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)
self._watch_received.clear()
self._watch_stopping.clear()
self._watch_stopped.clear()
- self.loop.create_task(_all_watcher())
+ 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
'Model changed: %s %s %s',
delta.entity, delta.type, delta.get_id())
- for o in self.observers:
+ for o in self._observers:
if o.cares_about(delta):
asyncio.ensure_future(o(delta, old_obj, new_obj, self),
- loop=self.loop)
+ loop=self._connector.loop)
async def _wait(self, entity_type, entity_id, action, predicate=None):
"""
has a 'completed' status. See the _Observer class for details.
"""
- q = asyncio.Queue(loop=self.loop)
+ q = asyncio.Queue(loop=self._connector.loop)
async def callback(delta, old, new, model):
await q.put(delta.get_id())
# 'remove' action
return self.state._live_entity_map(entity_type).get(entity_id)
- async def _wait_for_new(self, entity_type, entity_id=None, predicate=None):
+ 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``.
- If ``entity_id`` is ``None``, it will wait for the first new entity
- of the correct type.
-
- This coroutine blocks until the new object appears in the model.
+ 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]
- # if we know the entity_id, we can trigger on any action that puts
- # the enitty into the model; otherwise, we have to watch for the
- # next "add" action on that entity_type
- action = 'add' if entity_id is None else None
- return await self._wait(entity_type, entity_id, action, predicate)
+ 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."""
def predicate(delta):
return delta.data['status'] in ('completed', 'failed')
- return await self._wait('action', action_id, 'change', predicate)
+ return await self._wait('action', action_id, None, predicate)
async def add_machine(
self, spec=None, constraints=None, disks=None, series=None):
(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' - manually provisions a machine with ssh
+ '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
"""
params = client.AddMachineParams()
- params.jobs = ['JobHostUnits']
if spec:
- placement = parse_placement(spec)
- if placement:
- params.placement = placement[0]
+ 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)
params.series = series
# Submit the request.
- client_facade = client.ClientFacade.from_connection(self.connection)
+ 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)
:param str relation2: '<application>[:<relation_name>]'
"""
- app_facade = client.ApplicationFacade.from_connection(self.connection)
+ 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
- log.debug(
- 'Relation %s <-> %s already exists', relation1, relation2)
- # TODO: if relation already exists we should return the
- # Relation ModelEntity here
- return None
+ rel = _find_relation(relation1, relation2)
+ if rel:
+ return rel
+ raise JujuError('Relation {} {} exists but not in model'.format(
+ relation1, relation2))
- def predicate(delta):
- endpoints = {}
- for endpoint in delta.data['endpoints']:
- endpoints[endpoint['application-name']] = endpoint['relation']
- return endpoints == result.endpoints
+ specs = ['{}:{}'.format(app, data['name'])
+ for app, data in result.endpoints.items()]
- return await self._wait_for_new('relation', None, predicate)
+ 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.
(optional) list of existing subnet CIDRs with it.
:param str name: Name of the space
- :param \*cidrs: Optional list of existing subnet CIDRs
+ :param *cidrs: Optional list of existing subnet CIDRs
"""
raise NotImplementedError()
:param str key: The public ssh key
"""
- key_facade = client.KeyManagerFacade.from_connection(self.connection)
+ key_facade = client.KeyManagerFacade.from_connection(self.connection())
return await key_facade.AddKeys([key], user)
add_ssh_keys = add_ssh_key
:param str cidr_or_id: CIDR or provider ID of the existing subnet
:param str space: Network space with which to associate
- :param str \*zones: Zone(s) in which the subnet resides
+ :param str *zones: Zone(s) in which the subnet resides
"""
raise NotImplementedError()
def block(self, *commands):
"""Add a new block to this model.
- :param str \*commands: The commands to block. Valid values are
+ :param str *commands: The commands to block. Valid values are
'all-changes', 'destroy-model', 'remove-object'
"""
:param str name: Name to give the storage pool
:param str provider_type: Pool provider type
- :param \*\*pool_config: key/value pool configuration pairs
+ :param **pool_config: key/value pool configuration pairs
"""
raise NotImplementedError()
self, entity_url, application_name=None, bind=None, budget=None,
channel=None, config=None, constraints=None, force=False,
num_units=1, plan=None, resources=None, series=None, storage=None,
- to=None):
+ to=None, devices=None):
"""Deploy a new service or bundle.
:param str entity_url: Charm or bundle url
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
- os.path.isdir(entity_url)
+ entity_path.is_dir() or
+ entity_path.is_file()
)
if is_local:
entity_id = entity_url.replace('local:', '')
else:
- entity = await self.charmstore.entity(entity_url, channel=channel)
+ entity = await self.charmstore.entity(entity_url, channel=channel,
+ include_stats=False)
entity_id = entity['Id']
- client_facade = client.ClientFacade.from_connection(self.connection)
+ client_facade = client.ClientFacade.from_connection(self.connection())
is_bundle = ((is_local and
- (Path(entity_id) / 'bundle.yaml').exists()) or
+ (entity_id.endswith('.yaml') and entity_path.exists()) or
+ bundle_path.exists()) or
(not is_local and 'bundle/' in entity_id))
if is_bundle:
await asyncio.gather(*[
asyncio.ensure_future(
self._wait_for_new('application', app_name),
- loop=self.loop)
+ loop=self._connector.loop)
for app_name in pending_apps
- ], loop=self.loop)
+ ], loop=self._connector.loop)
return [app for name, app in self.applications.items()
if name in handler.applications]
else:
# actually support them yet anyway
resources = await self._add_store_resources(application_name,
entity_id,
- entity)
+ entity=entity)
else:
+ if not application_name:
+ metadata = yaml.load(metadata_path.read_text())
+ application_name = metadata['name']
# We have a local charm dir that needs to be uploaded
charm_dir = os.path.abspath(
os.path.expanduser(entity_id))
storage=storage,
channel=channel,
num_units=num_units,
- placement=parse_placement(to)
+ placement=parse_placement(to),
+ devices=devices,
)
- async def _add_store_resources(self, application, entity_url, entity=None):
+ async def _add_store_resources(self, application, entity_url,
+ overrides=None, entity=None):
if not entity:
# avoid extra charm store call if one was already made
- entity = await self.charmstore.entity(entity_url)
+ entity = await self.charmstore.entity(entity_url,
+ include_stats=False)
resources = [
{
'description': resource['Description'],
} 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)
+ self.connection())
response = await resources_facade.AddPendingResources(
tag.application(application),
entity_url,
async def _deploy(self, charm_url, application, series, config,
constraints, endpoint_bindings, resources, storage,
- channel=None, num_units=None, placement=None):
+ channel=None, num_units=None, placement=None,
+ devices=None):
"""Logic shared between `Model.deploy` and `BundleHandler.deploy`.
"""
log.info('Deploying %s', charm_url)
default_flow_style=False)
app_facade = client.ApplicationFacade.from_connection(
- self.connection)
+ self.connection())
app = client.ApplicationDeploy(
charm_url=charm_url,
num_units=num_units,
resources=resources,
storage=storage,
- placement=placement
+ placement=placement,
+ devices=devices,
)
-
result = await app_facade.Deploy([app])
errors = [r.error.message for r in result.results if r.error]
if errors:
"""Destroy units by name.
"""
- app_facade = client.ApplicationFacade.from_connection(self.connection)
+ connection = self.connection()
+ app_facade = client.ApplicationFacade.from_connection(connection)
log.debug(
'Destroying unit%s %s',
which have `source` and `value` attributes.
"""
config_facade = client.ModelConfigFacade.from_connection(
- self.connection
+ self.connection()
)
result = await config_facade.ModelGet()
config = result.config
config[key] = ConfigValue.from_json(value)
return config
- def get_constraints(self):
+ async def get_constraints(self):
"""Return the machine constraints for this model.
- """
- raise NotImplementedError()
-
- async def grant(self, username, acl='read'):
- """Grant a user access to this model.
-
- :param str username: Username
- :param str acl: Access control ('read' or 'write')
-
- """
- controller_conn = await self.connection.controller()
- model_facade = client.ModelManagerFacade.from_connection(
- controller_conn)
- user = tag.user(username)
- model = tag.model(self.info.uuid)
- changes = client.ModifyModelAccess(acl, 'grant', model, user)
- await self.revoke(username)
- return await model_facade.ModifyModelAccess([changes])
+ :returns: A ``dict`` of constraints.
+ """
+ constraints = {}
+ client_facade = client.ClientFacade.from_connection(self.connection())
+ result = await client_facade.GetModelConstraints()
+
+ # GetModelConstraints returns GetConstraintsResults which has a
+ # 'constraints' attribute. If no constraints have been set
+ # GetConstraintsResults.constraints is None. Otherwise
+ # GetConstraintsResults.constraints has an attribute for each possible
+ # constraint, each of these in turn will be None if they have not been
+ # set.
+ if result.constraints:
+ constraint_types = [a for a in dir(result.constraints)
+ if a in Value._toSchema.keys()]
+ for constraint in constraint_types:
+ value = getattr(result.constraints, constraint)
+ if value is not None:
+ constraints[constraint] = getattr(result.constraints,
+ constraint)
+ return constraints
def import_ssh_key(self, identity):
"""Add a public SSH key from a trusted indentity source to this model.
else it's fingerprint
"""
- key_facade = client.KeyManagerFacade.from_connection(self.connection)
+ 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)
def remove_machine(self, *machine_ids):
"""Remove a machine from this model.
- :param str \*machine_ids: Ids of the machines to remove
+ :param str *machine_ids: Ids of the machines to remove
"""
raise NotImplementedError()
:param str user: Juju user to which the key is registered
"""
- key_facade = client.KeyManagerFacade.from_connection(self.connection)
+ 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]))
+ 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
"""
raise NotImplementedError()
- async def revoke(self, username):
- """Revoke a user's access to this model.
-
- :param str username: Username to revoke
-
- """
- controller_conn = await self.connection.controller()
- model_facade = client.ModelManagerFacade.from_connection(
- controller_conn)
- user = tag.user(username)
- model = tag.model(self.info.uuid)
- changes = client.ModifyModelAccess('read', 'revoke', model, user)
- return await model_facade.ModifyModelAccess([changes])
-
def run(self, command, timeout=None):
"""Run command on all machines in this model.
`ConfigValue` instances, as returned by `get_config`.
"""
config_facade = client.ModelConfigFacade.from_connection(
- self.connection
+ self.connection()
)
for key, value in config.items():
if isinstance(value, ConfigValue):
config[key] = value.value
await config_facade.ModelSet(config)
- def set_constraints(self, constraints):
+ async def set_constraints(self, constraints):
"""Set machine constraints on this model.
- :param :class:`juju.Constraints` constraints: Machine constraints
-
+ :param dict config: Mapping of model constraints
"""
- raise NotImplementedError()
+ client_facade = client.ClientFacade.from_connection(self.connection())
+ await client_facade.SetModelConstraints(
+ application='',
+ constraints=constraints)
- def get_action_output(self, action_uuid, wait=-1):
+ 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
-
+ :param int wait: Time in seconds to wait for action to complete.
+ :return dict: Output from action
+ :raises: :class:`JujuError` if invalid action_uuid
"""
- raise NotImplementedError()
+ 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
- def get_action_status(self, uuid_or_prefix=None, name=None):
- """Get the status of all actions, filtered by ID, ID prefix, or action name.
+ 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
"""
- raise NotImplementedError()
+ 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 bool utc: Display time as UTC in RFC3339 format
"""
- client_facade = client.ClientFacade.from_connection(self.connection)
+ client_facade = client.ClientFacade.from_connection(self.connection())
return await client_facade.FullStatus(filters)
def sync_tools(
def unblock(self, *commands):
"""Unblock an operation that would alter this model.
- :param str \*commands: The commands to unblock. Valid values are
+ :param str *commands: The commands to unblock. Valid values are
'all-changes', 'destroy-model', 'remove-object'
"""
def unset_config(self, *keys):
"""Unset configuration on this model.
- :param str \*keys: The keys to unset
+ :param str *keys: The keys to unset
"""
raise NotImplementedError()
async def get_metrics(self, *tags):
"""Retrieve metrics.
- :param str \*tags: Tags of entities from which to retrieve metrics.
+ :param str *tags: Tags of entities from which to retrieve metrics.
No tags retrieves the metrics of all units in the model.
:return: Dictionary of unit_name:metrics
', '.join(tags) if tags else "all units")
metrics_facade = client.MetricsDebugFacade.from_connection(
- self.connection)
+ self.connection())
entities = [client.Entity(tag) for tag in tags]
metrics_result = await metrics_facade.GetMetrics(entities)
return series[0] if series else None
-class BundleHandler(object):
+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.
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)
+ model.connection())
self.app_facade = client.ApplicationFacade.from_connection(
- model.connection)
+ model.connection())
self.ann_facade = client.AnnotationsFacade.from_connection(
- model.connection)
+ model.connection())
async def _handle_local_charms(self, bundle):
"""Search for references to local charms (i.e. filesystem paths)
apps, args = [], []
default_series = bundle.get('series')
+ apps_dict = bundle.get('applications', bundle.get('services', {}))
for app_name in self.applications:
- app_dict = bundle['services'][app_name]
+ 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
], 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):
- bundle['services'][app_name]['charm'] = charm_url
+ apps_dict[app_name]['charm'] = charm_url
return bundle
async def fetch_plan(self, entity_id):
- is_local = not entity_id.startswith('cs:') and os.path.isdir(entity_id)
- if is_local:
+ is_store_url = entity_id.startswith('cs:')
+
+ if not is_store_url and os.path.isfile(entity_id):
+ bundle_yaml = Path(entity_id).read_text()
+ 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,
self.bundle = yaml.safe_load(bundle_yaml)
self.bundle = await self._handle_local_charms(self.bundle)
- self.plan = await self.client_facade.GetBundleChanges(
+ self.plan = await self.bundle_facade.GetChanges(
yaml.dump(self.bundle))
+ if self.plan.errors:
+ raise JujuError(self.plan.errors)
+
async def execute_plan(self):
for step in self.plan.changes:
method = getattr(self, step.method)
@property
def applications(self):
- return list(self.bundle['services'].keys())
+ apps_dict = self.bundle.get('applications',
+ self.bundle.get('services', {}))
+ return list(apps_dict.keys())
def resolve(self, reference):
if reference and reference.startswith('$'):
# Fix up values, as necessary.
if 'parent_id' in params:
- params['parent_id'] = self.resolve(params['parent_id'])
+ 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'))
return await self.model.add_relation(*endpoints)
async def deploy(self, charm, series, application, options, constraints,
- storage, endpoint_bindings, resources):
+ storage, endpoint_bindings, *args):
"""
:param charm string:
Charm holds the URL of the charm to be used to deploy this
:param endpoint_bindings map[string]string:
EndpointBindings holds the optional endpoint bindings
+ :param devices map[string]string:
+ Devices holds the optional devices constraints.
+ (Only given on Juju 2.5+)
+
:param resources map[string]int:
Resources identifies the revision to use for each resource
of the application's charm.
+
+ :param num_units int:
+ NumUnits holds the number of units required. For IAAS models, this
+ will be 0 and separate AddUnitChanges will be used. For Kubernetes
+ models, this will be used to scale the application.
+ (Only given on Juju 2.5+)
"""
# resolve indirect references
charm = self.resolve(charm)
- # the bundle plan doesn't actually do anything with resources, even
- # though it ostensibly gives us something (None) for that param
+
+ if len(args) == 1:
+ # Juju 2.4 and below only sends the resources
+ resources = args[0]
+ devices, num_units = None, None
+ else:
+ # Juju 2.5+ sends devices before resources, as well as num_units
+ # There might be placement but we need to ignore that.
+ devices, resources, num_units = args[:3]
+
if not charm.startswith('local:'):
- resources = await self.model._add_store_resources(application,
- charm)
+ resources = await self.model._add_store_resources(
+ application, charm, overrides=resources)
await self.model._deploy(
charm_url=charm,
application=application,
endpoint_bindings=endpoint_bindings,
resources=resources,
storage=storage,
+ devices=devices,
+ num_units=num_units,
)
return application
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:
return await entity.set_annotations(annotations)
-class CharmStore(object):
+class CharmStore:
"""
Async wrapper around theblues.charmstore.CharmStore
"""
- def __init__(self, loop):
+ def __init__(self, loop, cs_timeout=20):
self.loop = loop
- self._cs = theblues.charmstore.CharmStore(timeout=5)
+ self._cs = theblues.charmstore.CharmStore(timeout=cs_timeout)
def __getattr__(self, name):
"""
return wrapper
-class CharmArchiveGenerator(object):
+class CharmArchiveGenerator:
"""
Create a Zip archive of a local charm directory for upload to a controller.
Ignored::
- * build/\* - This is used for packing the charm itself and any
+ * build/* - This is used for packing the charm itself and any
similar tasks.
- * \*/.\* - Hidden files are all ignored for now. This will most
+ * */.* - Hidden files are all ignored for now. This will most
likely be changed into a specific ignore list
(.bzr, etc)
--- /dev/null
+from .client import client
+
+import paramiko
+import os
+import re
+import tempfile
+import shlex
+from subprocess import (
+ CalledProcessError,
+)
+import uuid
+
+
+arches = [
+ [re.compile(r"amd64|x86_64"), "amd64"],
+ [re.compile(r"i?[3-9]86"), "i386"],
+ [re.compile(r"(arm$)|(armv.*)"), "armhf"],
+ [re.compile(r"aarch64"), "arm64"],
+ [re.compile(r"ppc64|ppc64el|ppc64le"), "ppc64el"],
+ [re.compile(r"s390x?"), "s390x"],
+
+]
+
+
+def normalize_arch(rawArch):
+ """Normalize the architecture string."""
+ for arch in arches:
+ if arch[0].match(rawArch):
+ return arch[1]
+
+
+DETECTION_SCRIPT = """#!/bin/bash
+set -e
+os_id=$(grep '^ID=' /etc/os-release | tr -d '"' | cut -d= -f2)
+if [ "$os_id" = 'centos' ]; then
+ os_version=$(grep '^VERSION_ID=' /etc/os-release | tr -d '"' | cut -d= -f2)
+ echo "centos$os_version"
+else
+ lsb_release -cs
+fi
+uname -m
+grep MemTotal /proc/meminfo
+cat /proc/cpuinfo
+"""
+
+INITIALIZE_UBUNTU_SCRIPT = """set -e
+(id ubuntu &> /dev/null) || useradd -m ubuntu -s /bin/bash
+umask 0077
+temp=$(mktemp)
+echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > $temp
+install -m 0440 $temp /etc/sudoers.d/90-juju-ubuntu
+rm $temp
+su ubuntu -c 'install -D -m 0600 /dev/null ~/.ssh/authorized_keys'
+export authorized_keys="{}"
+if [ ! -z "$authorized_keys" ]; then
+ su ubuntu -c 'echo $authorized_keys >> ~/.ssh/authorized_keys'
+fi
+"""
+
+
+class SSHProvisioner:
+ """Provision a manually created machine via SSH."""
+ user = ""
+ host = ""
+ private_key_path = ""
+
+ def __init__(self, user, host, private_key_path):
+ self.host = host
+ self.user = user
+ self.private_key_path = private_key_path
+
+ def _get_ssh_client(self, host, user, key):
+ """Return a connected Paramiko ssh object.
+
+ :param str host: The host to connect to.
+ :param str user: The user to connect as.
+ :param str key: The private key to authenticate with.
+
+ :return: object: A paramiko.SSHClient
+ :raises: :class:`paramiko.ssh_exception.SSHException` if the
+ connection failed
+ """
+
+ ssh = paramiko.SSHClient()
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+
+ pkey = None
+
+ # Read the private key into a paramiko.RSAKey
+ if os.path.exists(key):
+ with open(key, 'r') as f:
+ pkey = paramiko.RSAKey.from_private_key(f)
+
+ #######################################################################
+ # There is a bug in some versions of OpenSSH 4.3 (CentOS/RHEL5) where #
+ # the server may not send the SSH_MSG_USERAUTH_BANNER message except #
+ # when responding to an auth_none request. For example, paramiko will #
+ # attempt to use password authentication when a password is set, but #
+ # the server could deny that, instead requesting keyboard-interactive.#
+ # The hack to workaround this is to attempt a reconnect, which will #
+ # receive the right banner, and authentication can proceed. See the #
+ # following for more info: #
+ # https://github.com/paramiko/paramiko/issues/432 #
+ # https://github.com/paramiko/paramiko/pull/438 #
+ #######################################################################
+
+ try:
+ ssh.connect(host, port=22, username=user, pkey=pkey)
+ except paramiko.ssh_exception.SSHException as e:
+ if 'Error reading SSH protocol banner' == str(e):
+ # Once more, with feeling
+ ssh.connect(host, port=22, username=user, pkey=pkey)
+ else:
+ # Reraise the original exception
+ raise e
+
+ return ssh
+
+ def _run_command(self, ssh, cmd, pty=True):
+ """Run a command remotely via SSH.
+
+ :param object ssh: The SSHClient
+ :param str cmd: The command to execute
+ :param list cmd: The `shlex.split` command to execute
+ :param bool pty: Whether to allocate a pty
+
+ :return: tuple: The stdout and stderr of the command execution
+ :raises: :class:`CalledProcessError` if the command fails
+ """
+
+ if isinstance(cmd, str):
+ cmd = shlex.split(cmd)
+
+ if type(cmd) is not list:
+ cmd = [cmd]
+
+ cmds = ' '.join(cmd)
+ stdin, stdout, stderr = ssh.exec_command(cmds, get_pty=pty)
+ retcode = stdout.channel.recv_exit_status()
+
+ if retcode > 0:
+ output = stderr.read().strip()
+ raise CalledProcessError(returncode=retcode, cmd=cmd,
+ output=output)
+ return (
+ stdout.read().decode('utf-8').strip(),
+ stderr.read().decode('utf-8').strip()
+ )
+
+ def _init_ubuntu_user(self):
+ """Initialize the ubuntu user.
+
+ :return: bool: If the initialization was successful
+ :raises: :class:`paramiko.ssh_exception.AuthenticationException`
+ if the authentication fails
+ """
+
+ # TODO: Test this on an image without the ubuntu user setup.
+
+ auth_user = self.user
+ ssh = None
+ try:
+ # Run w/o allocating a pty, so we fail if sudo prompts for a passwd
+ ssh = self._get_ssh_client(
+ self.host,
+ "ubuntu",
+ self.private_key_path,
+ )
+
+ stdout, stderr = self._run_command(ssh, "sudo -n true", pty=False)
+ except paramiko.ssh_exception.AuthenticationException as e:
+ raise e
+ else:
+ auth_user = "ubuntu"
+ finally:
+ if ssh:
+ ssh.close()
+
+ # if the above fails, run the init script as the authenticated user
+
+ # Infer the public key
+ public_key = None
+ public_key_path = "{}.pub".format(self.private_key_path)
+
+ if not os.path.exists(public_key_path):
+ raise FileNotFoundError(
+ "Public key '{}' doesn't exist.".format(public_key_path)
+ )
+
+ with open(public_key_path, "r") as f:
+ public_key = f.readline()
+
+ script = INITIALIZE_UBUNTU_SCRIPT.format(public_key)
+
+ try:
+ ssh = self._get_ssh_client(
+ self.host,
+ auth_user,
+ self.private_key_path,
+ )
+
+ self._run_command(
+ ssh,
+ ["sudo", "/bin/bash -c " + shlex.quote(script)],
+ pty=True
+ )
+ except paramiko.ssh_exception.AuthenticationException as e:
+ raise e
+ finally:
+ ssh.close()
+
+ return True
+
+ def _detect_hardware_and_os(self, ssh):
+ """Detect the target hardware capabilities and OS series.
+
+ :param object ssh: The SSHClient
+ :return: str: A raw string containing OS and hardware information.
+ """
+
+ info = {
+ 'series': '',
+ 'arch': '',
+ 'cpu-cores': '',
+ 'mem': '',
+ }
+
+ stdout, stderr = self._run_command(
+ ssh,
+ ["sudo", "/bin/bash -c " + shlex.quote(DETECTION_SCRIPT)],
+ pty=True,
+ )
+
+ lines = stdout.split("\n")
+ info['series'] = lines[0].strip()
+ info['arch'] = normalize_arch(lines[1].strip())
+
+ memKb = re.split(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()
log = logging.getLogger(__name__)
+class Endpoint:
+ def __init__(self, model, data):
+ self.model = model
+ self.data = data
+
+ def __repr__(self):
+ return '<Endpoint {}:{}>'.format(self.application.name, self.name)
+
+ @property
+ def application(self):
+ return self.model.applications[self.data['application-name']]
+
+ @property
+ def name(self):
+ return self.data['relation']['name']
+
+ @property
+ def interface(self):
+ return self.data['relation']['interface']
+
+ @property
+ def role(self):
+ return self.data['relation']['role']
+
+ @property
+ def scope(self):
+ return self.data['relation']['scope']
+
+
class Relation(model.ModelEntity):
+ def __repr__(self):
+ return '<Relation id={} {}>'.format(self.entity_id, self.key)
+
+ @property
+ def endpoints(self):
+ return [Endpoint(self.model, data)
+ for data in self.safe_data['endpoints']]
+
+ @property
+ def provides(self):
+ """
+ The endpoint on the provides side of this relation, or None.
+ """
+ for endpoint in self.endpoints:
+ if endpoint.role == 'provider':
+ return endpoint
+ return None
+
+ @property
+ def requires(self):
+ """
+ The endpoint on the requires side of this relation, or None.
+ """
+ for endpoint in self.endpoints:
+ if endpoint.role == 'requirer':
+ return endpoint
+ return None
+
+ @property
+ def peers(self):
+ """
+ The peers endpoint of this relation, or None.
+ """
+ for endpoint in self.endpoints:
+ if endpoint.role == 'peer':
+ return endpoint
+ return None
+
+ @property
+ def is_subordinate(self):
+ return any(ep.scope == 'container' for ep in self.endpoints)
+
+ @property
+ def is_peer(self):
+ return any(ep.role == 'peer' for ep in self.endpoints)
+
+ def matches(self, *specs):
+ """
+ Check if this relation matches relationship specs.
+
+ Relation specs are strings that would be given to Juju to establish a
+ relation, and should be in the form ``<application>[:<endpoint_name>]``
+ where the ``:<endpoint_name>`` suffix is optional. If the suffix is
+ omitted, this relation will match on any endpoint as long as the given
+ application is involved.
+
+ In other words, this relation will match a spec if that spec could have
+ created this relation.
+
+ :return: True if all specs match.
+ """
+ for spec in specs:
+ if ':' in spec:
+ app_name, endpoint_name = spec.split(':')
+ else:
+ app_name, endpoint_name = spec, None
+ for endpoint in self.endpoints:
+ if app_name == endpoint.application.name and \
+ endpoint_name in (endpoint.name, None):
+ # found a match for this spec, so move to next one
+ break
+ else:
+ # no match for this spec
+ return False
+ return True
+
+ @property
+ def applications(self):
+ """
+ All applications involved in this relation.
+ """
+ return [ep.application for ep in self.endpoints]
+
async def destroy(self):
raise NotImplementedError()
# TODO: destroy a relation
+# TODO: Tags should be a proper class, so that we can distinguish whether
+# something is already a tag or not. For example, 'user-foo' is a valid
+# username, but is ambiguous with the already-tagged username 'foo'.
+
+
def _prefix(prefix, s):
if s and not s.startswith(prefix):
return '{}{}'.format(prefix, s)
def application(app_name):
return _prefix('application-', app_name)
+
+
+def action(action_uuid):
+ return _prefix('action-', action_uuid)
import logging
-from dateutil.parser import parse as parse_date
+import pyrfc3339
from . import model
from .client import client
"""Get the time when the `agent_status` was last updated.
"""
- return parse_date(self.safe_data['agent-status']['since'])
+ return pyrfc3339.parse(self.safe_data['agent-status']['since'])
@property
def agent_status_message(self):
"""Get the time when the `workload_status` was last updated.
"""
- return parse_date(self.safe_data['workload-status']['since'])
+ return pyrfc3339.parse(self.safe_data['workload-status']['since'])
@property
def workload_status_message(self):
"""Run command on this unit.
:param str command: The command to run
- :param int timeout: Time to wait before command is considered failed
+ :param int timeout: Time, in seconds, to wait before command is
+ considered failed
:returns: A :class:`juju.action.Action` instance.
"""
log.debug(
'Running `%s` on %s', command, self.name)
+ if timeout:
+ # Convert seconds to nanoseconds
+ timeout = int(timeout * 1000000000)
+
res = await action.Run(
[],
command,
"""Run an action on this unit.
:param str action_name: Name of action to run
- :param \*\*params: Action parameters
+ :param **params: Action parameters
:returns: A :class:`juju.action.Action` instance.
Note that this only enqueues the action. You will need to call
: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)
:param str destination: Local destination of transferred files
:param str user: Remote username
:param bool proxy: Proxy through the Juju API server
- :param str scp_opts: Additional options to the `scp` command
+ :param scp_opts: Additional options to the `scp` command
+ :type scp_opts: str or list
"""
await self.machine.scp_from(source, destination, user=user,
proxy=proxy, scp_opts=scp_opts)
--- /dev/null
+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
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):
'''
p = await asyncio.create_subprocess_exec(
- *cmd,
- stdin=asyncio.subprocess.PIPE,
- stdout=asyncio.subprocess.PIPE,
- stderr=asyncio.subprocess.PIPE,
- loop=loop)
+ *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)
can be passed on to a model.
'''
+ loop = loop or asyncio.get_event_loop()
return await loop.run_in_executor(None, _read_ssh_key)
await queue.put(value)
-async def run_with_interrupt(task, event, loop=None):
+async def block_until(*conditions, timeout=None, wait_period=0.5, loop=None):
+ """Return only after all conditions are true.
+
+ """
+ async def _block():
+ while not all(c() for c in conditions):
+ await asyncio.sleep(wait_period, loop=loop)
+ await asyncio.wait_for(_block(), timeout, loop=loop)
+
+
+async def run_with_interrupt(task, *events, loop=None):
"""
- Awaits a task while allowing it to be interrupted by an `asyncio.Event`.
+ Awaits a task while allowing it to be interrupted by one or more
+ `asyncio.Event`s.
- If the task finishes without the event becoming set, the results of the
- task will be returned. If the event becomes set, the task will be
- cancelled ``None`` will be returned.
+ If the task finishes without the events becoming set, the results of the
+ task will be returned. If the event become set, the task will be cancelled
+ ``None`` will be returned.
:param task: Task to run
- :param event: An `asyncio.Event` which, if set, will interrupt `task`
- and cause it to be cancelled.
+ :param events: One or more `asyncio.Event`s which, if set, will interrupt
+ `task` and cause it to be cancelled.
:param loop: Optional event loop to use other than the default.
"""
loop = loop or asyncio.get_event_loop()
- event_task = loop.create_task(event.wait())
- done, pending = await asyncio.wait([task, event_task],
+ task = asyncio.ensure_future(task, loop=loop)
+ event_tasks = [loop.create_task(event.wait()) for event in events]
+ done, pending = await asyncio.wait([task] + event_tasks,
loop=loop,
return_when=asyncio.FIRST_COMPLETED)
for f in pending:
- f.cancel()
- result = [f.result() for f in done if f is not event_task]
- if result:
- return result[0]
+ f.cancel() # cancel unfinished tasks
+ for f in done:
+ f.exception() # prevent "exception was not retrieved" errors
+ if task in done:
+ return task.result() # may raise exception
else:
return None
+
+
+class Addrs(univ.SequenceOf):
+ componentType = char.PrintableString()
+
+
+class RegistrationInfo(univ.Sequence):
+ """
+ ASN.1 representation of:
+
+ type RegistrationInfo struct {
+ User string
+
+ Addrs []string
+
+ SecretKey []byte
+
+ ControllerName string
+ }
+ """
+ pass
+
+
+def generate_user_controller_access_token(username, controller_endpoints, secret_key, controller_name):
+ """" Implement in python what is currently done in GO
+ https://github.com/juju/juju/blob/a5ab92ec9b7f5da3678d9ac603fe52d45af24412/cmd/juju/user/utils.go#L16
+
+ :param username: name of the user to register
+ :param controller_endpoints: juju controller endpoints list in the format <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)
packages=find_packages(
exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
install_requires=[
- 'websockets',
- 'pyyaml',
- 'theblues',
- 'python-dateutil'
+ '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',
"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': [
-import mock
+import inspect
import subprocess
import uuid
+from contextlib import contextmanager
+from pathlib import Path
-import pytest
-
+import mock
+from juju.client.jujudata import FileJujuData
from juju.controller import Controller
-from juju.client.connection import JujuData
+
+import pytest
def is_bootstrapped():
- result = subprocess.run(['juju', 'switch'], stdout=subprocess.PIPE)
- return (
- result.returncode == 0 and
- len(result.stdout.decode().strip()) > 0)
+ 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
+ self._controller = None
async def __aenter__(self):
- self.controller = Controller()
- await self.controller.connect_current()
- return self.controller
+ self._controller = Controller()
+ await self._controller.connect()
+ return self._controller
async def __aexit__(self, exc_type, exc, tb):
- await self.controller.disconnect()
+ await self._controller.disconnect()
class CleanModel():
- def __init__(self):
- self.controller = None
- self.model = None
+ """
+ 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):
- self.controller = Controller()
- await self.controller.connect_current()
-
- model_name = 'model-{}'.format(uuid.uuid4())
- self.model = await self.controller.add_model(model_name)
+ 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
+ self._model_uuid = self._model.info.uuid
- # Ensure that we connect to the new model by default. This also
- # prevents failures if test was started with no current model.
- self._patch_cm = mock.patch.object(JujuData, 'current_model',
- return_value=model_name)
- self._patch_cm.start()
-
- return self.model
+ return self._model
async def __aexit__(self, exc_type, exc, tb):
- self._patch_cm.stop()
- await self.model.disconnect()
- await self.controller.destroy_model(self.model_uuid)
- await self.controller.disconnect()
+ 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
+applications:
+ myapp:
+ charm: cs:xenial/ubuntu-0
+ num_units: 1
+ to:
+ - 0
+ - 0
--- /dev/null
+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
+series: xenial
+services:
+ ghost:
+ charm: "cs:ghost-19"
+ num_units: 1
+ resources:
+ ghost-stable: 11
--- /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
+-----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-----
+import asyncio
+
import pytest
from .. import base
async def test_action(event_loop):
async with base.CleanModel() as model:
ubuntu_app = await model.deploy(
- 'mysql',
+ 'percona-cluster',
application_name='mysql',
- series='trusty',
+ series='xenial',
channel='stable',
config={
'tuning-level': 'safest',
config = await ubuntu_app.get_config()
assert config['tuning-level']['value'] == 'fast'
+ # Restore config back to default
+ await ubuntu_app.reset_config(['tuning-level'])
+ config = await ubuntu_app.get_config()
+ assert config['tuning-level']['value'] == 'safest'
+
# update and check app constraints
await ubuntu_app.set_constraints({'mem': 512 * MB})
constraints = await ubuntu_app.get_constraints()
assert constraints['mem'] == 512 * MB
+ # check action definitions
+ actions = await ubuntu_app.get_actions()
+ assert 'backup' in actions.keys()
+
@base.bootstrapped
@pytest.mark.asyncio
assert app.data['charm-url'] == 'cs:ubuntu-0'
await app.upgrade_charm(switch='ubuntu-8')
assert app.data['charm-url'] == 'cs:ubuntu-8'
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_upgrade_charm_resource(event_loop):
+ async with base.CleanModel() as model:
+ app = await model.deploy('cs:~cynerva/upgrade-charm-resource-test-1')
+
+ def units_ready():
+ if not app.units:
+ return False
+ unit = app.units[0]
+ return unit.workload_status == 'active' and \
+ unit.agent_status == 'idle'
+
+ await asyncio.wait_for(model.block_until(units_ready), timeout=480)
+ unit = app.units[0]
+ expected_message = 'I have no resource.'
+ assert unit.workload_status_message == expected_message
+
+ await app.upgrade_charm(revision=2)
+ await asyncio.wait_for(
+ model.block_until(
+ lambda: unit.workload_status_message != 'I have no resource.'
+ ),
+ timeout=60
+ )
+ expected_message = 'My resource: I am the resource.'
+ assert app.units[0].workload_status_message == expected_message
-import pytest
-
from juju.client import client
+import pytest
+
from .. import base
@pytest.mark.asyncio
async def test_user_info(event_loop):
async with base.CleanModel() as model:
- controller_conn = await model.connection.controller()
+ controller_conn = await model.connection().controller()
um = client.UserManagerFacade.from_connection(controller_conn)
result = await um.UserInfo(
import asyncio
-import pytest
+import http
+import logging
+import socket
+import ssl
+from contextlib import closing
+from pathlib import Path
-from juju.client.connection import Connection
from juju.client import client
-from .. import base
+from juju.client.connection import Connection
+from juju.controller import Controller
+from juju.utils import run_with_interrupt
+import pytest
+import websockets
-@base.bootstrapped
-@pytest.mark.asyncio
-async def test_connect_current(event_loop):
- async with base.CleanModel():
- conn = await Connection.connect_current()
+from .. import base
- assert isinstance(conn, Connection)
- await conn.close()
+
+logger = logging.getLogger(__name__)
@base.bootstrapped
@pytest.mark.asyncio
async def test_monitor(event_loop):
-
- async with base.CleanModel():
- conn = await Connection.connect_current()
-
+ async with base.CleanModel() as model:
+ conn = model.connection()
assert conn.monitor.status == 'connected'
await conn.close()
@pytest.mark.asyncio
async def test_monitor_catches_error(event_loop):
- async with base.CleanModel():
- conn = await Connection.connect_current()
+ async with base.CleanModel() as model:
+ conn = model.connection()
assert conn.monitor.status == 'connected'
- await conn.ws.close()
-
- assert conn.monitor.status == 'error'
-
- await conn.close()
+ 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
channel='stable',
)
- c = client.ClientFacade.from_connection(model.connection)
+ c = client.ClientFacade.from_connection(model.connection())
await c.FullStatus(None)
@pytest.mark.asyncio
async def test_reconnect(event_loop):
async with base.CleanModel() as model:
- conn = await Connection.connect(
- model.connection.endpoint,
- model.connection.uuid,
- model.connection.username,
- model.connection.password,
- model.connection.cacert,
- model.connection.macaroons,
- model.connection.loop,
- model.connection.max_frame_size)
+ kwargs = model.connection().connect_params()
+ conn = await Connection.connect(**kwargs)
try:
await asyncio.sleep(0.1)
assert 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]
-import pytest
+import asyncio
+import subprocess
import uuid
-from .. import base
+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_user(event_loop):
+async def test_add_remove_user(event_loop):
async with base.CleanController() as controller:
username = 'test{}'.format(uuid.uuid4())
- await controller.add_user(username)
- result = await controller.get_user(username)
- res_ser = result.serialize()['results'][0].serialize()
- assert res_ser['result'] is not None
+ 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
async def test_disable_enable_user(event_loop):
async with base.CleanController() as controller:
username = 'test-disable{}'.format(uuid.uuid4())
- await controller.add_user(username)
- await controller.disable_user(username)
- result = await controller.get_user(username)
- res_ser = result.serialize()['results'][0].serialize()
- assert res_ser['result'].serialize()['disabled'] is True
- await controller.enable_user(username)
- result = await controller.get_user(username)
- res_ser = result.serialize()['results'][0].serialize()
- assert res_ser['result'].serialize()['disabled'] is False
+ 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
async def test_change_user_password(event_loop):
async with base.CleanController() as controller:
username = 'test-password{}'.format(uuid.uuid4())
- await controller.add_user(username)
- await controller.change_user_password(username, 'password')
+ 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:
- new_controller = Controller()
- await new_controller.connect(
- controller.connection.endpoint, username, 'password')
- result = True
- await new_controller.disconnect()
+ kwargs = controller.connection().connect_params()
+ kwargs['username'] = username
+ kwargs['password'] = 'password'
+ new_connection = await Connection.connect(**kwargs)
except JujuAPIError:
- result = False
- assert result is True
+ pass
+ finally:
+ # No connection with old password
+ assert new_connection is None
@base.bootstrapped
@pytest.mark.asyncio
-async def test_grant(event_loop):
+async def test_grant_revoke(event_loop):
async with base.CleanController() as controller:
username = 'test-grant{}'.format(uuid.uuid4())
- await controller.add_user(username)
- await controller.grant(username, 'superuser')
- result = await controller.get_user(username)
- result = result.serialize()['results'][0].serialize()['result']\
- .serialize()
- assert result['access'] == 'superuser'
- await controller.grant(username, 'login')
- result = await controller.get_user(username)
- result = result.serialize()['results'][0].serialize()['result']\
- .serialize()
- assert result['access'] == 'login'
+ user = await controller.add_user(username)
+ await user.grant('superuser')
+ assert user.access == 'superuser'
+ fresh = await controller.get_user(username) # fetch fresh copy
+ assert fresh.access == 'superuser'
+ await user.grant('login') # already has 'superuser', so no-op
+ assert user.access == 'superuser'
+ fresh = await controller.get_user(username) # fetch fresh copy
+ assert fresh.access == 'superuser'
+ await user.revoke()
+ assert user.access == ''
+ fresh = await controller.get_user(username) # fetch fresh copy
+ assert fresh.access == ''
@base.bootstrapped
@pytest.mark.asyncio
-async def test_get_models(event_loop):
+async def test_list_models(event_loop):
async with base.CleanController() as controller:
- result = await controller.get_models()
- assert isinstance(result.serialize()['user-models'], list)
+ 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
from juju.client import client
async with base.CleanModel() as model:
- ann_facade = client.AnnotationsFacade.from_connection(model.connection)
+ ann_facade = client.AnnotationsFacade.from_connection(model.connection())
ann = client.EntityAnnotations(
entity='badtag',
looking at a single result coming back.
'''
- from juju.errors import JujuError
+ from juju.errors import JujuError
from juju.client import client
async with base.CleanModel() as model:
- app_facade = client.ApplicationFacade.from_connection(model.connection)
+ app_facade = client.ApplicationFacade.from_connection(model.connection())
with pytest.raises(JujuError):
return await app_facade.GetCharmURL('foo')
--- /dev/null
+import logging
+import os
+
+import macaroonbakery.bakery as bakery
+import macaroonbakery.httpbakery as httpbakery
+import macaroonbakery.httpbakery.agent as agent
+from juju.errors import JujuAPIError
+from juju.model import Model
+
+import pytest
+
+from .. import base
+
+log = logging.getLogger(__name__)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+@pytest.mark.xfail
+async def test_macaroon_auth(event_loop):
+ auth_info, username = agent_auth_info()
+ # Create a bakery client that can do agent authentication.
+ client = httpbakery.Client(
+ key=auth_info.key,
+ interaction_methods=[agent.AgentInteractor(auth_info)],
+ )
+
+ async with base.CleanModel(bakery_client=client) as m:
+ async with await m.get_controller() as c:
+ await c.grant_model(username, m.info.uuid, 'admin')
+ async with Model(
+ jujudata=NoAccountsJujuData(m._connector.jujudata),
+ bakery_client=client,
+ ):
+ pass
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+@pytest.mark.xfail
+async def test_macaroon_auth_with_bad_key(event_loop):
+ auth_info, username = agent_auth_info()
+ # Use a random key rather than the correct key.
+ auth_info = auth_info._replace(key=bakery.generate_key())
+ # Create a bakery client can do agent authentication.
+ client = httpbakery.Client(
+ key=auth_info.key,
+ interaction_methods=[agent.AgentInteractor(auth_info)],
+ )
+
+ async with base.CleanModel(bakery_client=client) as m:
+ async with await m.get_controller() as c:
+ await c.grant_model(username, m.info.uuid, 'admin')
+ try:
+ async with Model(
+ jujudata=NoAccountsJujuData(m._connector.jujudata),
+ bakery_client=client,
+ ):
+ pytest.fail('Should not be able to connect with invalid key')
+ except httpbakery.BakeryException:
+ # We're expecting this because we're using the
+ # wrong key.
+ pass
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_macaroon_auth_with_unauthorized_user(event_loop):
+ auth_info, username = agent_auth_info()
+ # Create a bakery client can do agent authentication.
+ client = httpbakery.Client(
+ key=auth_info.key,
+ interaction_methods=[agent.AgentInteractor(auth_info)],
+ )
+ async with base.CleanModel(bakery_client=client) as m:
+ # Note: no grant of rights to the agent user.
+ try:
+ async with Model(
+ jujudata=NoAccountsJujuData(m._connector.jujudata),
+ bakery_client=client,
+ ):
+ pytest.fail('Should not be able to connect without grant')
+ except (JujuAPIError, httpbakery.DischargeError):
+ # We're expecting this because we're using the
+ # wrong user name.
+ pass
+
+
+def agent_auth_info():
+ agent_data = os.environ.get('TEST_AGENTS')
+ if agent_data is None:
+ pytest.skip('skipping macaroon_auth because no TEST_AGENTS '
+ 'environment variable is set')
+ auth_info = agent.read_auth_info(agent_data)
+ if len(auth_info.agents) != 1:
+ raise Exception('TEST_AGENTS agent data requires exactly one agent')
+ return auth_info, auth_info.agents[0].username
+
+
+class NoAccountsJujuData:
+ def __init__(self, jujudata):
+ self.__jujudata = jujudata
+
+ def __getattr__(self, name):
+ return getattr(self.__jujudata, name)
+
+ def accounts(self):
+ return {}
import asyncio
-import pytest
-
from tempfile import NamedTemporaryFile
+import pytest
+
from .. import base
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.agent_status == 'started')),
+ model.block_until(
+ lambda: (machine.status == 'running' and
+ machine.status_message.lower() == 'running' and
+ machine.agent_status == 'started')),
timeout=480)
- assert machine.status == 'running'
- # there is some inconsistency in the message case between providers
- assert machine.status_message.lower() == 'running'
- assert machine.agent_status == 'started'
- assert machine.agent_version.major >= 2
-
@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(
with NamedTemporaryFile() as f:
f.write(b'testcontents')
f.flush()
- await machine.scp_to(f.name, 'testfile')
+ await machine.scp_to(f.name, 'testfile', scp_opts='-p')
with NamedTemporaryFile() as f:
- await machine.scp_from('testfile', f.name)
+ await machine.scp_from('testfile', f.name, scp_opts='-p')
assert f.read() == b'testcontents'
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
-from juju.model import Model
-from juju.client.client import ConfigValue
+
MB = 1
GB = 1024
@base.bootstrapped
@pytest.mark.asyncio
-async def test_deploy_local_bundle(event_loop):
- from pathlib import Path
+async def test_deploy_local_bundle_dir(event_loop):
tests_dir = Path(__file__).absolute().parent.parent
bundle_path = tests_dir / 'bundle'
async with base.CleanModel() as model:
await model.deploy(str(bundle_path))
- for app in ('wordpress', 'mysql'):
- assert app in model.applications
+ wordpress = model.applications.get('wordpress')
+ mysql = model.applications.get('mysql')
+ assert wordpress and mysql
+ await block_until(lambda: (len(wordpress.units) == 1 and
+ len(mysql.units) == 1),
+ timeout=60 * 4)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_local_bundle_file(event_loop):
+ tests_dir = Path(__file__).absolute().parent.parent
+ bundle_path = tests_dir / 'bundle'
+ mini_bundle_file_path = bundle_path / 'mini-bundle.yaml'
+
+ async with base.CleanModel() as model:
+ await model.deploy(str(mini_bundle_file_path))
+
+ dummy_sink = model.applications.get('dummy-sink')
+ dummy_subordinate = model.applications.get('dummy-subordinate')
+ assert dummy_sink and dummy_subordinate
+ await block_until(lambda: (len(dummy_sink.units) == 1 and
+ len(dummy_subordinate.units) == 1),
+ timeout=60 * 4)
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_invalid_bundle(event_loop):
+ tests_dir = Path(__file__).absolute().parent.parent
+ bundle_path = tests_dir / 'bundle' / 'invalid.yaml'
+ async with base.CleanModel() as model:
+ with pytest.raises(JujuError):
+ await model.deploy(str(bundle_path))
+
+
+@base.bootstrapped
+@pytest.mark.asyncio
+async def test_deploy_local_charm(event_loop):
+ from pathlib import Path
+ tests_dir = Path(__file__).absolute().parent.parent
+ charm_path = tests_dir / 'charm'
+
+ async with base.CleanModel() as model:
+ await model.deploy(str(charm_path))
+ assert 'charm' in model.applications
@base.bootstrapped
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')
+ rev = await model.deploy(charm + '-2', 'a3')
assert [a.charm_url for a in (stable, edge, rev)] == [
'cs:~johnsca/libjuju-test-1',
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"
+ )
+
+ # connect using the local unix socket
+ client = pylxd.Client()
+
+ test_name = "test-{}-add-manual-machine-ssh".format(
+ uuid.uuid4().hex[-4:]
+ )
+
+ # create profile w/cloud-init and juju ssh key
+ public_key = ""
+ with open(public_key_path, "r") as f:
+ public_key = f.readline()
+
+ profile = client.profiles.create(
+ test_name,
+ config={'user.user-data': '#cloud-config\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)
+
+ 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):
# subordinates must be deployed without units
num_units=0,
)
- my_relation = await model.add_relation(
- 'ubuntu',
- 'nrpe',
- )
+
+ relation_added = asyncio.Event()
+ timeout = asyncio.Event()
+
+ class TestObserver(ModelObserver):
+ async def on_relation_add(self, delta, old, new, model):
+ if set(new.key.split()) == {'nrpe:general-info',
+ 'ubuntu:juju-info'}:
+ relation_added.set()
+ event_loop.call_later(2, timeout.set)
+
+ model.add_observer(TestObserver())
+
+ real_app_facade = ApplicationFacade.from_connection(model.connection())
+ mock_app_facade = mock.MagicMock()
+
+ async def mock_AddRelation(*args):
+ # force response delay from AddRelation to test race condition
+ # (see https://github.com/juju/python-libjuju/issues/191)
+ result = await real_app_facade.AddRelation(*args)
+ await relation_added.wait()
+ return result
+
+ mock_app_facade.AddRelation = mock_AddRelation
+
+ with mock.patch.object(ApplicationFacade, 'from_connection',
+ return_value=mock_app_facade):
+ my_relation = await run_with_interrupt(model.add_relation(
+ 'ubuntu',
+ 'nrpe',
+ ), timeout, loop=event_loop)
assert isinstance(my_relation, Relation)
-async def _deploy_in_loop(new_loop, model_name):
- new_model = Model(new_loop)
- await new_model.connect_model(model_name)
+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
await new_model.disconnect()
-@base.bootstrapped
-@pytest.mark.asyncio
-async def test_explicit_loop(event_loop):
- async with base.CleanModel() as model:
- model_name = model.info.name
- new_loop = asyncio.new_event_loop()
- new_loop.run_until_complete(
- _deploy_in_loop(new_loop, model_name))
- await model._wait_for_new('application', 'ubuntu')
- assert 'ubuntu' in model.applications
-
-
@base.bootstrapped
@pytest.mark.asyncio
async def test_explicit_loop_threaded(event_loop):
with ThreadPoolExecutor(1) as executor:
f = executor.submit(
new_loop.run_until_complete,
- _deploy_in_loop(new_loop, model_name))
+ _deploy_in_loop(new_loop,
+ model_name,
+ model._connector.jujudata))
f.result()
await model._wait_for_new('application', 'ubuntu')
assert 'ubuntu' in model.applications
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'
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_watcher_reconnect(event_loop):
async with base.CleanModel() as model:
- await model.connection.ws.close()
- await asyncio.sleep(0.1)
- assert model.connection.is_open
+ await model.connection().ws.close()
+ await block_until(model.is_connected, timeout=3)
@base.bootstrapped
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)
import asyncio
-import pytest
-
from tempfile import NamedTemporaryFile
+import pytest
+
from .. import base
assert 'Stdout' in action.results
break
+ for unit in app.units:
+ action = await unit.run('sleep 1', timeout=0.5)
+ assert isinstance(action, Action)
+ assert action.status == 'failed'
+ break
+
+ for unit in app.units:
+ action = await unit.run('sleep 0.5', timeout=2)
+ assert isinstance(action, Action)
+ assert action.status == 'completed'
+ break
+
@base.bootstrapped
@pytest.mark.asyncio
for unit in app.units:
action = await run_action(unit)
assert action.results == {'dir': '/var/git/myrepo.git'}
+ out = await model.get_action_output(action.entity_id, wait=5)
+ assert out == {'dir': '/var/git/myrepo.git'}
+ status = await model.get_action_status(uuid_or_prefix=action.entity_id)
+ assert status[action.entity_id] == 'completed'
break
@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:
app = await model.deploy('ubuntu')
"""
import mock
-import pytest
-
-
from juju.client import client
-
def test_basics():
assert client.CLIENTS
- for i in range(1,5): # Assert versions 1-4 in client dict
+ for i in range(1, 5): # Assert versions 1-4 in client dict
assert str(i) in client.CLIENTS
connection = mock.Mock()
connection.facades = {"Action": 2}
action_facade = client.ActionFacade.from_connection(connection)
+ assert action_facade
+
-
+def test_to_json():
+ uml = client.UserModelList([client.UserModel()])
+ assert uml.to_json() == ('{"user-models": [{"last-connection": null, '
+ '"model": null}]}')
import asyncio
import json
-import mock
-import pytest
from collections import deque
+import mock
+from juju.client.connection import Connection
from websockets.exceptions import ConnectionClosed
+import pytest
+
from .. import base
-from juju.client.connection import Connection
class WebsocketMock:
@pytest.mark.asyncio
async def test_out_of_order(event_loop):
- con = Connection(*[None]*4)
ws = WebsocketMock([
{'request-id': 1},
{'request-id': 3},
{'request-id': 2},
{'request-id': 3},
]
- con._get_sll = mock.MagicMock()
+ minimal_facades = [{'name': 'Pinger', 'versions': [1]}]
+ con = None
try:
- with mock.patch('websockets.connect', base.AsyncMock(return_value=ws)):
- await con.open()
+ with \
+ mock.patch('websockets.connect', base.AsyncMock(return_value=ws)), \
+ mock.patch(
+ 'juju.client.connection.Connection.login',
+ base.AsyncMock(return_value={'response': {
+ 'facades': minimal_facades,
+ }}),
+ ), \
+ mock.patch('juju.client.connection.Connection._get_ssl'), \
+ mock.patch('juju.client.connection.Connection._pinger', base.AsyncMock()):
+ con = await Connection.connect('0.1.2.3:999')
actual_responses = []
for i in range(3):
actual_responses.append(await con.rpc({'version': 1}))
assert actual_responses == expected_responses
finally:
- await con.close()
+ if con:
+ await con.close()
from juju import constraints
+
class TestConstraints(unittest.TestCase):
def test_mem_regex(self):
self.assertEqual(_("10G"), 10 * 1024)
self.assertEqual(_("10M"), 10)
self.assertEqual(_("10"), 10)
+ self.assertEqual(_("foo,bar"), "foo,bar")
+
+ def test_normalize_list_val(self):
+ _ = constraints.normalize_list_value
+
+ self.assertEqual(_("foo"), ["foo"])
self.assertEqual(_("foo,bar"), ["foo", "bar"])
def test_parse_constraints(self):
)
self.assertEqual(
- _("mem=10G foo=bar,baz"),
- {"mem": 10 * 1024, "foo": ["bar", "baz"]}
+ _("mem=10G foo=bar,baz tags=tag1 spaces=space1,space2"),
+ {"mem": 10 * 1024,
+ "foo": "bar,baz",
+ "tags": ["tag1"],
+ "spaces": ["space1", "space2"]}
)
--- /dev/null
+import asynctest
+import mock
+from pathlib import Path
+from tempfile import NamedTemporaryFile
+
+from juju.controller import Controller
+from juju.client import client
+
+from .. import base
+
+
+class TestControllerConnect(asynctest.TestCase):
+ @asynctest.patch('juju.client.connector.Connector.connect_controller')
+ async def test_no_args(self, mock_connect_controller):
+ c = Controller()
+ await c.connect()
+ mock_connect_controller.assert_called_once_with(None)
+
+ @asynctest.patch('juju.client.connector.Connector.connect_controller')
+ async def test_with_controller_name(self, mock_connect_controller):
+ c = Controller()
+ await c.connect(controller_name='foo')
+ mock_connect_controller.assert_called_once_with('foo')
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_no_auth(self, mock_connect):
+ c = Controller()
+ with self.assertRaises(TypeError):
+ await c.connect(endpoint='0.1.2.3:4566')
+ self.assertEqual(mock_connect.call_count, 0)
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_userpass(self, mock_connect):
+ c = Controller()
+ with self.assertRaises(TypeError):
+ await c.connect(endpoint='0.1.2.3:4566', username='dummy')
+ await c.connect(endpoint='0.1.2.3:4566',
+ username='user',
+ password='pass')
+ mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566',
+ username='user',
+ password='pass')
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_bakery_client(self, mock_connect):
+ c = Controller()
+ await c.connect(endpoint='0.1.2.3:4566', bakery_client='bakery')
+ mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566',
+ bakery_client='bakery')
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_macaroons(self, mock_connect):
+ c = Controller()
+ await c.connect(endpoint='0.1.2.3:4566',
+ macaroons=['macaroon'])
+ mock_connect.assert_called_with(endpoint='0.1.2.3:4566',
+ macaroons=['macaroon'])
+ await c.connect(endpoint='0.1.2.3:4566',
+ bakery_client='bakery',
+ macaroons=['macaroon'])
+ mock_connect.assert_called_with(endpoint='0.1.2.3:4566',
+ bakery_client='bakery',
+ macaroons=['macaroon'])
+
+ @asynctest.patch('juju.client.connector.Connector.connect_controller')
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_posargs(self, mock_connect, mock_connect_controller):
+ c = Controller()
+ await c.connect('foo')
+ mock_connect_controller.assert_called_once_with('foo')
+ with self.assertRaises(TypeError):
+ await c.connect('endpoint', 'user')
+ await c.connect('endpoint', 'user', 'pass')
+ mock_connect.assert_called_once_with(endpoint='endpoint',
+ username='user',
+ password='pass')
+ await c.connect('endpoint', 'user', 'pass', 'cacert', 'bakery',
+ 'macaroons', 'loop', 'max_frame_size')
+ mock_connect.assert_called_with(endpoint='endpoint',
+ username='user',
+ password='pass',
+ cacert='cacert',
+ bakery_client='bakery',
+ macaroons='macaroons',
+ loop='loop',
+ max_frame_size='max_frame_size')
+
+ @asynctest.patch('juju.client.client.CloudFacade')
+ async def test_file_cred_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
+"""
+Tests for the gocookies code.
+"""
+import os
+import shutil
+import tempfile
+import unittest
+import urllib.request
+
+import pyrfc3339
+from juju.client.gocookies import GoCookieJar
+
+# cookie_content holds the JSON contents of a Go-produced
+# cookie file (reformatted so it's not all on one line but
+# otherwise unchanged).
+cookie_content = """
+[
+ {
+ "CanonicalHost": "bar.com",
+ "Creation": "2017-11-17T08:53:55.088820092Z",
+ "Domain": "bar.com",
+ "Expires": "2345-11-15T18:16:08Z",
+ "HostOnly": true,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088822562Z",
+ "Name": "bar",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088822562Z",
+ "Value": "bar-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088814857Z",
+ "Domain": "x.foo.com",
+ "Expires": "2345-11-15T18:16:05Z",
+ "HostOnly": true,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088884015Z",
+ "Name": "foo",
+ "Path": "/path",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088814857Z",
+ "Value": "foo-path-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088814857Z",
+ "Domain": "foo.com",
+ "Expires": "2345-11-15T18:16:06Z",
+ "HostOnly": false,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088919437Z",
+ "Name": "foo4",
+ "Path": "/path",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088814857Z",
+ "Value": "foo4-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088790709Z",
+ "Domain": "x.foo.com",
+ "Expires": "2345-11-15T18:16:01Z",
+ "HostOnly": true,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088884015Z",
+ "Name": "foo",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088790709Z",
+ "Value": "foo-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088790709Z",
+ "Domain": "foo.com",
+ "Expires": "2345-11-15T18:16:02Z",
+ "HostOnly": false,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088919437Z",
+ "Name": "foo1",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088790709Z",
+ "Value": "foo1-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088790709Z",
+ "Domain": "x.foo.com",
+ "Expires": "2345-11-15T18:16:03Z",
+ "HostOnly": true,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088850252Z",
+ "Name": "foo2",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": true,
+ "Updated": "2017-11-17T08:53:55.088790709Z",
+ "Value": "foo2-value"
+ },
+ {
+ "CanonicalHost": "x.foo.com",
+ "Creation": "2017-11-17T08:53:55.088790709Z",
+ "Domain": "foo.com",
+ "Expires": "2345-11-15T18:16:04Z",
+ "HostOnly": false,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088919437Z",
+ "Name": "foo3",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088790709Z",
+ "Value": "foo3-value"
+ }
+]
+"""
+
+# cookie_content_queries holds a set of queries
+# that were automatically generated by running
+# the queries on the above cookie_content data
+# and printing the results.
+cookie_content_queries = [
+ ('http://x.foo.com', [
+ ('foo', 'foo-value'),
+ ('foo1', 'foo1-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+ ('https://x.foo.com', [
+ ('foo', 'foo-value'),
+ ('foo1', 'foo1-value'),
+ ('foo2', 'foo2-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+ ('http://arble.foo.com', [
+ ('foo1', 'foo1-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+ ('http://arble.com', [
+ ]),
+ ('http://x.foo.com/path/x', [
+ ('foo', 'foo-path-value'),
+ ('foo4', 'foo4-value'),
+ ('foo', 'foo-value'),
+ ('foo1', 'foo1-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+ ('http://arble.foo.com/path/x', [
+ ('foo4', 'foo4-value'),
+ ('foo1', 'foo1-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+ ('http://foo.com/path/x', [
+ ('foo4', 'foo4-value'),
+ ('foo1', 'foo1-value'),
+ ('foo3', 'foo3-value'),
+ ]),
+]
+
+
+class TestGoCookieJar(unittest.TestCase):
+ def setUp(self):
+ self.dir = tempfile.mkdtemp()
+
+ def tearDown(self):
+ shutil.rmtree(self.dir)
+
+ def test_readcookies(self):
+ jar = self.load_jar(cookie_content)
+ self.assert_jar_queries(jar, cookie_content_queries)
+
+ def test_roundtrip(self):
+ jar = self.load_jar(cookie_content)
+ filename2 = os.path.join(self.dir, 'cookies2')
+ jar.save(filename=filename2)
+ jar = GoCookieJar()
+ jar.load(filename=filename2)
+ self.assert_jar_queries(jar, cookie_content_queries)
+
+ def test_expiry_time(self):
+ content = '''[
+ {
+ "CanonicalHost": "bar.com",
+ "Creation": "2017-11-17T08:53:55.088820092Z",
+ "Domain": "bar.com",
+ "Expires": "2345-11-15T18:16:08Z",
+ "HostOnly": true,
+ "HttpOnly": false,
+ "LastAccess": "2017-11-17T08:53:55.088822562Z",
+ "Name": "bar",
+ "Path": "/",
+ "Persistent": true,
+ "Secure": false,
+ "Updated": "2017-11-17T08:53:55.088822562Z",
+ "Value": "bar-value"
+ }
+ ]'''
+ jar = self.load_jar(content)
+ got_expires = tuple(jar)[0].expires
+ want_expires = int(pyrfc3339.parse('2345-11-15T18:16:08Z').timestamp())
+ self.assertEqual(got_expires, want_expires)
+
+ def load_jar(self, content):
+ filename = os.path.join(self.dir, 'cookies')
+ with open(filename, 'x') as f:
+ f.write(content)
+ jar = GoCookieJar()
+ jar.load(filename=filename)
+ return jar
+
+ def assert_jar_queries(self, jar, queries):
+ '''Assert that all the given queries (see cookie_content_queries)
+ are satisfied when run on the given cookie jar.
+ :param jar CookieJar: the cookie jar to query
+ :param queries: the queries to run.
+ '''
+ for url, want_cookies in queries:
+ req = urllib.request.Request(url)
+ jar.add_cookie_header(req)
+ # We can't use SimpleCookie to find out what cookies
+ # have been presented, because SimpleCookie
+ # only allows one cookie with a given name,
+ # so we naively parse the cookies ourselves, which
+ # is OK because we know we don't have to deal
+ # with any complex cases.
+
+ cookie_header = req.get_header('Cookie')
+ got_cookies = []
+ if cookie_header is not None:
+ got_cookies = [
+ tuple(part.split('='))
+ for part in cookie_header.split('; ')
+ ]
+ got_cookies.sort()
+ want_cookies = list(want_cookies)
+ want_cookies.sort()
+ self.assertEqual(got_cookies, want_cookies, msg='query {}; got {}; want {}'.format(url, got_cookies, want_cookies))
import asyncio
import unittest
+
import juju.loop
def test_run(self):
assert asyncio.get_event_loop() == self.loop
+
async def _test():
return 'success'
self.assertEqual(juju.loop.run(_test()), 'success')
import unittest
import mock
+
import asynctest
+from juju.client.jujudata import FileJujuData
+from juju.model import Model
+
def _make_delta(entity, type_, data=None):
from juju.client.client import Delta
from juju.model import Model
from juju.application import Application
- loop = mock.MagicMock()
- model = Model(loop=loop)
+ model = Model()
+ model._connector = mock.MagicMock()
delta = _make_delta('application', 'add', dict(name='foo'))
# test add
class TestContextManager(asynctest.TestCase):
@asynctest.patch('juju.model.Model.disconnect')
- @asynctest.patch('juju.model.Model.connect_current')
+ @asynctest.patch('juju.model.Model.connect')
async def test_normal_use(self, mock_connect, mock_disconnect):
from juju.model import Model
self.assertTrue(mock_disconnect.called)
@asynctest.patch('juju.model.Model.disconnect')
- @asynctest.patch('juju.model.Model.connect_current')
+ @asynctest.patch('juju.model.Model.connect')
async def test_exception(self, mock_connect, mock_disconnect):
from juju.model import Model
self.assertTrue(mock_connect.called)
self.assertTrue(mock_disconnect.called)
- @asynctest.patch('juju.client.connection.JujuData.current_controller')
- async def test_no_current_connection(self, mock_current_controller):
+ async def test_no_current_connection(self):
from juju.model import Model
from juju.errors import JujuConnectionError
- mock_current_controller.return_value = ""
+ class NoControllerJujuData(FileJujuData):
+ def current_controller(self):
+ return ""
with self.assertRaises(JujuConnectionError):
- async with Model():
+ async with Model(jujudata=NoControllerJujuData()):
pass
+
+
+@asynctest.patch('juju.model.Model._after_connect')
+class TestModelConnect(asynctest.TestCase):
+ @asynctest.patch('juju.client.connector.Connector.connect_model')
+ async def test_no_args(self, mock_connect_model, _):
+ m = Model()
+ await m.connect()
+ mock_connect_model.assert_called_once_with(None)
+
+ @asynctest.patch('juju.client.connector.Connector.connect_model')
+ async def test_with_model_name(self, mock_connect_model, _):
+ m = Model()
+ await m.connect(model_name='foo')
+ mock_connect_model.assert_called_once_with('foo')
+
+ @asynctest.patch('juju.client.connector.Connector.connect_model')
+ async def test_with_endpoint_but_no_uuid(self, mock_connect_model, _):
+ m = Model()
+ with self.assertRaises(TypeError):
+ await m.connect(endpoint='0.1.2.3:4566')
+ self.assertEqual(mock_connect_model.call_count, 0)
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_uuid_no_auth(self, mock_connect, _):
+ m = Model()
+ with self.assertRaises(TypeError):
+ await m.connect(endpoint='0.1.2.3:4566', uuid='some-uuid')
+ self.assertEqual(mock_connect.call_count, 0)
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_uuid_with_userpass(self, mock_connect, _):
+ m = Model()
+ with self.assertRaises(TypeError):
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ username='user')
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ username='user',
+ password='pass')
+ mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ username='user',
+ password='pass')
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_uuid_with_bakery(self, mock_connect, _):
+ m = Model()
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ bakery_client='bakery')
+ mock_connect.assert_called_once_with(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ bakery_client='bakery')
+
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_endpoint_and_uuid_with_macaroon(self, mock_connect, _):
+ m = Model()
+ with self.assertRaises(TypeError):
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ username='user')
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ macaroons=['macaroon'])
+ mock_connect.assert_called_with(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ macaroons=['macaroon'])
+ await m.connect(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ bakery_client='bakery',
+ macaroons=['macaroon'])
+ mock_connect.assert_called_with(endpoint='0.1.2.3:4566',
+ uuid='some-uuid',
+ bakery_client='bakery',
+ macaroons=['macaroon'])
+
+ @asynctest.patch('juju.client.connector.Connector.connect_model')
+ @asynctest.patch('juju.client.connector.Connector.connect')
+ async def test_with_posargs(self, mock_connect, mock_connect_model, _):
+ m = Model()
+ await m.connect('foo')
+ mock_connect_model.assert_called_once_with('foo')
+ with self.assertRaises(TypeError):
+ await m.connect('endpoint', 'uuid')
+ with self.assertRaises(TypeError):
+ await m.connect('endpoint', 'uuid', 'user')
+ await m.connect('endpoint', 'uuid', 'user', 'pass')
+ mock_connect.assert_called_once_with(endpoint='endpoint',
+ uuid='uuid',
+ username='user',
+ password='pass')
+ await m.connect('endpoint', 'uuid', 'user', 'pass', 'cacert', 'bakery',
+ 'macaroons', 'loop', 'max_frame_size')
+ mock_connect.assert_called_with(endpoint='endpoint',
+ uuid='uuid',
+ username='user',
+ password='pass',
+ cacert='cacert',
+ bakery_client='bakery',
+ macaroons='macaroons',
+ loop='loop',
+ max_frame_size='max_frame_size')
-import pytest
+from juju.client.overrides import Binary, Number # noqa
-from juju.client.overrides import Number, Binary # noqa
+import pytest
# test cases ported from:
import unittest
from juju import placement
-from juju.client import client
+
class TestPlacement(unittest.TestCase):
--- /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"
# and then run "tox" from this directory.
[tox]
-envlist = py35
+envlist = lint,py3
skipsdist=True
+[pytest]
+markers =
+ serial: mark a test that must run by itself
+
[testenv]
+basepython=python3
usedevelop=True
+# for testing with other python versions
+commands = py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs}
passenv =
HOME
+ TEST_AGENTS
deps =
+ asynctest
+ ipdb
+ mock
pytest
pytest-asyncio
pytest-xdist
- mock
- asynctest
- ipdb
+ Twine
+ # use fork to pick up fix for https://github.com/aaugustin/websockets/pull/528
+ git+https://github.com/johnsca/websockets@bug/client-redirects#egg=websockets
+
+[testenv:py3]
+# default tox env excludes integration and serial tests
+commands =
+ # These need to be installed in a specific order
+ pip install urllib3==1.22
+ pip install pylxd
+ py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs}
-[testenv:py35]
-# default tox env excludes integration tests
-commands = py.test -ra -v -s -x -n auto -k 'not integration' {posargs}
+[testenv:lint]
+envdir = {toxworkdir}/py3
+commands =
+ flake8 --ignore E501,W504 {posargs} juju tests
+deps =
+ flake8
[testenv:integration]
-basepython=python3
-commands = py.test -ra -v -s -x -n auto {posargs}
+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/_*